Android:使用Gradle构建.apk,并在应用程序的大约页面中使用时间戳

Android:使用Gradle构建.apk,并在应用程序的大约页面中使用时间戳,android,gradle,Android,Gradle,我想使用Gradle创建文件名中带有时间戳的apk,并在关于页面上使用此信息 格拉德尔: (如下)在创建输出文件为DSapp-1.2.0-debug\u date\u time.apk时运行良好 applicationVariants.all { variant -> variant.outputs.each { output -> def project = "DSapp" def sep = "_" def version

我想使用Gradle创建文件名中带有时间戳的apk,并在关于页面上使用此信息

格拉德尔: (如下)在创建输出文件为DSapp-1.2.0-debug\u date\u time.apk时运行良好

applicationVariants.all { variant ->
    variant.outputs.each { output ->
        def project = "DSapp"
        def sep = "_"
        def version = variant.versionName
        def newApkName = project + sep + version + sep + formattedDateD + "_" + formattedDateT + ".apk"

        output.outputFile = new File(output.outputFile.parent, newApkName)
    }
}
当我尝试使用
buildConfigField

android {
compileSdkVersion 21
buildToolsVersion "22.0.1"

def date = new Date();
def formattedDateD = date.format('ddMMyy');
def formattedDateT = date.format('HHmm');

defaultConfig {
    applicationId "com.app_name"
    minSdkVersion 18
    targetSdkVersion 20
    versionCode 1
    versionName "1.2.0"



    buildConfigField "String", "STRING2", formattedDateD
    buildConfigField "String", "STRING3", formattedDateT

}
关于.java:

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_about);

    version_number = (TextView)findViewById(R.id.version_number);
    version_number.setText(mVersionName);

    mVersionBuild= "( " + BuildConfig.STRING2 +"_"+BuildConfig.STRING3+ " )";
    version_build = (TextView)findViewById(R.id.version_build);
    version_build.setText(mVersionBuild);
我在
BuildConfig.java

  // Fields from default config.
  public static final String STRING2 = 281116;
  public static final String STRING3 = 0947;

错误:(15,40)错误:整数太大:0947

因此,要实现使用Gradle创建文件名中带有时间戳的apk,还可以在“关于”页面上使用此信息。 我不得不改变我的方法,放弃使用
buildConfigField
的想法,因为这不是实现上述目标所必需的

渐变文件:

向每个
versionNameSuffix
添加
'+getDateTime()

因此,
buildType
的每个部分都将如下所示(调试示例):

在android{}之外添加:

//to handle build process with output as: App_Name_versionName-buildType_date_time.apk
def customAPKname(variant, defaultConfig, buildType) {
    variant.outputs.each { output ->    
        def file = output.packageApplication.outputFile
        def fileName = "App_Name" + defaultConfig.versionName + buildType + ".apk"
            output.packageApplication.outputFile = new File(file.parent, fileName)
        }
}

def getDateTime(){
    def date = new Date()
    def formattedDate = date.format('yyMMdd_HHmm')
    return formattedDate
}
现在在About.java文件中:

private TextView version_number, version_build;
private String mVersionName, mVersionBuild;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_about);

    if (BuildConfig.VERSION_NAME.contains("debug")){
        mVersionName = "App_Name Software version: " + BuildConfig.VERSION_NAME.substring(0,11);
        mVersionBuild = "Build version: " + BuildConfig.VERSION_NAME.substring(12);
    }else {
        mVersionName = "App_Name Software version: " + BuildConfig.VERSION_NAME.substring(0, 13);
        mVersionBuild = "Build version: " + BuildConfig.VERSION_NAME.substring(14);
    }

    version_number = (TextView)findViewById(R.id.version_number);
    version_number.setText(mVersionName);

    version_build = (TextView)findViewById(R.id.version_build);
    version_build.setText(mVersionBuild);

}

输出(用于调试):
App_Name_1.2.0-debug_yymdd_HHMM.apk

Java基本字符串变量应该有撇号=>检查文档如何使用
buildConfigField
字符串
//to handle build process with output as: App_Name_versionName-buildType_date_time.apk
def customAPKname(variant, defaultConfig, buildType) {
    variant.outputs.each { output ->    
        def file = output.packageApplication.outputFile
        def fileName = "App_Name" + defaultConfig.versionName + buildType + ".apk"
            output.packageApplication.outputFile = new File(file.parent, fileName)
        }
}

def getDateTime(){
    def date = new Date()
    def formattedDate = date.format('yyMMdd_HHmm')
    return formattedDate
}
private TextView version_number, version_build;
private String mVersionName, mVersionBuild;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_about);

    if (BuildConfig.VERSION_NAME.contains("debug")){
        mVersionName = "App_Name Software version: " + BuildConfig.VERSION_NAME.substring(0,11);
        mVersionBuild = "Build version: " + BuildConfig.VERSION_NAME.substring(12);
    }else {
        mVersionName = "App_Name Software version: " + BuildConfig.VERSION_NAME.substring(0, 13);
        mVersionBuild = "Build version: " + BuildConfig.VERSION_NAME.substring(14);
    }

    version_number = (TextView)findViewById(R.id.version_number);
    version_number.setText(mVersionName);

    version_build = (TextView)findViewById(R.id.version_build);
    version_build.setText(mVersionBuild);

}