IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android aar包的使用 打包aar后报错ClassNotFoundException,aar中有dependencies依赖的情况; -> 正文阅读

[移动开发]Android aar包的使用 打包aar后报错ClassNotFoundException,aar中有dependencies依赖的情况;

示例:现有A,B两个library module都是本地的,A引用B,我把A打成了aar库,打出来之后却没有B的内容,导致我的主工程引用A之后,执行某个应用了B中的类的方法的时候崩溃了,请问怎么才能打包A成aar库的时候把B库的内容都打进去(B也可能是远程仓库)。解决问题在后面;
1、如何打AAR包:


如上图所示,选中你需要打aar包的Module,然后点击Build中的“Make Module 就OK了

?

?

或点击图二中的assemble ;

这个是AAR包的输出位置;

2:如何引用AAR包:
将相应AAR包复制到APP的某个目录如(app\libs),同时将加入到在APP的dependencies内,如下:
? ? ? ?repositories {
? ? ? ? ? ? ? flatDir {
? ? ? ? ? ? ? dirs 'libs' //this way we can find the .aar file in libs folder
? ? ? ? ? ?}
? ? ? ? }
? ?dependencies {
? ? ? ? ?compile(name:'xxxxx', ext:'aar') ?//xxxxx是你aar的名字
? ? }

3、打包aar后报错ClassNotFoundException,aar中有dependencies依赖的情况:
AAR只能打包本地的代码,你在dependencies中的依赖无法打包到AAR中;

解决1:把你在AAR包中依赖地址在新工程再引用一次;有点SB例(Module1中依赖了OkHttp,把Module1打包为AAR,Module2使用了此AAR后,在依赖一次OkHttp)

解决2:https://github.com/kezong/fat-aar-android ; https://github.com/adwiv/android-fat-aar;

fat-aar-android的使用:https://github.com/kezong/fat-aar-android
第一步: Apply plugin
添加以下代码到你工程根目录下的build.gradle文件中:

buildscript {
? ? repositories {
? ? ? ? jcenter()
? ? }
? ? dependencies {
? ? ? ? classpath 'com.android.tools.build:gradle:xxx'
? ? ? ? classpath 'com.kezong:fat-aar:1.2.8'
? ? }
}
添加以下代码到你的主library的build.gradle中:

apply plugin: 'com.kezong.fat-aar'
第二步: Embed dependencies
将implementation或者api改成embed
代码所示:

dependencies {
? ? implementation fileTree(dir: 'libs', include: '*.jar')
? ? // java dependency
? ? embed project(path: ':lib-java', configuration:'default')
? ? // local full aar dependency
? ? embed (name:'lib-aar-local2',ext:'aar')
? ? // remote jar dependency
? ? embed 'com.google.guava:guava:20.0'
? ? // remote aar dependency
? ? embed 'com.facebook.fresco:fresco:1.11.0'
? ? // don't want to embed in
? ? // 不建议使用implementation,因为该依赖可能与application的依赖版本不一致,使用implementation可能会导致R类找不到的问题
? ? compileOnly 'com.android.support:appcompat-v7:27.1.1'
}
多级依赖
本地依赖

如果你想将本地所有相关的依赖项全部包含在最终产物中,你需要在你主library中对所有依赖都加上embed关键字

比如,mainLib依赖lib1,lib1依赖lib2,如果你想将所有依赖都打入最终产物,你必须在mainLib的build.gradle中对lib1以及lib2都加上embed关键字

远程依赖

如果你想将所有远程依赖在pom中声明的依赖项同时打入在最终产物里的话,你需要在build.gradle中将embed的transitive值改为true,例如:

// the default value is false
// invalid for local aar dependency
configurations.embed.transitive = true
如果你将transitive的值改成了true,并且想忽略pom文件中的某一个依赖项,你可以添加exclude关键字,例如:

embed('com.facebook.fresco:fresco:1.11.0') {
? ? exclude(group:'com.facebook.soloader', module:'soloader')
}

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-10-15 11:54:32  更:2021-10-15 11:54:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 23:13:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码