我需要通过添加第二个签名来对我的APK进行后期处理,所以我想了解如何在此时进入构建过程。我的第一次尝试,gradle android:post-process APK
task doubleSign {
if (signing.androidBuildExists) {
android.buildTypes.all { type ->
tasks.("assemble${type.name.capitalize()}").finalizedBy doDoubleSign
}
}
}
没关系罚款。但是如果install*
任务中的任何一个都执行完毕,那么我很惊讶,assemble*
不在依赖关系树中。所以接下来我尝试添加该行,
tasks.("install${type.name.capitalize()}").dependsOn doDoubleSign
但是,gradle告诉我该任务不存在!
> Could not find property 'installDebug' on task set.
谢谢。
编辑:添加完整的解决方案供参考。当执行该代码,因为Android插件在afterEvaluate
阶段创建其任务
class DoubleSign extends DefaultTask {
DoubleSign() {
outputs.upToDateWhen { false }
}
File signScript = new File(project.androidBuild + '/sign.sh')
File inputFile
File keystore;
@TaskAction
void sign() {
List<String> args = new ArrayList<String>();
args.add(signScript.toString());
args.add(inputFile.toString());
args.add(keystore.toString());
Process process = new ProcessBuilder(args).redirectErrorStream(true).start();
BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = input.readLine()) != null) {
System.out.println(line);
}
input.close();
}
}
...
afterEvaluate {
android.applicationVariants.all { variant ->
println "outputFile=" + variant.outputFile
if (variant.name.equals("debug")) {
// only do for debug builds
def signingTask = tasks.create(name: "double${variant.name.capitalize()}Sign", type: DoubleSign)
signingTask.inputFile = new File(variant.outputFile.toString().replace(".apk", "-unaligned.apk"))
signingTask.keystore = new File(project.androidBuild + '/keystore.jks')
signingTask.dependsOn variant.packageApplication
variant.zipAlign.dependsOn signingTask
}
}
}
Android不会兑现第二个签名。你期望通过这个获得什么? – CommonsWare
我们正在对APK进行自己的验证。我们有一个自定义固件,需要该应用程序由开发人员和我们的“应用程序商店”签名。 –