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

标签 android android-studio gradle android-gradle-plugin

在以前的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,但是交换源目录,只是为了命令行发布版本而感到困惑

最佳答案

我确实设法解决了这个问题。我创建了以前不需要的构建类型“发布”,因为“主要”就足够了。我还提出了构建类型“timelimited”。 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

我希望这可能会有用。可能有比较复杂的方法,但我不知道。

关于android - 如何从更新的源文件构建Android Studio/Gradle?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35722229/

相关文章:

java - 动态创建的 View 无法正确显示在 GridLayout 中

android - 如何强制 Eclipse 重新启动未更改的应用程序

java - android.security.KeyStoreException : Signature/MAC verification failed

java - Android - 将字符串从 .java 代码提取到 string.xml

java - 如何使用最新版本的计费客户端正确导入 BillingResponse (billing :2. 0.1)

android - AAPT:错误:在 <manifest><application> 中发现了意外元素 <uses-permission>

java - 为什么警报对话框未按正确顺序显示?

android-studio - Android Studio - 如何更改图标的大小?

gradle - 重用config.groovy中的环境

java - 找不到环cors :ring-cors:0. 1.5