安卓productFlavors多渠道打包简单使用
按需求来介绍功能:
打包的时候,打出多个包
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多渠道打包简单使用相关推荐
- android多渠道打包签名配置,Gradle For Android(二) 多渠道打包与签名配置
<Gradle For Android(二) 多渠道打包与签名配置> 转载请注明来自 傻小孩b(gold.xitu.io/user/57e089-喜欢的能够关注我,不按期总结文章!您的支持 ...
- 安卓转战React-Native之签名打包成Apk并极速多渠道打包
前言 搞安卓的开发应该知道开发好的apk都是需要上传到应用市场给用户下载的,当然有些公司的产品是不用上传到应用市场的(比如我们公司放七牛云)但是也需要放在云上面给用户下载.react-native直接 ...
- 安卓多渠道打包的搭建
前言 最近学习了多渠道打包,此博客用以记录学习的内容 多渠道打包,渠道可以理解为应用市场,多渠道打包就是生成支持各种应用市场的apk文件,因为安卓的应用市场很多,所以这个知识也是很重要的 ······ ...
- Gradle实现的两种简单的多渠道打包方法
本来计划今天发Android的官方技术文档的翻译--<Gradle插件用户指南>的第五章的,不过由于昨天晚上没译完,还差几段落,所以只好推后了. 今天就说一下使用Gradle进行类似友盟这 ...
- python安卓打包_Android多渠道打包之Python打包
我们做Android用户级应用开发的时候都要考虑这样的问题,目前的应用市场有很多,我们的安装包是通过哪个渠道进入用户手机的,总得统计一下吧,这就要说到多渠道打包了.多年前刚入行的时候,打包就是在代码里 ...
- android 乐固渠道打包,安卓腾讯乐固(legutools)多渠道打包(友盟)
腾讯云.移动安全生成友盟多渠道方法 https://www.jianshu.com/p/b17c3a7fab28 注意:该方案于2019.2.18日发现存在问题,原因是由于乐固对多渠道的支持有问题.详 ...
- 安卓多渠道打包(三)360加固多渠道打包
如题,本次实践项目为使用360加固+多渠道打包. 首先,从官网下载360加固软件,博主使用的是windows系统. 360加固下载地址 选择对应平台下载即可. 代码地址在文末 实战: 一.代码设置 ( ...
- Android Studio 多渠道打包、自动版本号及 gradlew 命令的基本使用
Android Studio 真可谓神器,详细请点这里:打造安卓开发航空母舰 这里介绍其多渠道打包: 1 建立多渠道 这里介绍一种简单的,直接as操作: 直接上图咯,在项目结构你添加flavor就好了 ...
- Android 新一代多渠道打包神器
作者 :李涛 ApkChannelPackage是一种高速多渠道打包工具.同一时候支持基于V1签名和V2签名进行多渠道打包.插件本身会自己主动检測Apk使用的签名方法,并选择合适的多渠道打包方式.对使 ...
最新文章
- 计算机与智能化专业课程,人工智能专业课程有哪些 大学本科课程设置
- node process.env
- CSS3 盒阴影 box-shadow属性
- java tcp ack_TCP三次握手和四次挥手以及11种状态
- Xenon构建MySQL高可用
- 黑苹果 电脑关机是因为发生了问题_【电脑常识】常见的电脑误区,你中了几点?...
- 多线激光雷达遇到的问题
- matlab2013 应用程序,Matlab2013a 下载
- ps抠图怎么放大图片_ps中在使用抠图工具时如何用快捷键移动放大的原始图片?...
- 微信html刷新页面,填坑——解决微信网页中刷新的问题
- Deepin常用命令、系统命令、Vi命令
- python概率分布拟合_用Python实现概率分布
- [坑]微信支付首次支付成功,第二次调用失败
- TVS (瞬态二极管)
- windows下Linux系统U盘启动盘制作与系统安装图文教程
- 基于OpenCV的音频频谱优化(仿酷狗频谱)
- 怎么调大计算机浏览器内字体,浏览器字体大小怎么设置,教你浏览器字体大小怎么设置-win7旗舰版...
- GNS3安装过程(详细)
- 记一次作业:完成企业网络安全运营建设方案
- iOS获取文件夹下所有的文件
热门文章
- 解决 用vue+vant 写顶部tab栏 做排班表的bug
- linux ipset 命令,什么是ipset,以及如何简单使用ipset,
- android简单音乐播放器(二)
- Swift Markup Formatting Syntax
- 万用表怎么测量电池容量_万用表怎么检测电池容量_电池电量
- 为什么叫vanilla neural network?
- 姬魔恋战纪送衣服显示服务器繁忙,姬魔恋战纪新手有哪些问题-姬魔恋战纪萌新常见问题汇总_手心游戏...
- 将C盘分区部分容量分配给其他分区
- AltiumDesigner覆铜挖空技巧总结
- Classification and inference with machine learning