关于Android多渠道打包问题看这一篇就够了

目录
  • 一、多渠道配置
  • 二、注意事项

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

本文三个流程

一、多渠道配置

1、多渠道配置
2、不同渠道不同签名配置
3、不同渠道不同资源文件配置
4、不同渠道不同依赖配置

二、注意事项

三、打包

1、命令行打包
2、IDE 打包

多渠道配置(2 种方式)

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

android {
  compileSdkVersion 29
  buildToolsVersion "29.0.3"  

  defaultConfig {
      applicationId "com.test.moduledemo"
      minSdkVersion 21
      targetSdkVersion 29
      versionCode 1
      versionName "1.0"
  }  

  flavorDimensions "versionCode"  

  productFlavors {
      xiaomi{
          applicationId  = “com.test.xiaomi"
          //不同渠道配置不同参数
          buildConfigField "int", "TEST_VALUE", "1"
          buildConfigField "String", "TEST_NAME", "\"xiaomi\""
      }
      huawei{
          applicationId = "com.test.huawei"
          //不同渠道配置不同参数
          buildConfigField "int", "TEST_VALUE", "2"
          buildConfigField "String", "TEST_NAME", "\"huawei\""
      }
      productFlavors.all {//遍历productFlavors多渠道,设置渠道号(xiaomi 、huawei)
          flavor -> flavor.manifestPlaceholders.put("CHANNEL", name)
      }
  }
  applicationVariants.all { variant ->
      // 打包完成后输出路径
      def name = ((project.name != "app") ? project.name : rootProject.name.replace(" ", "")) +
      "_" + variant.flavorName +
      "_" + variant.buildType.name +
      "_" + variant.versionName +
      "_" + new Date().format('yyyyMMddhhmm') + ".apk"
      //相对路径app/build/outputs/apk/huawei/release/
      def path = "../../../../../apk/" //相当于路径 app/apk/
      variant.outputs.each { output ->
          def outputFile = output.outputFile
          if (outputFile != null && outputFile.name.endsWith('.apk')) {
               //指定路径输出
               output.outputFileName = new File(path, name)
          }
      }
      // 在打包完成后还可以做一些别的操作,可以复制到指定目录,或者移动文件到指定目录
      variant.assemble.doLast {
          File out = new File(“${project.rootDir}/apk”)
          variant.outputs.forEach { file ->
            //复制apk到指定文件夹
            //copy {
            //  from file.outputFile
            //  into out
            //}
         //把文件移动到指定文件夹
          ant.move file: file.outputFile,
                 todir: "${project.rootDir}/apk"
        }
      }
  }
//多渠道签名的配置
  signingConfigs {
     test {
        storeFile file("../test.keystore")
        storePassword 'test'
        keyAlias 'test'
        keyPassword 'test'
        v1SigningEnabled true
        v2SigningEnabled true
     }
     xiaomi {
        storeFile file("../xiaomi.keystore")
        storePassword 'xiaomi'
        keyAlias 'xiaomi'
        keyPassword 'xiaomi'
        v1SigningEnabled true
        v2SigningEnabled true
     }
     huawei {
        storeFile file("../huawei.keystore")
        storePassword 'huawei'
        keyAlias 'huawei'
        keyPassword 'huawei'
        v1SigningEnabled true
        v2SigningEnabled true
     }
  }
  buildTypes {
       debug {
//        debug这里设置不起作用,可能是编译器的问题?
//         productFlavors.xiaomi.signingConfig signingConfigs.test
//         productFlavors.huawei.signingConfig signingConfigs.test
       }
       release {
           productFlavors.xiaomi.signingConfig signingConfigs.xiaomi
           productFlavors.huawei.signingConfig signingConfigs.huawei
       }
  }
//不同渠道不同资源文件配置
  sourceSets{
      xiaomi.res.srcDirs 'src/main/res-xiaomi'
      huawei.res.srcDirs 'src/main/res-huawei'
  }
//不同渠道不同的依赖文件
  dependencies {
      xiaomiApi('xxxxxxx')
      huaweiImplementation('xxxxxxxx')
  }
}

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

android {
 flavorDimensions "versionCode"  

 productFlavors {
     xiaomi{
     applicationId = "com.test.xiaomi"
         //不同渠道配置不同参数
         buildConfigField "int", "TEST_VALUE", "1"
         buildConfigField "String", "TEST_NAME", "\"xiaomi\""
     }
     huawei{
      applicationId = "com.test.huawei"
         //不同渠道配置不同参数
         buildConfigField "int", "TEST_VALUE", "2"
         buildConfigField "String", "TEST_NAME", "\"huawei\""
     }
     productFlavors.all {//遍历productFlavors多渠道,设置渠道号(xiaomi 、huawei)
         flavor -> flavor.manifestPlaceholders.put("CHANNEL", name)
     }
 }
// ............ 更多配置
}

在主模块(app)的 build.gradle 下引用该 flavors.gradle 文件即可

apply from: rootProject.file('flavors.gradle')

注意

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

<application>
    <meta-data
      android:name="TEST_VALUE"
      android:value="${TEST_VALUE}" />
</application> 

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

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

打包

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

多渠道打包

编译器打包

当渠道很多的时候,不同渠道不同配置就会变得相当繁琐了,欢迎查看我的下一篇推文关于多渠道打包的进阶知识

到此这篇关于关于Android多渠道打包问题看这一篇就够了的文章就介绍到这了,更多相关Android多渠道打包内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Android 使用gradle打包Assets目录的案例

    现在提起Android开发工具,大多人第一个想到的肯定是Android Studio.谷歌专门为Android开发者推出的这款IDE,以其强大的功能迅速击败的老牌的eclipse. 与此同时,eclipse依赖的ant,也逐渐被更加强大更加灵活的gradle所取代,成为Android开发领域首选构建工具. 强大并不意味着没有坑.在使用gradle的过程中,特别是打包assets目录 下的一些资源时,笔者真没想到你是这样的assets,遇到了若干问题,在此处做一个整理. 如何创建assets目录

  • Android打包上传AAR文件到Maven仓库的示例

    1.创建 Android 库 按以下步骤在项目中创建新的库模块: 依次点击 File > New > New Module. 在随即显示的 Create New Module 窗口中,依次点击 Android Library 和 Next. 为您的库命名,并为库中的代码选择一个最低 SDK 版本,然后点击 Finish. 2.上传aar包至Maven私服 打开新模块 build.gradle 文件,按如下说明修改: plugins { id 'com.android.library' // 库

  • 关于Android多渠道打包的进阶知识

    多渠道打包进阶知识 文章开始前,先看一下下面这种情况: android { productFlavors { //100 个多渠道配置 } //多渠道签名的配置 signingConfigs { xiaomi { storeFile file("../xiaomi.keystore") storePassword 'xiaomi' keyAlias 'xiaomi' keyPassword 'xiaomi' v1SigningEnabled true v2SigningEnabled

  • Android Studio中一套代码多渠道打包的实现方法

    一套代码达到以下效果: 打包不同applicationId能同时安装在同一手机上 不同logo,app名称, 不同第三方SDK接入配置(例如微信分享appid,激光推送appkey) 能区分debug和release配置 使用到的功能:productFlavor和buildTypes 原理:优先级buildTypes大于productFlavor 示例:一套代码为两家银行打包apk 1. 修改build.gradle.buildTypes保持默认debug和release两种设置即可,andro

  • AndroidStudio工程打包aab文件

    之前的文章说过,Unity可以直接导出aab文件的,用法也很简单,就是Build Settings勾选Build App Bundle(Google Play)选项. 而如果是想通过Unity Export Project导出Gradle工程,可以使用下面的方式打包aab文件. Android Studio打包AAB文件 1.打开Android Studio工程,打开Build-Generate Singned Bundle/APK...选项 注意:该选项上面的Build Bundles(s)/

  • Android Studio如何打包生成APK

    一.修改版本和指定生成APK文件名[可选] 将项目切换到Project视图,打开app目录下的build.gradle文件 1.1 修定软件版本 如1.2图所示. versionCode是app的大版本号,为数值类型,默认为1我这里改为2. versionName是app的具体版本号,为际符串类型,默认为1.0我这里改为2.3. 1.2 指定生成的APK文件名 一样是在build.gradle文件中修改,默认生成的release版apk名为app-release.apk. 在android内部d

  • Android 多渠道打包详细

    目录 Android 多渠道打包 一.多渠道配置 二.打包 1.多渠道配置 2.命令行打包 2.编译器打包 Android 多渠道打包 一.多渠道配置 多渠道配置: 不同渠道不同签名配置 不同渠道不同资源文件配置 不同渠道不同依赖配置 二.打包 打包可分为:编译器打包.命令行打包.IDE 打包 1.多渠道配置 (1)可写在主模块(app)的 build.gradle 下 android { compileSdkVersion 29 buildToolsVersion "29.0.3"

  • 浅谈Android Studio 的四种打包方式

    虽然这个博客的内容很简单,但是作为新手的我还是百度了好久才掌握了Android Studio的打包方式,希望对后来人有所帮助.打包的第一种方式 (1)在Android Studio 中选中app这么module,选择菜单栏""Build--Generate signed APK"" (2)弹出窗口 (3)创建密钥库及密钥,创建后会自动选择刚创建的密钥库和密钥(已拥有密钥库跳过) 点击"Create new..."按钮创建密钥库 Key store

  • Android Studio打包APK文件具体实现步骤解析

    Android Studio是谷歌推出一个Android集成开发工具,基于IntelliJ IDEA.它类似于Eclipse ADT,Android Studio 提供了集成的Android开发工具用于开发和调试.那么今天我们就来讲讲如何通过Android Studio打包APK文件,相信有很多用户还不是非常了解,下面通过这篇文章给大家介绍一下. Android Studio软件版本:2.3.0.8 官方版编程开发立即查看 前面一直使用的是out文件夹里面的那个apk文件(debug版本),最近

  • 解决android studio 打包发现generate signed apk 消失不见问题

    今天打开AS,修改完打包APK,发现generate signed apk不见了. 查看了一下,发现messages窗口有如下报错. Problems found loading plugins: Plugin "Android NDK Support" was not loaded: required plugin "Android Support" is disabled. Plugin "Google App Indexing" was n

  • Android Studio签名打包的两种方式(图文教程)

    签名打包的两种方式: 注:给我们自己开发的app签名,就代表着我自己的版权,以后要进行升级,也必须要使用相同的签名才行.签名就代表着自己的身份(即keystore),多个app可以使用同一个签名. 如果不知道签名是啥意思,请自行百度哦.在eclipse中签名的方法是:选中工程,邮件选择"export-android-export android application", 1.方式1:通过Android Studio进行签名: 选中app这个module,选择菜单栏"Buil

  • Android使用Walle实现多渠道打包功能的实现示例

    目录 介绍 使用 对应的属性: 可使用以下变量: 介绍 Walle(瓦力)是Android Signature V2 Scheme签名下的新一代渠道包打包神器. 瓦力通过在Apk中的APK Signature Block区块添加自定义的渠道信息来生成渠道包,从而提高了渠道包生成效率,可以作为单机工具来使用,也可以部署在HTTP服务器上来实时处理渠道包Apk的升级网络请求. 使用 使用Walle生成多渠道的速度是很快的,原来的项目打一个包就需要两分钟多,每次发布打7个包需要十几分钟.用了Walle

  • Android Gradle多渠道打包的实现方法

    一.前言 什么是多渠道打包以及多渠道打包可以做什么,这里就不做介绍了,相信看到这篇文章的你已经了解了,多渠道打包的方式比较多,这里我们用Gradle多渠道打包方式. 和其他文章有什么不同 网上看到的大多数文章都只讲解了 1.如何修改包名 2.如何修改变量的值 3.如何替换string中的资源 4.如何替换AndroidManifest中的资源 本篇文章会在上述知识点上增加 5.不同渠道如何使用不同的java文件 6.Base模块化中如何使用多渠道 新建项目,在app下build.gradle中a

  • Android studio 4.1打包失败和插件错误提示的解决

    一.Android studio 升级4.1,Android Gradle插件从4.0.2升级到4.1.0后打包失败,回退到4.0.2后打包正常. 错误信息: •What went wrong:  Execution failed for task ':app:processDebugManifest'. Could not get unknown property 'manifestOutputDirectory' for task ':app:processDebugManifest' of

随机推荐