当前位置:   article > 正文

Android 多渠道打包看这一篇就够了_android 配置多渠道打包

android 配置多渠道打包

本文三个流程

一、多渠道配置

1、多渠道配置

2、不同渠道不同签名配置

3、不同渠道不同资源文件配置

4、不同渠道不同依赖配置

二、注意事项

三、打包

1、命令行打包

2、IDE 打包

多渠道配置(2 种方式)

1、可写在主模块(app)的 build.gradle

  1. android {
  2. compileSdkVersion 29
  3. buildToolsVersion "29.0.3"
  4. defaultConfig {
  5. applicationId "com.test.moduledemo"
  6. minSdkVersion 21
  7. targetSdkVersion 29
  8. versionCode 1
  9. versionName "1.0"
  10. }
  11. flavorDimensions "versionCode"
  12. productFlavors {
  13. xiaomi{
  14. applicationId = “com.test.xiaomi"
  15. //不同渠道配置不同参数
  16. buildConfigField "int", "TEST_VALUE", "1"
  17. buildConfigField "String", "TEST_NAME", "\"xiaomi\""
  18. }
  19. huawei{
  20. applicationId = "com.test.huawei"
  21. //不同渠道配置不同参数
  22. buildConfigField "int", "TEST_VALUE", "2"
  23. buildConfigField "String", "TEST_NAME", "\"huawei\""
  24. }
  25. productFlavors.all {//遍历productFlavors多渠道,设置渠道号(xiaomi 、huawei)
  26. flavor -> flavor.manifestPlaceholders.put("CHANNEL", name)
  27. }
  28. }
  29. applicationVariants.all { variant ->
  30. // 打包完成后输出路径
  31. def name = ((project.name != "app") ? project.name : rootProject.name.replace(" ", "")) +
  32. "_" + variant.flavorName +
  33. "_" + variant.buildType.name +
  34. "_" + variant.versionName +
  35. "_" + new Date().format('yyyyMMddhhmm') + ".apk"
  36. //相对路径app/build/outputs/apk/huawei/release/
  37. def path = "../../../../../apk/" //相当于路径 app/apk/
  38. variant.outputs.each { output ->
  39. def outputFile = output.outputFile
  40. if (outputFile != null && outputFile.name.endsWith('.apk')) {
  41. //指定路径输出
  42. output.outputFileName = new File(path, name)
  43. }
  44. }
  45. // 在打包完成后还可以做一些别的操作,可以复制到指定目录,或者移动文件到指定目录
  46. variant.assemble.doLast {
  47. File out = new File(“${project.rootDir}/apk”)
  48. variant.outputs.forEach { file ->
  49. //复制apk到指定文件夹
  50. //copy {
  51. // from file.outputFile
  52. // into out
  53. //}
  54. //把文件移动到指定文件夹
  55. ant.move file: file.outputFile,
  56. todir: "${project.rootDir}/apk"
  57. }
  58. }
  59. }
  60. //多渠道签名的配置
  61. signingConfigs {
  62. test {
  63. storeFile file("../test.keystore")
  64. storePassword 'test'
  65. keyAlias 'test'
  66. keyPassword 'test'
  67. v1SigningEnabled true
  68. v2SigningEnabled true
  69. }
  70. xiaomi {
  71. storeFile file("../xiaomi.keystore")
  72. storePassword 'xiaomi'
  73. keyAlias 'xiaomi'
  74. keyPassword 'xiaomi'
  75. v1SigningEnabled true
  76. v2SigningEnabled true
  77. }
  78. huawei {
  79. storeFile file("../huawei.keystore")
  80. storePassword 'huawei'
  81. keyAlias 'huawei'
  82. keyPassword 'huawei'
  83. v1SigningEnabled true
  84. v2SigningEnabled true
  85. }
  86. }
  87. buildTypes {
  88. debug {
  89. // debug这里设置不起作用,可能是编译器的问题?
  90. // productFlavors.xiaomi.signingConfig signingConfigs.test
  91. // productFlavors.huawei.signingConfig signingConfigs.test
  92. }
  93. release {
  94. productFlavors.xiaomi.signingConfig signingConfigs.xiaomi
  95. productFlavors.huawei.signingConfig signingConfigs.huawei
  96. }
  97. }
  98. //不同渠道不同资源文件配置
  99. sourceSets{
  100. xiaomi.res.srcDirs 'src/main/res-xiaomi'
  101. huawei.res.srcDirs 'src/main/res-huawei'
  102. }
  103. //不同渠道不同的依赖文件
  104. dependencies {
  105. xiaomiApi('xxxxxxx')
  106. huaweiImplementation('xxxxxxxx')
  107. }
  108. }

2、在项目根目录下(与settings.gradle同目录)新建 flavors.gradle 文件

  1. android {
  2. flavorDimensions "versionCode"
  3. productFlavors {
  4. xiaomi{
  5. applicationId = "com.test.xiaomi"
  6. //不同渠道配置不同参数
  7. buildConfigField "int", "TEST_VALUE", "1"
  8. buildConfigField "String", "TEST_NAME", "\"xiaomi\""
  9. }
  10. huawei{
  11. applicationId = "com.test.huawei"
  12. //不同渠道配置不同参数
  13. buildConfigField "int", "TEST_VALUE", "2"
  14. buildConfigField "String", "TEST_NAME", "\"huawei\""
  15. }
  16. productFlavors.all {//遍历productFlavors多渠道,设置渠道号(xiaomi 、huawei)
  17. flavor -> flavor.manifestPlaceholders.put("CHANNEL", name)
  18. }
  19. }
  20. // ............ 更多配置
  21. }

在主模块(app)的 build.gradle 下引用该 flavors.gradle 文件即可
apply from: rootProject.file('flavors.gradle')

注意

如果项目较为复杂,有可能通过 buildConfigField 设置不同的渠道包,不同的信息字段有可能失效,则把
buildConfigField "int", "TEST_VALUE", "1"
换成
manifestPlaceholders.put("TEST_VALUE", 1)
然后再 AndroidManifest.xml 里添加

  1. <application>
  2. <meta-data
  3. android:name="TEST_VALUE"
  4. android:value="${TEST_VALUE}" />
  5. </application>

在 代码通过一下操作获取其值:

  1. ApplicationInfo applicationInfo = getPackageManager().getApplicationInfo(getPackageName(),
  2. PackageManager.GET_META_DATA);
  3. int testValue = applicationInfo.metaData.getInt("TEST_VALUE");

打包

命令行打包:

Windows下: gradlew assembleRelease
Mac 下:./gradlew assembleRelease
assembleRelease 是打所有渠道的 Release 包
assembleDebug 是打所有渠道的 Debug 包
还可以打指定渠道的包:
gradlew assembleXiaoMiRelease assembleHuaWeiRelease
(空格隔开要打的渠道包的任务名称即可,任务名称可以通过点击 android studio 右边的 Gradle 根据图中目录查看)

多渠道打包

image

编译器打包

image

image

image

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/252977
推荐阅读
相关标签
  

闽ICP备14008679号