最近一个需求是做一个应用集成,要把之前做的两个APP打包到新的app里使用,首先我们的思路是把之前的APP打包成aar提供给新APP主工程引用即可。把代码copy进主工程里的思路就算了吧,哈哈,下面说下遇到的坑以及注意事项:
一、之前的app的主模块还引用了别的module,
所以在复制app里的aar的时候也要把它引用的module的aar一块copy出来,不然会提示module里的类找不到!当然aar里边的build.gradle文件里的引用,比如implementation’com.github.bumptech.glide:glide:3.7.0’也得在主工程里引入一遍。有没有似曾相识?这就跟之前打包jar一样,如果jarA里边有引用别的jarB,在使用jarA的时候也要一块copy jarB一起引入使用。aar就是别jar多了xml文件。
二、打包成功了,再说下引用的各种冲突问题:
1、jar冲突,如果aar里边使用的jar包正好在主工程里也使用了,那么这个时候会报jar包重复引用的错误,解决方法是 把aar里的jar删掉,采用complie或者implementation的形式去引用比如:implementation’com.github.bumptech.glide:glide:3.7.0’。
2、开发中添加了一个第三方框架,结果框架里的 design 包为25,我的版本为24,由于网络原因,不想下载.但是或报错.
Error:Failedtoresolve:com.android.support:design:25.1.0
那么如何不用框架中的design 包,而用自己项目中的design 包呢?
运用exclude group 关键字就可以
compile (‘com.***.***:XXX:1.0.0′) {// 所加的第三方框架exclude group:’com.android.support’,module:’design’// 加载时排除框架中的design包}
问题解决
3、在gradle 3.0.0中AAPT2是默认打开的,在项目的gradle.properties中添加android.enableAapt2=false,sync后就编译通过了。
4、com.android.support:multidex:1.0.2的使用
在Module的build.gradle的defaultConfig中加一行multiDexEnabled true;
在dependencies中添加一行compile ‘com.android.support:multidex:1.0.0’;
app的Application使用android.support.multidex.MultiDexApplication或者您的Application应继承android.support.multidex.MultiDexApplication;
如果有自定义的Application,那么在自定义的Application类中,重写attachBaseContext(),并且在其中调用super.attachBaseContext(),然后调用MultiDex.install(this) ,然后在该方法上加上@Override注解,既然是重写方法,最好加上这个注解,不过Android Studio会自动加上。
5、多library合并打包成aar的正确方式(fat-aar)
参考链接https://www.cnblogs.com/Jason-Jan/p/9192273.html
6、Multiple entries with same key: android:theme=REPLACE and android:theme=REPLACE
如果aar里边用到了tools:replace=android:theme…再在主工程里使用此属性,就会报这个错误,编译不通过。
解决方法:去掉主工程tools:replace=android:theme…里边的android:theme,把application下边的属性android:theme=“@style/apptheme” apptheme的名字改成跟aar里边的名字一样即可。
后续遇到的其他问题会继续更新,欢迎关注。。。欢迎评论区提问讨论
喜欢 就关注吧,欢迎投稿!
如有任何疑问可在文章底部留言。为了防止恶意评论,本博客现已开启留言审核功能。但是博主会在后台第一时间看到您的留言,并会在第一时间对您的留言进行回复!欢迎交流!
本文链接: https://leetcode.jp/app打包成aar被主工程引用遇到的坑!/