栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

安卓productFlavors多渠道打包简单使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

安卓productFlavors多渠道打包简单使用

按需求来介绍功能:

打包的时候,打出多个包

1.不同包名

2.不同app名,不同icon

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

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

步骤:

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

在andriod对象下面加入

flavorDimensions 'aaa'

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

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

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

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

productFlavors {
    'TapTap' {
        dimension 'aaa'
        applicationId "com.canlonggame.mjyz.m4399"
        versionCode 2
        versionName "2.0"
        signingConfig signingConfigs.mjyz
        manifestPlaceholders = [
                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中的入口类那个标签



    
        
        
            
                

                
            
        
    

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

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1028298.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号