按需求来介绍功能:

打包的时候,打出多个包

1.不同包名

2.不同app名,不同icon

3.代码里同一个变量名,但是对应不同的值

4.根据不同渠道引入不同的sdk,以及不同渠道不同java代码

5.不同渠道,又一个公用的assets文件夹,有私有的assets文件夹

6.不同渠道不同libs文件夹

步骤:

(1)打开app文件夹下面的build.gradle

在andriod对象下面加入

flavorDimensions 'aaa'

这玩意我也不知道是什么,大概是代表一个维度,解决上诉问题,我们只需要一个维度就够了,

(2)然后新建各个渠道配置

还是在andriod这个对象下,添加productFlavors这个对象,里面配置了3个渠道,渠道中的

dimension 属性要对应上诉建立的维度

productFlavors {'TapTap' {dimension 'aaa'applicationId "com.canlonggame.mjyz.m4399"versionCode 2versionName "2.0"signingConfig signingConfigs.mjyzmanifestPlaceholders = [APP_NAME: "app_name",APP_ICON: "@drawable/icon"]       buildConfigField "String","Data_Ani_Name",'"TapTap"'}'hykb' {dimension 'aaa'buildConfigField "String","Data_Ani_Name",'"好游快爆"'}'ghzs' {dimension 'aaa'buildConfigField "String","Data_Ani_Name",'"光环助手"'}
}

上诉配置的介绍:

1.看上诉taptap渠道信息中有一个applicationId,就是定义这个渠道独特的包名。

2.manifestPlaceholders这个属性是定义 AndriodMainfest.xml文件中变量的,

上诉定义了APP_NAME: "app_name",我们在AndriodMainfest.xml这样写

android:label="${APP_NAME}",那么打包后app名就会应用这里的APP_NAME这个变量

APP_ICON也是这样。

3.buildConfigField 这个变量就是定义一个变量,不用渠道包,变量值是不一样的,上诉taptap渠道中的意思就是定义一个string类型的变量,变量名Data_Ani_Name,变量值是TapTap,注意看上诉变量值TapTap是用单引号括起来的双引号,然后怎么在代码中用呢,

BuildConfig.Data_Ani_Name ,BuildConfig这个对象,在你配置好上诉渠道后,点击编译后,会自动生成,在 app/build/generated/source这个文件夹下面

4.还有就是解决不同渠道引入不同sdk,

正常引入是

implementation()

单独一个渠道引入是 渠道名+implementation,如 TapTapImplementation()

这样写之后,我们只有把 build variants 选择到我们定义的taptap,才能访问到第三方sdk

4.1 怎么不同渠道写不同的代码:

新建渠道文件夹,在app/src下面,main文件夹的同级新建你渠道名文件夹,然后下面的目录要跟main里面的目录一样,一般就是src右键new=>directory,名字是你渠道名,然后右键渠道文件夹,

new=>directory,java文件夹,然后右键java文件夹new=>package,跟你main文件夹下面一样的包名,然后在每个渠道文件夹下面的包名文件夹下面就可以新建一个main中没有的java文件,在MainActivity中调用它,各自写不同的代码。

eg:最后打包的时候,渠道文件夹中的文件会和main文件夹的文件合并的,合并规则大概是,资源一样的话,会被渠道包的覆盖,java文件不能同名,会报错,所以我们上面的方案是只在渠道文件夹下面新建main中没有的一个java文件,xml文件会按一定规则合并,非常复杂。

4.2 想在不同渠道下面建立不同的Androidmainfest.xml文件,在渠道包文件夹下面右键=>new=>other=>android mainfest,然后在里面写一些你要加入的东西,点击文件下方有个

merged mainfest 按钮可以查看合并后的mainfest文件,我们打包apk时,mainfest文件会合成一个,把你的main中的,变体中的,第三方sdk中的mainfest文件都会合成一个,我们可以在这查看合并后的文件,是不是你想要的

4.3 之前我有个方案,多渠道写不同java代码,是在渠道中新建了一个入口类,继承了main中的入口类,这样就导致了入口类名字不一样了,因为变体中java不能同名。我就只能在变体中修改mainfest中的入口类那个标签

<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"package="com.canlonggame.mjyz"><application><activity android:name=".MainActivity"tools:node= "remove"></activity><activity android:name=".AppActivity"android:launchMode="singleTask"android:screenOrientation="portrait"android:windowSoftInputMode="adjustPan|stateAlwaysVisible"android:configChanges="orientation|keyboardHidden|screenSize|screenLayout"android:theme="@android:style/Theme.NoTitleBar.Fullscreen"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

主要就是用到了 tool:node="remove",删除android:name='.MainActivity' 的activty

然后加上下面我们新设置的入口类,mainfest的标签activity的唯一标记andriod:name是标签的唯一值,是在合并时寻找标签的依据

5.

sourceSets {main {assets.srcDirs = ['../assets']jniLibs.srcDirs = ['libs']}oppo {assets.srcDirs = ['../assets','../oppoAssets']}}

我们公用的assets文件就是 '../assets',oppo渠道最终会把两个文件夹的东西在打包的时候,都打到包中的assets文件夹中

6.

sourceSets {main {assets.srcDirs = ['../assets']jniLibs.srcDirs = ['libs']}oppo {assets.srcDirs = ['../assets','../oppoAssets']}vivo {assets.srcDirs = ['../assets','../vivoAssets']jniLibs.srcDirs = ['libs','vivolibs']}}

//end

最后就是打出包来,我是在build/generate siged apk/ 下面打包的,就可以选择不用渠道的,也可以同时多选,手动打包缺点就是没法选择不同的签名,如果你有不同渠道不同签名的需求,那就要使用命令行打包,否则每次手动打包就要重新选择签名

安卓productFlavors多渠道打包简单使用相关推荐

  1. android多渠道打包签名配置,Gradle For Android(二) 多渠道打包与签名配置

    <Gradle For Android(二) 多渠道打包与签名配置> 转载请注明来自 傻小孩b(gold.xitu.io/user/57e089-喜欢的能够关注我,不按期总结文章!您的支持 ...

  2. 安卓转战React-Native之签名打包成Apk并极速多渠道打包

    前言 搞安卓的开发应该知道开发好的apk都是需要上传到应用市场给用户下载的,当然有些公司的产品是不用上传到应用市场的(比如我们公司放七牛云)但是也需要放在云上面给用户下载.react-native直接 ...

  3. 安卓多渠道打包的搭建

    前言 最近学习了多渠道打包,此博客用以记录学习的内容 多渠道打包,渠道可以理解为应用市场,多渠道打包就是生成支持各种应用市场的apk文件,因为安卓的应用市场很多,所以这个知识也是很重要的 ······ ...

  4. Gradle实现的两种简单的多渠道打包方法

    本来计划今天发Android的官方技术文档的翻译--<Gradle插件用户指南>的第五章的,不过由于昨天晚上没译完,还差几段落,所以只好推后了. 今天就说一下使用Gradle进行类似友盟这 ...

  5. python安卓打包_Android多渠道打包之Python打包

    我们做Android用户级应用开发的时候都要考虑这样的问题,目前的应用市场有很多,我们的安装包是通过哪个渠道进入用户手机的,总得统计一下吧,这就要说到多渠道打包了.多年前刚入行的时候,打包就是在代码里 ...

  6. android 乐固渠道打包,安卓腾讯乐固(legutools)多渠道打包(友盟)

    腾讯云.移动安全生成友盟多渠道方法 https://www.jianshu.com/p/b17c3a7fab28 注意:该方案于2019.2.18日发现存在问题,原因是由于乐固对多渠道的支持有问题.详 ...

  7. 安卓多渠道打包(三)360加固多渠道打包

    如题,本次实践项目为使用360加固+多渠道打包. 首先,从官网下载360加固软件,博主使用的是windows系统. 360加固下载地址 选择对应平台下载即可. 代码地址在文末 实战: 一.代码设置 ( ...

  8. Android Studio 多渠道打包、自动版本号及 gradlew 命令的基本使用

    Android Studio 真可谓神器,详细请点这里:打造安卓开发航空母舰 这里介绍其多渠道打包: 1 建立多渠道 这里介绍一种简单的,直接as操作: 直接上图咯,在项目结构你添加flavor就好了 ...

  9. Android 新一代多渠道打包神器

    作者 :李涛 ApkChannelPackage是一种高速多渠道打包工具.同一时候支持基于V1签名和V2签名进行多渠道打包.插件本身会自己主动检測Apk使用的签名方法,并选择合适的多渠道打包方式.对使 ...

最新文章

  1. 计算机与智能化专业课程,人工智能专业课程有哪些 大学本科课程设置
  2. node process.env
  3. CSS3 盒阴影 box-shadow属性
  4. java tcp ack_TCP三次握手和四次挥手以及11种状态
  5. Xenon构建MySQL高可用
  6. 黑苹果 电脑关机是因为发生了问题_【电脑常识】常见的电脑误区,你中了几点?...
  7. 多线激光雷达遇到的问题
  8. matlab2013 应用程序,Matlab2013a 下载
  9. ps抠图怎么放大图片_ps中在使用抠图工具时如何用快捷键移动放大的原始图片?...
  10. 微信html刷新页面,填坑——解决微信网页中刷新的问题
  11. Deepin常用命令、系统命令、Vi命令
  12. python概率分布拟合_用Python实现概率分布
  13. [坑]微信支付首次支付成功,第二次调用失败
  14. TVS (瞬态二极管)
  15. windows下Linux系统U盘启动盘制作与系统安装图文教程
  16. 基于OpenCV的音频频谱优化(仿酷狗频谱)
  17. 怎么调大计算机浏览器内字体,浏览器字体大小怎么设置,教你浏览器字体大小怎么设置-win7旗舰版...
  18. GNS3安装过程(详细)
  19. 记一次作业:完成企业网络安全运营建设方案
  20. iOS获取文件夹下所有的文件

热门文章

  1. 解决 用vue+vant 写顶部tab栏 做排班表的bug
  2. linux ipset 命令,什么是ipset,以及如何简单使用ipset,
  3. android简单音乐播放器(二)
  4. Swift Markup Formatting Syntax
  5. 万用表怎么测量电池容量_万用表怎么检测电池容量_电池电量
  6. 为什么叫vanilla neural network?
  7. 姬魔恋战纪送衣服显示服务器繁忙,姬魔恋战纪新手有哪些问题-姬魔恋战纪萌新常见问题汇总_手心游戏...
  8. 将C盘分区部分容量分配给其他分区
  9. AltiumDesigner覆铜挖空技巧总结
  10. Classification and inference with machine learning