APK Splits を正常に実装したので、異なるABIに対して個別のAPKが生成されます。
ただし、効率を上げるために(そして、デバッグで非armeabi-v7a APKを必要としないため)、デバッグビルドを制限してarmeabi-v7aAPKのみを生成したいと思います。
これはどのように行うことができますか?
1つのアイデアはこれです:
abi {
enable true
reset()
include 'x86', 'armeabi-v7a', 'mips'
universalApk false
}
ビルドタイプに基づいてenable
を設定する方法があるのでしょうか?
@Geralt_Encoreの回答のバリエーションを試すことができます。これにより、個別のgradlew
コマンドが回避されます。私の場合、リリースされたAPKファイルサイズを減らすためにAPK分割を使用することだけを考えていましたが、これを完全にAndroid Studio内で実行したかったのです。
splits {
abi {
enable gradle.startParameter.taskNames.any { it.contains("Release") }
reset()
include 'x86', 'armeabi-v7a', 'mips'
universalApk false
}
}
私が見たものから、ビルド| Android Studioで署名付きAPKメニュー項目を生成する]は、assembleRelease
Gradleターゲットを使用してAPKを生成します。
コマンドライン引数に基づいてenable
を設定できます。リリースバージョンにのみ分割を使用し、通常のデバッグビルドには使用したくない場合に、同様の問題を解決しました。
splits {
abi {
enable project.hasProperty('splitApks')
reset()
include 'x86', 'armeabi-v7a'
}
}
その後 ./gradlew -PsplitApks assembleProdRelease
(私の場合、prodはフレーバーです)。
@ Jeff P の回答を更新して、アプリ名に基づいてより柔軟にし、Android App Bundle(.aab)形式をサポートする
splits {
abi {
enable gradle.startParameter.taskNames.any { it.contains("Release") }
reset()
include 'x86', 'armeabi-v7a', 'mips'
universalApk false
}
}
私はこのパーティーに少し遅れていますが、さまざまなフレーバーとタスク名に問題があるため、次のようになりました。
ext.isRelease = { array ->
array.each { name ->
if (name.contains("Debug")) {
return false
}
}
return true
}
Android {
...
splits {
abi {
enable isRelease(gradle.startParameter.taskNames)
reset()
include "x86_64", "x86", "arm64-v8a", "armeabi-v7a"
universalApk false
}
}
}
これはJeffPの回答に対する小さな更新ですが、さまざまなフレーバーとビルド構成でうまく機能します。