2016-03-01 35 views
0

在我以前的Windows/Eclipse/ant項目開發方法中,我有一種從命令行生成時間限制釋放apk的方法。我想用我的新Ubuntu/Android Studio/Gradle設置重現此功能。如何從更新的源文件構建Android Studio/Gradle?

這是老系統是如何工作的:

我不得不跑運行的JAR,我寫了(也可以製作新的機器上).bat文件。該jar包含兩個參數到期日期和放置輸出文件的位置。 JAR的輸出稱爲Timekey.java,它看起來像:

package uk.co.myname.timekey; 
public final class Timekey{ 
    public static final String EXPIRY_DATE = 
    "the encrypted string"; 
    public String getExpiryDate() { 
     return EXPIRY_DATE; 
    } 
} 
// Plain date : 2020-01-01.00_00_00 

我有這個文件

<target name="-check-timekey"> 
      <echo>"${timelimit_src}/Timekey.java"</echo> 
      <available file="${timelimit_src}/Timekey.java" property="timekey.present" /> 
</target> 

的存在我的build.xml檢查,如果存在這臺SRC

<if condition="${timekey.present}"> 
        <src path="${timelimit_src}" /> 

因此,我可以生成一個apk文件,它只能運行到輸入日期作爲批處理文件的參數。加密不是軍事級的,但足以打敗業餘愛好者,並應該停止混淆惡魔。

任何關於如何使用gradle實現這個想法將是最受歡迎的。我知道如何從bash腳本運行jar,但交換源代碼目錄,僅僅用於命令行發佈版本就讓我難住了

回答

0

我確實設法解決了這個問題。我創建了以前不需要的構建類型「發佈」,因爲「主要」是足夠的。我也修改了「時間限制」的構建類型。 Timekey.java已從main中刪除,並放置在debug,release和timelimited的src/java文件夾(包括類結構層次文件夾)中。

這個腳本完成的過程

#!/bin/bash 
# Script to build time limited apk NBT 2nd March 2016 
# Must be run from one leve below AndroidStudioProjects folder 
# Must have one argument of expiry date in YYYY-MM-DD format 

CURRENT_DIR=`pwd` 

case "$CURRENT_DIR" in 
    *AndroidStudioProjects/*) ;; 
    *) echo "Quitting because of wrong starting directory name" 
     echo "You must be one folder below ~/AndroidStudioProjects to run this script" 
     exit 1 ;; 
esac 

OUTDIR_SUFFIX=/app/src/timelimited/java/uk/co/myname/timekey/ 
OUTDIR=$CURRENT_DIR$OUTDIR_SUFFIX 

echo "Directory to write in: "$OUTDIR 

if [ -z "$1" ] 
then 
    echo "argument 1 required, as expiry date in YYYY-MM-DD format, so quitting" 
    exit 1 
fi 
EXDATE=$1 

case "$EXDATE" in 
    ????-??-??) ;; 
    *) echo "Quitting because of bad date format on parameter 1" 
     exit 1 ;; 
esac 
# the encrypt5.jar requires these two arguments 
java -jar ~/runnablejars/encrypt5.jar $EXDATE $OUTDIR 
echo " " 
echo " " 
gradlew assembleTimelimited 

cat $OUTDIR/Timekey.java 
echo " " 

echo "All done, now IF you saw Timekey.java printed out, then" 
echo "the time limited apk is built. Run gradlew InstallTimelimited" 
echo "to install it on a running device" 

while true; do 
    read -p "Do you wish to install this apk on running device y/n [enter]? " yn 
    case $yn in 
     [Yy]*) gradlew InstallTimelimited; break;; 
     [Nn]*) exit;; 
     *) echo "Please answer yes or no.";; 
    esac 
done 

我希望這可能證明是有用的。可能沒有那麼複雜的方法來做,但我不知道。

相關問題