美文网首页
项目使用AAR打包遇到的坑

项目使用AAR打包遇到的坑

作者: 唐小鹏 | 来源:发表于2021-04-14 10:14 被阅读0次

关于项目为什么要打包成AAR这里就不详细说明,这里只说说打包AAR遇到的坑

整个项目打包成AAR需要把项目变成module 要怎么变成module这是初级的问题,这里就不过多阐述了, 主要说module 打包成aar

第一种很简单的方式,按下图方式直接打包


image.png

生成的aar在库下面的build --outputs--aar 里面
然后就能在需要的项目里面依赖aar, 如果module里面还有一些第三库或者依赖,需要在你使用aar的地方再次依赖,因为直接生成AAR这种方式不能把第三方库和依赖打成AAR.
这种情况适合比较简单无过多依赖库.

第二种将aar文件打包至指定的本地maven仓库中
感兴趣可以参考这篇文章,但是面对正常项目,会有很多第三方依赖或者嵌套依赖,导致打出来的包会找不到第三方的库.

第三种,可以把依赖库直接打如到aar中,fat-aar-android,也有相关文档,对于第一次打包AAR的话,或多或少会有一些困难,以下是我在集成AAR的过程中遇到的坑,希望对小伙伴有所帮助,如有疑问,也可以私聊我,我如果看到会回复的.
问题:

1.遇到butterknife个AAR冲突,而且butterknife作者已经停止维护,所以要么换比较流行的ViewBinding组件,要么就用原生自带的,考虑到兼容的问题,还是使用原生的方法比较靠谱
2.注意不要重复依赖第三方库,像一些公共的库可以不要打入到aar中,

embed代表打入到AAR中,api/implementation代表不打入AAR中,realase包混淆后如果不打入会提示找不到对应的库

3.要换成implementation 'androidx.multidex:multidex:2.0.0'
4.资源冲突,包括第三方库app_name等 资源重复打包AAR失败

如果library和module中含有同名的资源(比如 string/app_name),编译将会报duplication resources的相关错误,有两种方法可以解决这个问题:
考虑将library以及module中的资源都加一个前缀来避免资源冲突;
在gradle.properties中添加android.disableResourceValidation=true可以忽略资源冲突的编译错误,程序会采用第一个找到的同名资源作为实际资源,不建议这样做,如果资源同名但实际资源不一样会造成不可预期的问题。

5.报错提示"Can’t process attribute android:fillColor="@android:color/white":

references to other resources are not supported by build-time PNG
generation. File was preprocessed as vector drawable support was added
in Android 5.0 (API level 21) See
http://developer.android.com/tools/help/vector-asset-studio.html for
details."
解决方案:vectorDrawables.useSupportLibrary = true//支持矢量图

6.AAR项目里面嵌入了AAR第三方包,需要单独提取出来,放在主包里面再次引用
7.可能会出提示找不到产商oppo推送的资源文件

MCS-->isExistPackage NameNotFoundException:com.coloros.mcs
Didn't find class "com.heytap.mcssdk.R$string" on path: DexPathList
网上的解决方案:
https://www.jianshu.com/p/77cbe147aea8

8.提示:/Users/lucas/.gradle/caches/transforms-2/files-2.1/2b9f703fbafeeda5e9d4c0825d0a11be/res/layout/layout_basepickerview.xml:2: error: resource color/pickerview_bgColor_overlay (aka com.btcc.globaluat:color/pickerview_bgColor_overlay) not found.

解决方案:
需要再主包额外加上

    <color name="pickerview_bgColor_default">#FFFFFFFF</color>
    <color name="pickerview_bgColor_overlay">#60000000</color>
    <color name="pickerview_bg_topbar">#f5f5f5</color>
    <color name="pickerview_timebtn_nor">#057dff</color>
    <color name="pickerview_timebtn_pre">#c2daf5</color>
    <color name="pickerview_topbar_title">#000000</color>
    <color name="pickerview_wheelview_textcolor_center">#2a2a2a</color>
    <color name="pickerview_wheelview_textcolor_divider">#d5d5d5</color>
    <color name="pickerview_wheelview_textcolor_out">#a8a8a8</color>
9.使用 rxandroid jar 包出现“java.lang.NoClassDefFoundError:io.reactivex.Flowable”的异常问题

解决方案从错误信息看,Flowable类找不到定义,那就是类加载器加载的时候出错了,看了下jar包中对应包下,这个类是存在的。于是考虑是不是rxandroid.jar 缺少了其它依赖包,上maven中央仓库查找对应RxJava 2.0.1的包需要依赖什么jar库,果然Runtime Dependencies下有个reactive-streams的依赖
额外添加:implementation 'org.reactivestreams:reactive-streams:1.0.3'

10.最近在使用OkHttp3的时候碰到了下面这个报错:

java.lang.NoClassDefFoundError: Failed resolution of: Lokio/Buffer
看起来是找不到这个类,而且是kio类,好像okhttp确实是依赖了这个一个jar包。
百度一看,还真是要导入这个一个包,结果下载了最新的okio-2.2.2.jar和okio-##### 2.2.0.jar,都试了一下,发现还是报错,使用okio-1.16.0.jar包就没有报错了。
额外添加:implementation 'com.squareup.okio:okio:1.16.0'

最重要的第一点,制作AAR的包,修改之后,重新打包一定要clean build.rebuild防止有缓存得不偿失,特别引用了像听云这种第三方的sdk,影响全局的gradle

相关文章

  • 项目使用AAR打包遇到的坑

    关于项目为什么要打包成AAR这里就不详细说明,这里只说说打包AAR遇到的坑 整个项目打包成AAR需要把项目变成mo...

  • Gradle打包发布aar

    参考:Android 发布项目到 jcenter 遇到的坑Gradle打包并发布aar 基本的操作步骤和坑点都很全...

  • 趟坑记录

    目录 Replugin的坑 相机权限 aar打包的坑 1.Replugin的坑 使用setSystemUiVisi...

  • Android Studio中架包打包和依赖冲突解决

    一、为什么使用aar打包,而不是jar 随着Android Studio的使用越来越广泛,使用aar打包这种方式也...

  • Android Studio中架包打包和依赖冲突解决

    一、为什么使用aar打包,而不是jar随着Android Studio的使用越来越广泛,使用aar打包这种方式也越...

  • 将项目打包成aar供其他项目使用

    最近公司需要将两个APP合并,故需要我将我的项目文件打包成aar供另外一位同事使用。照着网上的资料处理踩了挺多的坑...

  • Android Studio 打包及引用 aar

    Android Studio 打包及引用 aar 1.简述: Android 项目的开发中,我们经常会遇到工程、j...

  • aar的生成与引用

    最近项目中使用了aar,网上介绍的aar的使用方法都是最基本的使用方法,自己在实际使用的时候遇到一些问题,goog...

  • webpack

    公司去年使用了react,做项目,需要用到webpack打包构建工具,后面自己自学了webpack,遇到了很多坑,...

  • 将project打包成aar以及遇到的那些坑

    前言 在开发中,我们写的某些sdk要当作aar供自己或者别人使用,总会遇到一些坑。 下文则是提到一些本人在aar打...

网友评论

      本文标题:项目使用AAR打包遇到的坑

      本文链接:https://www.haomeiwen.com/subject/donohltx.html