在我以前的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但是交换源目录,只是为了命令行发布版本让我难过
答案 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
我希望这可能有用。可能没有那么复杂的方法,但我不知道。