android集成sdk 马甲包,Android配置马甲包

神马马甲包?可以穿的么?人可以穿么?

无鞋。。。

大家听得最多的还是马甲账号,道理差不多,注册在多账号,注册的人还是你自己。

这里的马甲由宿主APP,通过配置gradle,生成与原APP除了包名、包ID、包名称图标等类似的部分,满足不同差异化兼容需求

步骤

1.主modlle-build.gradle配置

2.Manifest.xml配置

3.Build Variants

4.差异化

1.modle-build.gradle

apply plugin: 'com.android.application'

android {

compileSdkVersion 29

defaultConfig {

applicationId "com.xyz.app"

minSdkVersion 15

targetSdkVersion 28

versionCode 1

versionName "1.0"

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

manifestPlaceholders = [APP_NAME: 'com.xyz.app.majiatxt'] // 配置主包的应用名称

}

buildTypes {

release {

minifyEnabled false

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

}

// 马甲包

majiabao1.initWith(buildTypes.debug) // 以release的配置来初始化马甲包配置

majiabao1 {

// 修改马甲包的applicationId(这里是原包名后追加:com.xyz.app.majiabao1)

applicationIdSuffix ".majiabao1"

manifestPlaceholders = [APP_NAME: '马甲包一'] // 配置马甲包的应用名称

}

// 马甲包

majiabao2.initWith(buildTypes.debug) // 以release的配置来初始化马甲包配置

majiabao2 {

// 修改马甲包的applicationId

applicationIdSuffix ".majiabao2"

manifestPlaceholders = [APP_NAME: '马甲包二'] // 配置马甲包的应用名称

}

}

}

//省略无用

2、配置清单

android:allowBackup="true"

android:icon="@mipmap/icon_collection_pre2"

android:label="${APP_NAME}"

tools:replace="android:label"

android:roundIcon="@mipmap/ic_launcher_round"

android:supportsRtl="true"

android:theme="@style/AppTheme">

同步一下项目

3、打开侧边框的Build Variants

6e60bd4c23ab

20190402161723356.png

可以看到已经有了,选择对应的版本,就会生成不同版本的马甲APP

4、资源替换

对于不同版本马甲,可以在src建立和前面马甲包一样的后缀文件夹,在app>src下面创建一个majiabao1名字的目录(和app>src>main同级),然后在该目录下创建res目录,参考main里面的资源文件放入对应的差异化资源,这里不在演示。

问题扩展

1.Manifest merger failed : Attribute application@label value=(@string/app_name)

原因:

原因是工程A和工程B中的AndroidManifest.xml文件中都使用了app name,合并manifest的过程出现了问题

解决方法:

添加 以下两句

...

xmlns:tools="http://schemas.android.com/tools"

...

...

android:label="@string/mcs_app_name"

tools:replace="android:label"

//B工程示例

...

android:label="@string/app_name"

...>

2.Unable to resolve dependency for ':app@common/compileClasspath': Could not resolve project :XXX

原因:

主工程的buildTypes有多个类型,而子module没有对应,导致马甲编译时不能与之匹配

解决方法:

子module中的buildTypes {} 中的节点 数量和名称一致即可,内容可以不一致。

buildTypes {

release {

minifyEnabled false

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

}

debug {

}

majiabaoOne {

}

}

3.INSTALL FAILED CONFLICTING PROVIDER

在Android中authority要求必须是唯一的,定义一个provider时需要为它指定一个唯一的authority,系统会检查当前已安装应用的authority是否和你要安装应用的authority相同,一但相同就会出来这个问题。

解决方法:

android:name="android.support.v4.content.FileProvider"

android:authorities="${applicationId}.fileprovider"

android:grantUriPermissions="true"

android:exported="false">

android:name="android.support.FILE_PROVIDER_PATHS"

android:resource="@xml/file_paths" />

1.通过${applicationId}.fileprovider的形式来指定provider的authorities

2.authorities会根据applicationId的不同而不同

3.获取时,可以通过包名+fileprovider来获取

public final static String getFileProviderName(Context context){

return context.getPackageName()+".fileprovider";

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值