如何从更新的源文件构建Android Studio / Gradle?

时间:2016-03-01 11:54:27

标签: android android-studio gradle android-gradle

在我以前的Windows / Eclipse / ant项目开发方法中,我有一种从命令行生成限时释放apk的方法。我想用我的新Ubuntu / Android Studio / Gradle设置重现这个功能。

旧系统的运作方式如下:

我有一个.bat文件,它运行了我写的可运行的jar(也可以在我的新机器上创建)。该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

我的build.xml检查是否存在此文件

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

如果存在则设置src

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

因此,我可以生成一个apk,它只会运行到作为批处理文件的参数输入的日期。加密不是军事等级,但足以击败业余爱好者,应该阻止去混淆恶魔。

有关如何使用gradle实现此功能的任何想法都将受到欢迎。我知道如何从bash脚本运行jar但是交换源目录,只是为了命令行发布版本让我难过

1 个答案:

答案 0 :(得分:0)

我最终设法解决了这个问题。我创建了构建类型&#39; release&#39;以前没有必要,因为主要&#39;足够了。我还修改了构建类型&#39; timelimited&#39;。 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

我希望这可能有用。可能没有那么复杂的方法,但我不知道。