1 国内应用市场
我的Android进阶之旅——>Android APP终极瘦身指南
【腾讯Bugly干货分享】Redex初探与Interdex:Andorid冷启动优化
2 Google Play Store
2.1 split apk (Build multiple APKs)
根据 abi 进行分包,最终配置如下:
import com.android.build.OutputFile
android {
compileSdkVersion project.compileSdkVersion as int
buildToolsVersion '27.0.3'
defaultConfig {
applicationId "com.noxgroup.app.cleaner"
minSdkVersion 19
multiDexEnabled true
targetSdkVersion project.targetSdkVersion as int
versionCode 5
versionName "1.5.3"
//注意:这里和 split 冲突,如果配置了 split 了,这里就不用配置 filter 了
// ndk {
// abiFilters 'armeabi-v7a','x86'
// }
}
splits {
abi {
//如果将此元素设置为true,Gradle将根据您定义的ABI生成多个APK。默认值为false
enable true
//清除ABI的默认列表。仅在与include元素组合时使用 才能指定要添加的ABI。以下代码段将ABI列表设置为just,
//x86并x86_64 通过调用reset()清除列表,然后使用include:
reset()
//指定Gradle应为其生成APK的以逗号分隔的ABI列表。仅与组合使用reset()以指定ABI的确切列表。
include 'armeabi-v7a', 'x86'//'armeabi-v7a', 'x86', 'arm64-v8a'
//如果true,Gradle除了per-ABI APK之外还会生成通用APK。通用APK包含单个APK中所有ABI的代码和资源。
//默认值为false。请注意,此选项仅在splits.abi块中可用。在根据屏幕密度构建多个APK时,
//Gradle始终会生成一个通用APK,其中包含所有屏幕密度的代码和资源。
universalApk false
}
}
//注意:这个顺序不能改变。兼容性高的版本需要小于兼容性低的,Google play 默认会从高的开始找是否符合
ext.abiCodes = ['armeabi-v7a':1, 'arm64-v8a':2, x86:3, x86_64:4]
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
def baseAbiVersionCode =
project.android.ext.abiCodes.get(output.getFilter(OutputFile.ABI))
if (baseAbiVersionCode != null) {
output.versionCodeOverride =
baseAbiVersionCode * 10000 + variant.versionCode
}
output.outputFileName = "yourappname_" + defaultConfig.versionName + "_" + buildType.name + "_" + output.versionCodeOverride + "_" + output.getFilter(OutputFile.ABI).replace("-", "") + "_" + new Date().format("yyyyMMddHHmm")+".apk"
}
}
}
2.2 Android App Bundles
Android App Bundle 使用流程(codelabs)
使用 Android App Bundle 提供应用和用户所需功能
常见错误:
1.<fusing> element is missing the 'include' attribute
解决方案:https://stackoverflow.com/questions/50869694/android-app-bundle-build-error-fusing-element-is-missing-the-include-attrib
just add "dist:" 如:dist:include="false"
bundle tool 常用命令(https://developer.android.com/studio/command-line/bundletool):
生成支持所有平台 apks 命令:
java -jar D:/Repositories/bundletool/bundletool-all-0.8.0.jar build-apks --bundle=D:/Repositories/bundletool/app.aab --output=D:/Repositories/bundletool/NoxSecurity.apks --ks=D:/Repositories/NoxSecurity/xxxx.jks --ks-pass=pass:xxxx --ks-key-alias=xxxx --key-pass=pass:xxxx
生成当前连接设备的 APK 集:
java -jar D:/Repositories/bundletool/bundletool-all-0.8.0.jar build-apks --connected-device --bundle=D:/Repositories/bundletool/app.aab --output=D:/Repositories/bundletool/my_app.apks --ks=D:/Repositories/NoxSecurity/xxxx.jks --ks-pass=pass:xxxx --ks-key-alias=xxxx --key-pass=pass:xxxx
根据JSON文件生成对应的 APK 集:
java -jar D:/Repositories/bundletool/bundletool-all-0.8.0.jar extract-apks --apks=D:/Repositories/bundletool/my_app.apks --output-dir=D:/Repositories/bundletool --device-spec=D:/Repositories/bundletool/test.json
测量APK集中APK的估计下载大小
java -jar bundletool-all-0.8.0.jar get-size total --apks=my_app.apks
安装 apks 命令:
java -jar D:/Repositories/bundletool/bundletool-all-0.8.0.jar install-apks --apks=D:/Repositories/bundletool/NoxSecurity.apks
获取当前手机信息:
adb shell
getprop
获取 abi 信息: getprop |grep abi
获取 screenDensity 信息: getprop |grep dens
获取 sdkVersion 信息: getprop |grep version.sdk