一、马甲包介绍
        在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马甲包相关推荐

  1. Android马甲包的那些事儿

    制作Android马甲包最简单的方式就是使用 productFlavors 机制. 本文就是在productFlavors机制的基础上制作的马甲包,每个马甲只需要 在build.gradle文件中配置 ...

  2. Android 马甲包制作流程

    一.马甲包的制作流程 1.配置马甲包的applicationId以及应用名称 在app的build.gradle文件中添加马甲包的配置 android {signingConfigs {config ...

  3. IOS+Android马甲包封装上架!

    目的  我们有自己的一个主网站平台,为了推广我们的主网站平台,我们需要长期制作大量马甲app,然后引导用户到我们的主网站游戏,所以,你制作的app的功能只给审核人员看到,只是为了应付审核,app上架之 ...

  4. android集成sdk 马甲包,Android 马甲包制作流程

    一.马甲包的制作流程 1.配置马甲包的applicationId以及应用名称 在app的build.gradle文件中添加马甲包的配置 android { signingConfigs { confi ...

  5. 详述Android马甲包

    一.何为马甲.作用 简单的说,一句话就是:APP的小号. 区别: 1. 马甲icon和名字不同,内容和主号基本一样. 2. 有的是针对不同的目标用户,马甲采用主App的部分功能,同时具特别的功能和内容 ...

  6. android 平台马甲举报,GitHub - qq549631030/AndroidJunkCode: Android马甲包生成垃圾代码插件...

    Android垃圾代码生成插件 此插件用于做马甲包时,减小马甲包与主包的代码相似度,避免被OPPO.VIVO等应用市场识别为马甲包. 使用方法 根目录的build.gradle中: buildscri ...

  7. android马甲包代理,安卓渠道马甲包配置

    1.在productFlavors下增加一个 flavor: productFlavors {        main {            ...        }        vest {/ ...

  8. Android马甲包封装上架

    最近做了一个Google Play马甲包上架,需求如下 1:登录--采用原生开发, 2,webview 展示 3,webview调取原生拍照 4,webview调取原生进行人脸识别 5,webview ...

  9. 利用 shell 脚本进行android 马甲包制作

    最近公司需要进行马甲包的制作,一开始想拉分支来解决,发现这样的做法不是很好,如果是多个马甲包呢?需要拉N个分支,一旦源代码动了,马甲包代码也要跟着动,而且还会产生很多冲突,多个地方需要操作起来,费时费 ...

最新文章

  1. php商品数量怎么用js,如何使用js统计页面标签数量
  2. 任意模数NTT(MTT)
  3. mysql 快速复制_MySQL中快速复制数据表方法汇总
  4. 某公司R2631E以太口通过SDH接新桥的ATM交换机,出现丢包问题的解决方法
  5. linux m25p80 dts,OpenWrt添加开发板RT5350-EVB,并成功设置pppoe
  6. 【优化预测】基于matlab粒子群算法优化SVM回归预测(多输入多输出)【含Matlab源码 1421期】
  7. 【Android -- 写作工具】Markdown 前景色、背景色
  8. 在Oracle官网下载并安装JDK然后配置环境变量
  9. 成都敏之澳:拼多多投诉问题类型客服怎么做?
  10. 数据仓库、数据湖、数据集市、和数据中台的故事
  11. 【Spark】介绍 快速入门
  12. 孤立森林(隔离树)译文
  13. 查询GPU使用情况以及杀死GPU上的多个无用进程
  14. void __declspec(naked)解释
  15. Hilbert 第十问题漫谈
  16. 不需要支撑结构的3D打印技术:多轴机器人3D打印系统
  17. swing 文本框双击Ctrl,触发删除全部并黏贴
  18. OpenWrt路由器无线中继、信号放大实现
  19. java 汽车加速_汽车加速没劲怎么办?四个简单的方法教你提升汽车动力!
  20. 帝国cms 搜索功能总结

热门文章

  1. 程序员的自我吐槽,来自专业人士的扎心吐槽!
  2. android 模拟器 itools,iTools安卓模拟器常见问题及解决方法
  3. 18_2Servlet学习笔记
  4. 10万微商被骗100亿,最大微商集团被爆涉嫌传销
  5. 微信运动服务器忙,微信运动步数每天不足百步,你们宅着忙什么呢?
  6. 蚁群算法画图java_[转载]简单蚁群算法 + JAVA实现蚁群算法
  7. 腾讯云图 数据源 api
  8. linux主进程退出时,结束子进程
  9. Kafka系列 —— 生产实践分享
  10. 突破某些网站限制只能由微信打开的尴尬场景