高端网站的特点,sem是什么职位,ppt免费,wordpress 安装 数据库目录 简介打包配置签名配置渠道配置配置打包出来的App名称正式包与测试包配置 打包方式开发工具打包命令行打包 优缺点 简介 多渠道打包 是指在打包一个 Android 应用时#xff0c;一次编译生成多个 APK 文件#xff0c;每个 APK 文件针对一个特定的渠道。不同的渠道可能代表… 目录 简介打包配置签名配置渠道配置配置打包出来的App名称正式包与测试包配置 打包方式开发工具打包命令行打包 优缺点 简介 多渠道打包 是指在打包一个 Android 应用时一次编译生成多个 APK 文件每个 APK 文件针对一个特定的渠道。不同的渠道可能代表不同的应用商店、推广合作伙伴、地区等。每个渠道可能有不同的配置例如不同的包名、资源、应用 ID、签名信息等。 打包配置
在打包之前先聊一下我的需求。
我现在想打三个渠道的包分别为 xiaomi、huawei、meizu。通过多渠道打包的方式能够实现一次编译打三个包且通过多渠道打包生成的包生成位置不同、包名不同的 App、AndroidManifest.xml 文件不同的包。
在 Android Studio 里打包是由 Gradle 脚本去完成因此毫无疑问以下的一些配置都是写在了 build.gradle 文件里。
由于 build.gradle 文件是从上往下执行的因此导入其它插件的代码一般写在最上面第一二行的位置。在 build.gradle 文件中部分配置是有一个先后的执行顺序就是说他们的先后执行顺序如果错乱就会出现各种奇怪的问题。
签名配置
多渠道打包 app 的签名配置在了 signingConfigs 里分为了三个签名配置分别是 xiaomiSigningConfigs 、huaweiSigningConfigs 、meizuSigningConfigs 。
android {. . .// 多渠道打包签名配置signingConfigs {// 配置 xiaomi 渠道的签名xiaomiSigningConfigs {storeFile file(../keystore/xiaomi.jks)storePassword 123456keyAlias xiaomikeyPassword 123456}// 配置 huawei 渠道的签名huaweiSigningConfigs {storeFile file(../keystore/huawei.jks)storePassword 123456keyAlias huaweikeyPassword 123456}// 配置 meizu 渠道的签名meizuSigningConfigs {storeFile file(../keystore/meizu.jks)storePassword 123456keyAlias meizukeyPassword 123456}}. . .
}PS填写 storeFile 的 jks 文件配置时需确认所在路径是否存在相应的 jks 文件否则会在 Sync Now 或打包的时候出现某些奇奇怪怪的问题。 渠道配置
android {. . .// 配置渠道productFlavors {// xiaomi渠道xiaomi {// 配置与ndk相关的配置ndk {// 配置打包的安装包支持的设备架构abiFilters arm64-v8a, armeabi-v7a}// 在包名后面添加包名的内容applicationIdSuffix .xiaomi// 替换strings.xml文件里对应名称的值resValue string, app_name, string/app_name_xiaomi// 配置渠道打包所需的签名signingConfig signingConfigs.xiaomiSigningConfigs}// huawei渠道huawei {applicationIdSuffix .huaweindk {abiFilters arm64-v8a, armeabi-v7a}resValue string, app_name, string/app_name_huaweisigningConfig signingConfigs.huaweiSigningConfigs}// meizu渠道meizu {applicationIdSuffix .meizundk {abiFilters arm64-v8a, armeabi-v7a}resValue string, app_name, string/app_name_meizusigningConfig signingConfigs.meizuSigningConfigs}}. . .
}PS在渠道包配置里写了与签名相关的配置后就不能够在 buildTypes 里写否则会 buildTypes 的签名被覆盖且打包时只能使用命令行打包使用开发工具打包签名会被选择打包签名的那一个签名给覆盖掉。 配置打包出来的App名称
android {. . .// 配置各个渠道包打包出来的app名称def buildTime buildTime()android.applicationVariants.configureEach { variant -// 根据渠道名称判断打的渠道包是什么if (variant.name.contains(xiaomi)) {variant.outputs.configureEach { output -// 修改打出来的包的名称output.outputFileName 多渠道打包-xiaomi-${buildTime}.apk}} else if (variant.name.contains(huawei)) {variant.outputs.configureEach { output -output.outputFileName 多渠道打包-huawei-${buildTime}.apk}} else if (variant.name.contains(meizu)) {variant.outputs.configureEach { output -output.outputFileName 多渠道打包-meizu-${buildTime}.apk}}}. . .
}正式包与测试包配置
android {. . .// 配置buildTypesbuildTypes {// 配置打release包时的配置release {// 配置打release包时的签名经过测试无效果signingConfig signingConfigs.xiaomiSigningConfigsdebuggable false // 打出来的包是否包含调试信息minifyEnabled false // 启用或禁用代码混淆shrinkResources false // 是否移除未使用的资源zipAlignEnabled true // 控制是否对apk进行优化testCoverageEnabled false // 是否启用代码覆盖率报告versionNameSuffix -xiaomi // 附加打包版本名称后缀multiDexEnabled true // 是否启用多dex支持适用于方法数超过65536的应用embedMicroApp false // 配置是否将微应用嵌入到主应用中proguardFiles getDefaultProguardFile(proguard-android-optimize.txt), proguard-rules.pro}// 配置打debug包时的配置debug {signingConfig signingConfigs.xiaomiSigningConfigsminifyEnabled falseshrinkResources falseproguardFiles getDefaultProguardFile(proguard-android-optimize.txt), proguard-rules.pro}}. . .
}打包方式
开发工具打包
打开 Android Studio在顶部菜单栏依次选择 Build Generate Signed App Bundle / Apk 打包可以选择多个渠道打包快捷键为 Control 鼠标左键 如下 点击 Create 再过几分钟就会在 Module 下面生成对应的 app。 PS使用 Android Studio 开发工具打包多个app一起打包时无法生成不同签名的app最终打出来的app签名都会是同一个。 命令行打包
使用命令行打包前需要提前配置好 Java 环境并将其添加到系统的环境变量。
点击打开 Android Studio 的 Terminal 输入 ./gradlew 确定是否可以正常使用。
./gradlew若已经完成多渠道的相关配置继续执行 ./graldew tasks 查看可执行的命令命令及执行结果如下
./graldew tasks上图的执行结果展示了可执行的任务打所有渠道的正式包使用的是 assembleRelease 命令
./graldew assembleRelease执行完成如下图所示 使用命令行打包不会提示打的包保存在了哪里可以到该路径下查看 项目所在路径\csdn-demo\multi-channel-package\build\outputs\apk\。
优缺点
优点
通过多渠道打包可以统一管理应用的不同版本简化发布流程和后续维护。可以分别统计每个渠道的下载量、活跃用户、用户留存等数据从而进行更精细的运营和推广。可以针对不同市场定制不同版本的应用满足不同国家和地区的法律法规、文化习惯和用户需求。不同渠道可以使用不同的资源配置如图标、启动页、应用名称等满足不同市场或合作伙伴的需求。不同的合作伙伴可能有不同的要求通过多渠道打包可以更好地满足他们的需求从而提升合作伙伴的满意度。
缺点
需要为不同渠道配置不同的资源和代码增加了开发和维护的复杂度和工作量。需要管理多个市场和渠道的发布和更新这可能导致市场碎片化和管理难度增加。不同渠道的资源配置可能会导致资源冗余增大APK文件的体积占用更多的存储空间。多渠道打包需要配置多个构建变体构建和发布流程变得更复杂需要更细致的管理和协调。不同渠道版本的应用可能存在差异容易导致一些特定渠道版本出现质量问题需要更多的测试和质量保证工作。
常见问题
Caused by: groovy.lang.MissingMethodException: No signature of method: java.lang.Integer.call() is applicable for argument types: (build_dnmb91jd12bvybe4o3deskrm1 r u n c l o s u r e 1 _run_closure1 runclosure1_closure4 c l o s u r e 10 ) v a l u e s : [ b u i l d d n m b 91 j d 12 b v y b e 4 o 3 d e s k r m 1 _closure10) values: [build_dnmb91jd12bvybe4o3deskrm1 closure10)values:[builddnmb91jd12bvybe4o3deskrm1_run_closure1 c l o s u r e 4 _closure4 closure4_closure105e0c18f1] 解决办法buildTypes 对象里的参数不能以数字命名。Caused by: groovy.lang.MissingPropertyException: Could not get unknown property ‘xiaomiSigningConfigs’ for SigningConfig container of type org.gradle.api.internal.FactoryNamedDomainObjectContainer. 解决办法 1、检查是否存在 xiaomiSigningConfigs 的配置。 2、signingConfigs 的配置是否写在了 buildTypes 的下方。由于 Gradle 编译顺序是从文件上往下编译的如果 buildTypes 在 signingConfigs 的上方意味着 buildTypes 会先被编译自然会出现这种找不到 signingConfigs 里面配置的问题
参考文档 配置 build 变体Gradle 官网