Android 好用的马甲包配置

步骤

1、主module-build.gradle配置
2、Manifest.xml配置
3、Build Variants
4、差异化
5、常见问题

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、配置清单

<application
    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">
</application>

同步一下项目

3、打开侧边框的Build Variants

在这里插入图片描述
可以看到已经有了,选择对应的版本,就会生成不同版本的马甲APP

4、资源替换

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

5、常见问题及解决

1.Manifest merger failed : Attribute application@label value=(@string/app_name)
原因:
原因是工程A和工程B中的AndroidManifest.xml文件中都使用了app name,合并manifest的过程出现了问题
解决方法:
添加 以下两句

<manifest
	...
    xmlns:tools="http://schemas.android.com/tools">

    <application
    	... 
        android:label="@string/mcs_app_name"
        tools:replace="android:label"
//B工程示例
 <application
        ...
        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相同,一但相同就会出来这个问题。

解决方法:

<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="${applicationId}.fileprovider"
    android:grantUriPermissions="true"
    android:exported="false">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/file_paths" />
</provider>

1.通过${applicationId}.fileprovider的形式来指定provider的authorities
2.authorities会根据applicationId的不同而不同
3.获取时,可以通过包名+fileprovider来获取

public final static String getFileProviderName(Context context){
    return context.getPackageName()+".fileprovider";
}

实为好用,记录一下,去给原作者点个👍 吧~

作者:小王子_c285
链接:https://www.jianshu.com/p/6e60bd4c23ab

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值