教你如何快速的创建一个能够避规各大应用下载市场审核机制的Android马甲包

作者: IOS开发子 分类: iOS开发 发布时间: 2018-10-28 17:02

在现在这个特殊情况和严格的审核机制下我们的CP,BC,SSC,金融期货类APP为了导量,可能有制作马甲包的需求。
什么是马甲包:马甲包是指与原APP包除了包名,包id,jks,包名称图标等给用户加以区分的东西,其他功能基本不变的APP包。正确的创建马甲包会给以后开发带来极大的便利,否则将会在以后的开发中埋下无数的坑。

1.我们要做的是在原来项目的基础复制整个项目然后打开项目副本。

此时的项目和原项目一模一样,切记不要直接在文件夹上动手脚。要用编译软件打开副本中的项目。(android studio)

2.打开软件后我们先改变包id。

applicationId "com.*****.wsjr"

打开项目中app包下的build.gradle文件修改下面代码中星号的位置,将其改成马甲包的名字。(也就是改包名,比如说我们要改星号部分,当然改后面都是一样的,只要我们下面引号中的包名和以前不同就可以了)

applicationId “com.*****.wsjr”
3,然后我们开始修改包名。

1.修改包名不要从AndroidManifest中修改。
首先我们打开包的层级

在如图所示位置将compact Empty Middle Packages前面的对勾点掉。
2.找到星号位置的文件夹,也就是代表你项目名称的文件夹

点击右键选择refzctor下的rename键将其改为你所需要的项目名。此时下面会弹出更改包名还是文件夹名选择第一个更改包名。

然后会弹出如下界面

这里是询问我们是否修改项目中所有用到此包名的地方。因为我的测试项目中只有一个文件所以只出现修改和取消,正常项目可选择Do Refactor All 修改全部。
到这里还没有结束,我们通常会在自定义View或依赖中引用到包名,所以

4,将项目中所有用到原项目名的地方替换成马甲包项目名

按快捷键Ctrl+shift+f,查找com.*.wsjr字段逐一将星号部分改成马甲包包名。(如果快捷键不好使可能是因为搜狗输入法等将studio的快捷键占去了,把输入法等正在用的软件快捷键关闭即可)
5,运行项目,如果项目还有报错,报错的地方肯定与项目名有关,修改成马甲包的名字即可。


在app的build.gradle文件中添加马甲包的配置

同步一下项目(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" />

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

更多阅读