欢迎光临
我们一直在努力

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

55280111

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。