我需要通過添加第二個簽名來對我的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進行自己的驗證。我們有一個自定義固件,需要該應用程序由開發人員和我們的「應用程序商店」簽名。 –