组件化2

1.对于非主module中的AndroidManifest中修改了application标签,那么在合并成一个AndroidMenifest时候,就会报错,这时候要在主module中添加tools:replace,去替换。替换完成后为主module的设置。在哪个文件中添加tools:replace,就会保留哪个文件的中的配置。

base库中的AndroidManifest:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
  package="com.example.base">
  <uses-permission android:name="android.permission.INTERNET"/>
   <application
      android:name=".MyBaseApplication"
      ></application>
</manifest>

在主app中的AndroidManifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  package="com.example.androidstudiotest4">

    <application
         tools:replace="android:name,android:icon"
  	     android:allowBackup="true"
 	     android:icon="@mipmap/ic_launcher"
  	     android:label="@string/app_name"
 	     android:roundIcon="@mipmap/ic_launcher_round"
    	  android:supportsRtl="true"
    	  android:theme="@style/AppTheme">
   ......
   </application>

</manifest>

2.不同的module中的activity进行跳转

对于setClassName也可以用下面代替:

intent.setComponent(new ComponentName("com.example.androidstudiotest4","com.example.home.Main3Activity"));

3.在多module中,因为不能保证多个module中的全部资源命名不重名,因此可以在gradle中配置资源前缀。如果多个module中有相同名称的资源,那么在汇总在一起的时候,资源就会先被策略逻辑调整,后加载的资源地址会把前面的资源地址替换掉。
//统一资源前缀,规范资源引用。这个只能是限制xml中的资源的命名提示,对于图片等资源就需要自己手动更改。

resourcePrefix "app_"

4.组件化混淆方法,主要有三个方法,应该使用第三种
①将所有的混淆代码都放在app的proguard-rules.pro文件中,但是当组件改变的时候,就要删减文件。不太可取
②将混淆文件放在各自的module中,然后使用gradle代码合并混淆文件。这样比较麻烦
③在各自的module中的defaultConfig中添加 consumerProguardFiles ‘proguard-rules.pro
这样就会将proguard文件包含到aar文件中。

5.修改生成apk的resources.arsc文件中的二进制数据。这样进行资源压缩
https://github.com/shwenzhang/AndResGuard

6.多渠道打包的方案
快速打包的方法
①使用python打包,不能兼容v2打包。
能够快速的秘密是在生成的apk文件解压在META-INF中添加带有标记的文件。然后在代码中进行获取文件,通过文件名来判断当前是哪个渠道包。
通过getApplicationInfo()方法进行获取apk的信息,然后进行遍历文件,进行判断。

② 使用美团的打包工具walle.主要是进行修改apk包中的签名区内容。
https://github.com/Meituan-Dianping/walle

7.根据不同的渠道,进行决定依赖那些文件。并且可以自定义字段从而修改功能清单内的文件。

①使用manifestPlaceholders中的自定义属性
在这里插入图片描述
②根据渠道确定依赖的文件,这个目前没有发现什么用处,因为根据不同的渠道在构建的时候如果在代码中进行引用会报错。
在这里插入图片描述
③可以将gradle中的数据暴露给AndroidManifest文件中application标签下的的meta-data标签中。
在这里插入图片描述
④然后在java代码中能够获取到应用的信息,得到相应的meta_data中的数据。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yuezheyue123/article/details/88660515