Android马甲包
一、马甲包介绍
在App的开发过程中,经常会遇到产品或者运营的同事提出要制作马甲包的需求;马甲包是指与原APP包除了包名,包id,包名称图标等给用户加以区分的东西,其他功能基本不变的APP包。在开发马甲包之前,一定要和产品或者运营的同事讨论清楚马甲包的具体需求,比如需要制作多少个马甲包,马甲包和主包有哪些差别,之后开发的功能是否需要在马甲包上体现等等,只有了解清楚了需求,才能达到事半功倍的效果。
二、马甲包的制作流程
1、新建一个Android项目,名称为MajiabaoTest,如图:
2、配置马甲包applicationId以及应用名称
在app的build.gradle文件中添加马甲包的配置
defaultConfig {
applicationId "com.liunian.majiabaotest"
minSdkVersion 15
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
manifestPlaceholders = [APP_NAME: '主包名称'] // 配置主包的应用名称
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.releaseConfig
}
// 第一个马甲包
majiabaoOne.initWith(buildTypes.release) // 以release的配置来初始化马甲包配置
majiabaoOne {
applicationIdSuffix ".majiabaoOne" // 修改马甲包的applicationId,马甲包的application将为com.liunian.majiabaotest.majiabaoOne,即在原来的applicationId后加上配置内容
manifestPlaceholders = [APP_NAME: '第一个马甲包'] // 配置马甲包的应用名称
}
}
在AndroidManifest.xml文件中引用APP_NAME
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="${APP_NAME}"
tools:replace="android:label"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
同步一下项目(sync project),这个时候在Build Variant中就有马甲包对应的版本了,如图:
在Build Variant中分别选择release和majiabaoOne,编译运行项目,可以得到两个不同的应用
可以看到,两个应用的名称是不一样的,用adb shell dumpsys window | findstr mCurrentFocus分别查看两个应用的applicationId,如下:
两个应用的applicationId是不一样的。
3、修改应用图标icon
Android应用在编译时,会以applicationId后缀编译资源,所有根据不同的马甲包,可以编译不同的资源,如果后缀资源文件中有对应的资源,则将会用后缀资源文件中的资源覆盖主包资源,在src目录下新建一个以马甲包后缀命名的目录,并添加应用icon的资源文件,马甲包即可使用对应的应用图标,如图:
将Build Variant选中为majiabaoOne,运行app,发现马甲包的应用icon已经修改
4、修改应用资源文件
根据上面我们知道,我们可以通过配置马甲包资源文件来修改马甲包的外观,比如主题色,应用图标,文字描述,动画效果等等,下面依次举例说明:
修改应用主题色
我们知道,首先,我们在应用的colors.xml中定义应用的主题色,然后所有和主题色相关的颜色都需要引用该主题色,在main/res/values/colors.xml中定义应用的主题色,如下:
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
然后在马甲包的资源文件中覆盖掉主包对主题色的定义,在majiabaoOne/res/values/colors.xml中定义主题色,如下:
<color name="colorPrimary">#D43C33</color>
<color name="colorPrimaryDark">#C2352C</color>
在Build Variant中分别选择release和majiabaoOne,运行如下:
修改应用图标的方式前面已经有说过了,参考马甲包应用icon的配置
5、修改文字描述
文字描述我们一般定义在res/values/strings.xml中,我们只需要在马甲包中对对应的文字描述进行重定义,即可修改,下面我们将马甲包主页面中的“Hello World!”修改为“我是一个马甲包!”。
在majiabaoOne/res/values/中新建strings.xml,并对描述文字进行重定义,如下:
<string name="string_desc">我是一个马甲包!</string>
运行效果如下:
其他如布局(不建议对布局进行重定义,因为后期维护需要维护两套布局文件,容易出错)、动画样式、文字样式、按钮样式等都可以通过这种方式来对重新定义马甲包的UI。
6、在AndroidManifest引用applicationId
在AndroidManifest中我们经常需要通过applicationId定义一些声明等,比如接入极光推送,我们就需要在Manifest文件中声明一下权限:
<permission
android:name="com.liunian.majiabaotest.permission.JPUSH_MESSAGE"
android:protectionLevel="signature" />
前面com.liunian.majiabaotest是applicationId,但是马甲包的applicationId和主包是不一样的,所有不能再Manifest文件中写死,这个时候我们就可以通过引用applicationId来动态定义:
<permission
android:name="${applicationId}.permission.JPUSH_MESSAGE"
android:protectionLevel="signature" />
三、总结
1、我们可以通过修改applicationId来将马甲包和主包区分开
2、我们可以通过重新定义资源文件来修改马甲包的UI显示
附上源码:https://github.com/2449983723/MajiabaoTest.git
---------------------
作者:xiao_nian
来源:CSDN
原文:https://blog.csdn.net/xiao_nian/article/details/79460952?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!
Android马甲包相关推荐
- Android马甲包的那些事儿
制作Android马甲包最简单的方式就是使用 productFlavors 机制. 本文就是在productFlavors机制的基础上制作的马甲包,每个马甲只需要 在build.gradle文件中配置 ...
- Android 马甲包制作流程
一.马甲包的制作流程 1.配置马甲包的applicationId以及应用名称 在app的build.gradle文件中添加马甲包的配置 android {signingConfigs {config ...
- IOS+Android马甲包封装上架!
目的 我们有自己的一个主网站平台,为了推广我们的主网站平台,我们需要长期制作大量马甲app,然后引导用户到我们的主网站游戏,所以,你制作的app的功能只给审核人员看到,只是为了应付审核,app上架之 ...
- android集成sdk 马甲包,Android 马甲包制作流程
一.马甲包的制作流程 1.配置马甲包的applicationId以及应用名称 在app的build.gradle文件中添加马甲包的配置 android { signingConfigs { confi ...
- 详述Android马甲包
一.何为马甲.作用 简单的说,一句话就是:APP的小号. 区别: 1. 马甲icon和名字不同,内容和主号基本一样. 2. 有的是针对不同的目标用户,马甲采用主App的部分功能,同时具特别的功能和内容 ...
- android 平台马甲举报,GitHub - qq549631030/AndroidJunkCode: Android马甲包生成垃圾代码插件...
Android垃圾代码生成插件 此插件用于做马甲包时,减小马甲包与主包的代码相似度,避免被OPPO.VIVO等应用市场识别为马甲包. 使用方法 根目录的build.gradle中: buildscri ...
- android马甲包代理,安卓渠道马甲包配置
1.在productFlavors下增加一个 flavor: productFlavors { main { ... } vest {/ ...
- Android马甲包封装上架
最近做了一个Google Play马甲包上架,需求如下 1:登录--采用原生开发, 2,webview 展示 3,webview调取原生拍照 4,webview调取原生进行人脸识别 5,webview ...
- 利用 shell 脚本进行android 马甲包制作
最近公司需要进行马甲包的制作,一开始想拉分支来解决,发现这样的做法不是很好,如果是多个马甲包呢?需要拉N个分支,一旦源代码动了,马甲包代码也要跟着动,而且还会产生很多冲突,多个地方需要操作起来,费时费 ...
最新文章
- php商品数量怎么用js,如何使用js统计页面标签数量
- 任意模数NTT(MTT)
- mysql 快速复制_MySQL中快速复制数据表方法汇总
- 某公司R2631E以太口通过SDH接新桥的ATM交换机,出现丢包问题的解决方法
- linux m25p80 dts,OpenWrt添加开发板RT5350-EVB,并成功设置pppoe
- 【优化预测】基于matlab粒子群算法优化SVM回归预测(多输入多输出)【含Matlab源码 1421期】
- 【Android -- 写作工具】Markdown 前景色、背景色
- 在Oracle官网下载并安装JDK然后配置环境变量
- 成都敏之澳:拼多多投诉问题类型客服怎么做?
- 数据仓库、数据湖、数据集市、和数据中台的故事
- 【Spark】介绍 快速入门
- 孤立森林(隔离树)译文
- 查询GPU使用情况以及杀死GPU上的多个无用进程
- void __declspec(naked)解释
- Hilbert 第十问题漫谈
- 不需要支撑结构的3D打印技术:多轴机器人3D打印系统
- swing 文本框双击Ctrl,触发删除全部并黏贴
- OpenWrt路由器无线中继、信号放大实现
- java 汽车加速_汽车加速没劲怎么办?四个简单的方法教你提升汽车动力!
- 帝国cms 搜索功能总结