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

无鞋。。。

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

这里的马甲由宿主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

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";

}

android集成sdk 马甲包,Android配置马甲包相关推荐

  1. android update sdk --no-ui,CircleCI Android constraintLayout不起作用

    我现在正在将CircleCI用于我的项目.我也在我的项目中实现新的constraintLayout.现在我被CircleCI大楼困住了.它在gradle -dependencies运行时向我显示: F ...

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

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

  3. android 集成腾讯定位,Android集成腾讯云通信IM

    本篇文章结构 一.集成流程. 二.集成中遇到的问题 集成过程 TIM图片20180425151417.png 很清楚,前几部没什么说的,去官网注册账号就好了,我们接下来看账号集成. 首先第一步是集成模 ...

  4. android+集成北斗定位,基于Android系统的北斗定位通信手持设备研究

    摘要: 卫星导航系统广泛应用于交通运输,军事活动,野外作业,抗险救灾等重要领域,其重要程度关系国家重大利益.我国北斗卫星导航系统日趋完善,研发基于北斗系统的地面手持终端对于开发利用北斗导航卫星系统非常 ...

  5. android版本sdk api对应,Android API Level与sdk版本对照表

    API等级1: Android 1.0 API等级2: Android 1.1 Petit Four 花式小蛋糕 API等级3: Android 1.5 Cupcake 纸杯蛋糕 API等级4: An ...

  6. 使用IntelliJ IDEA 13搭建Android集成开发环境(图文教程)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  7. android aar项目_一文了解Android游戏SDK开发

    去年从平安离职之后,加入了一家游戏公司,负责游戏SDK相关的业务开发和维护工作,经过半年来的摸索,对于游戏SDK的开发有了一定的理解,下面就对游戏SDK开发涉及到的知识点进行简单的梳理. SDK SD ...

  8. android10安装包,设置 Android 10 SDK

    Android 10 是一个主要版本,包含可用于扩展应用的各种特性和功能.Android 10 还提供了行为变更(针对以 Android 10 为目标平台的应用和所有应用)以及隐私权变更,有助于延长电 ...

  9. Android 第三方SDK整理

    Android 第三方SDK整理 此文章为转载,仅用于学习使用,具体内容访问此链接 import java.util.HashMap;public class Sdk {/***by:默小坑2020. ...

最新文章

  1. Linux中的帮助命令
  2. 20211201 (正定矩阵A+正定矩阵B)的最小特征值 ≥ 正定矩阵A的最小特征值+正定矩阵B的最小特征值
  3. websocket实现单聊
  4. pdf文件内容查看器 -- 采用wpf开发
  5. 一对矩阵的相关性_矩阵分析学习笔记(1)
  6. ABAQUS常用量纲
  7. 宽带可调飞秒激光器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  8. java 定义二维数组_java定义二维数组的几种写法(小结)
  9. 成为Lowe‘s劳氏供应商的条件
  10. 山东省第三届数据应用创新创业大赛颁奖典礼在烟台举办
  11. GIS开发:Contour(轮廓线)
  12. idea的代码文本距离左边很远问题解决
  13. MyBatis读数据库出现很多字段都是null的问题
  14. C++实现字符串的部分复制
  15. 高通AKM8975地磁传感器分析
  16. c++中的前置和后置加加没你想的这么简单
  17. 从 Paxos 到 Raft,分布式一致性算法解析
  18. 计算机软件著作权法保护的内容不包括,计算机著作权保护法中的软件著作权包括哪些权限...
  19. c语言1h什么意思,标准现代精确——1C开叫1H应叫及其他应叫
  20. Spring自定义数据源配置不当引起的Mybatis拦截器Interceptors 失效/不生效

热门文章

  1. UE5 Gameplay 框架拆解
  2. 阿里云centos6.9搭建ngrok服务器
  3. 拉链表取某一天的历史快照
  4. python模拟访问js_百度统计原理分析-利用PHP/Python实现模拟访问
  5. ZooZ推出应用内移动支付SDK
  6. 一次投诉淘宝卖家的过程
  7. jQuery自定义插件
  8. TypeScript基础快速上手
  9. Jmeter循环获取JDBC查询结果及断言数据库查询结果
  10. 考研 数学1 2 3 区别