Android学习探索之App多渠道打包及动态添加修改资源属性
来源:互联网 发布:手机文件粉碎软件 编辑:程序博客网 时间:2024/05/17 09:01
前言:
关于Android渠道打包是一个比较老的话题,今天主要记录总结一下多渠道打包以及如果动态配置修改一些资源属性。今天以公司实际需求为例进行演示,由于项目复用很多公共的业务组件,而且业务组件之间的跳转采用Scheme协议,每个业务组件的host地址不变,所以需要在打包的时候动态修改scheme协议名字。为了方便举例,首先我们这里假设我们一个App要打出两个不同的渠道,方便进行数据统计。
第一步声明一个渠道参数 AndroidManifest.xml中
<meta-data android:name="APP_CHANNEL" android:value="external" />
为了方便通过gradle自动替换,value需要替换成标记位的方式
<meta-data android:name="APP_CHANNEL" android:value="${APP_CHANNEL}" />
第二步在gradle中利用productFlavors声明渠道类型,
比如我们这里声明一个外部版本一个内部版本,manifestPlaceholders 替换AndroidManifest中的
${APP_CHANNEL}值
productFlavors { external { manifestPlaceholders = [APP_CHANNEL: "external"] } internal { manifestPlaceholders = [APP_CHANNEL: "internal"] } }
上面的也可以修改成批量处理方式
productFlavors { external {} internal {} productFlavors.all { flavor -> flavor.manifestPlaceholders = [APP_CHANNEL: name] } }
第三步重新build项目会生成build选项,如下图所示:
打包的话可以通过在android studio底栏中有个命令行工具Terminal,例如打包所有渠道可以执行下面的命令
gradlew assembleRelease
如果要打指定渠道的话,可以执行下面的命令,例如要打external外部版本
gradle assembleExternalRelease
也可以通过gradle projects里面生成的命令选项进行打包,生成的选项如图所示:
第四步修改生成渠道包文件名
buildTypes { release { //混淆 minifyEnabled false //是否压缩对齐 zipAlignEnabled true //清除不用的资源 shrinkResources false //混淆脚本路径 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt' signingConfig signingConfigs.releaseConfig //自定义apk名字 applicationVariants.all { variant -> variant.outputs.each { output -> output.outputFile = new File( output.outputFile.parent, "${applicationId}-${variant.productFlavors[0].name}-${versionName}-${releaseTime()}.apk".toLowerCase()) } } } debug { //debug时候也采用正式签名文件 signingConfig signingConfigs.releaseConfig } }}
第五步定制app scheme地址
根据上面的渠道替换原理,只需添加一个scheme标记即可
<activity android:name=".GoodsDetailActivity" android:theme="@style/AppTheme"> <!--要想在别的App上能成功调起App,必须添加intent过滤器--> <intent-filter> <!--协议部分,随便设置--> <data android:host="goods" android:path="/goodsDetail" android:port="8888" android:scheme="${myScheme}"/> <!--下面这几行也必须得设置--> <category android:name="android.intent.category.DEFAULT"/> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.BROWSABLE"/> </intent-filter> </activity>
在gradle中添加替换
manifestPlaceholders = [ myScheme: "XApp", ]
替换指定属性,比如颜色值,使用如下代码
resValue "color", "app_theme_color", "#283146"
总结:
根据多渠道打包的原理来实现定制特定需要的app包。
干我们这行,啥时候懈怠,就意味着长进的停止,长进的停止就意味着被淘汰,只能往前冲,直到凤凰涅槃的一天!
阅读全文
0 0
- Android学习探索之App多渠道打包及动态添加修改资源属性
- 多渠道打包之动态修改App名称,图标,applicationId,版本号,添加资源
- Android利用Gradle多渠道打包如何动态替换资源,文字
- android多渠道打包学习
- Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
- Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
- Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
- Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
- Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
- Android学习系列(25)--App自动化之使用Ant编译项目多渠道打包
- Android App自动化之使用Ant编译项目多渠道打包
- Android sudio配置实现app多渠道打包,libary多渠道打包
- Android学习笔记--多渠道打包
- android gradle多渠道打包不同资源
- Android Studio3.0.0以上APP多渠道打包
- Android学习笔记之动态修改xml中字符资源
- Android多渠道打包之Python打包
- Android Studio Gradle 多渠道自动打包,动态修改HostUrl,签名apk,混淆配置详解
- npm body-parser 中文api
- 关于Java中char,int的互转
- 大律法,自适应阈值分割
- 网易—解救小易
- 哈哈日语之旅游日语口语(1)
- Android学习探索之App多渠道打包及动态添加修改资源属性
- leetcode 61. Rotate List
- 哈哈日语之旅游日语
- 关于IT技术走向的一点想法
- 邮箱服务器(三) 邮件基本格式与编码、复合邮件结构、整体架构代码
- c++基于gSoap开发编译异常
- 单例模式&工厂模式
- 哈希表
- 51nod 1166 大数开平方