导航:首页 > 文件处理 > aar解压后重新打成Aar

aar解压后重新打成Aar

发布时间:2023-05-28 02:08:06

A. 排除aar/jar中冗余或者冲突包、类

引入aar的冲突无所不在,通过远程依赖maven的包可以通过 exclude 关键字搭配 mole 和 group 去除某个组,没办法去除具体的类。

那么如果是单独的aar包,想要排除aar下classes.jar包里的某个单独的包或者类怎么办?

需要接入的jar包已经带了腾讯X5核心,当前依赖的已经包含X5核心,冲突又该如何解决呢?

当前的gradle脚本(项键慧目链接: https://github.com/luohongxfb/ExcludeAar )可以解决。

如excludelib/libs/exampleAAR.aar,左边是未去除的包结构,右边是去除 com. 之后的:

如excludelib/libs/exampleJAR.jar:

(1)将需要排除的aar或者jar包放在excludelib/libs下。

(2)更改excludelib/build.gradle

(3)设置排除规则 如果您需要排除aar,那么请更改excludelib/excludeAar.gradle;如果您需要排除jar,那么请更改excludelib/excludeJar.gradle

(4)运行排橡颂除任务

排除后生成的aar在excludelib/build/excludeaar下,排除后生成的jar位于excludelib/build/excludejar。

然后就可以愉快的使用啦~

aar排除步骤:

1、获取到需要排除的原始AAR包

2、解压AAR包(zipTree配合Task Copy)

3、解压AAR包中的class.jar(zipTree配合Task Copy)

4、按照排除规则对解压的class.jar重新打包(Task Jar)

5、重新打包成AAR包(Task Zip)

jar排除步骤

1、获取到需要排除的原始jar包

2、解压jar包(zipTree配合Task Copy)

3、按照排除规则对解压的jar重新打包(Task Jar)

主要原理:zipTree配合Copy,实现解压。

Copy Task官方讲解: https://docs.gradle.org/current/dsl/org.gradle.api.tasks.Copy.html

ziptree源码主要解析:创建一个新的file tree包含原来zip的内容,可以配合Copy实现梁亮郑解压。

这个步骤就是把之前解压的classes.jar文件,按照排除规则用Task Jar重新打包成jar文件。

Task Jar官方讲解: https://docs.gradle.org/current/dsl/org.gradle.jvm.tasks.Jar.html

对classes.jar处理完成的aar重打包,主要用到Task Zip。

Task Zip官方讲解: https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Zip.html

原文链接

感谢Siy: https://blog.csdn.net/_34012226/article/details/80104771

B. android studio 怎么打aar包

1.aar包是android studio下打包android工程中src、res、lib后生成的aar文件,aar包导入其他android studio 工程后,其他工程可以方便引用源码和资源文件

2.生成aar包步骤:

①.用android studio打开一个工程,然后新建一个Mole,新建Mole时候选择Android Library,后面按新建普通工程操作

3.其他androidstudio工程引用aar包

①.将aar包复制到lib目录下

②.配置build.gradle文件:

加入

repositories {
flatDir {
dirs 'libs'
}

compile(name:'camerascan-1.0', ext:'aar')

完整的配置文件:

详细教程详细教程

C. 打包成aar的工程有第三方jar包,生成aar后,里面的jar无法引用,怎么解决

首先说明我使用的android studio
版本是0.4.因为现在android studio的bug还不较多,所以你的版本能不能正常使用我就不敢说了。

如果你只是单纯的想使用actionbarsherlock的话,引用是十分简单的dependencies {
// compile fileTree(dir: 'libs', include: '*.aar')
compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
compile 'com.android.support:support-v4:18.0.+'
}


不过官方也出了一个兼容包,也非常的不错。so 没必要非得要使用actionbarsherlock。

然后重新编译一下项目就行了。(ps
引用第三方jar包,请看我的第一行注释,你只要新建一个libs的文件夹,然后把想要jar包复制到文件夹下,接着把注释那句复制到build文件中,修改一下(*.aar
-> *.jar)就可以了)。

但是我们要是使用本地的自定义的aar文件,请看我的实现过程,如果你有更好的请转告小弟共同进步
第一步 :生成aar文件

我的方法是通过maven-android-plugin来生成的,如果你使用过actionbarsherlock以前的版本的话,这个工具应该不陌生,如果你连maven
都不知道的话,建议好好学习一下maven,虽然现在gradle很火 ,但是我还是最喜欢maven。

关于具体生成步骤不久不详细说了,文章最后贴出几个网址供大家学习使用,放心我按顺序给你们,只要一步一步的来绝对能成功

1 把你的maven版本提升到3.1.1
2 去github上clone下来
maven-android-sdk-deployer 这个项目
3 通过maven-android-plugin生成一个android项目



mvn archetype:generate \
-DarchetypeArtifactId=android-quickstart \
-DarchetypeGroupId=de.akquinet.android.archetypes \
-DarchetypeVersion=1.0.11 \
-DgroupId=your.company \
-DartifactId=my-android-application

D. 将aar打包进so

前段时间有个项目,需要用c++开发我们自己的sdk,另外,我们的sdk又依赖于另一个aar包,当时想当然的以为生成so的时候会一起把aar打包进去,结果发现调用so的时候,aar里面的类根本找不到,说明aar 并没有一培锋困起打包进so

后来想了下,既然将aar打包进so没法实现,不如把我自己的so库,还有第三方的aar再重新打一次,最终打成aar包,这样就方便多了。步骤如下:

先在原来测试我们自己so库的测试工程上新建一个moudle:配念

下面将上图中的classes.jar还有lib下面的jar包拷贝到新建的mole下的libs目录,并将剩余的jni,AndroidManifest.xml等文件分别拷贝合并到对应的目录内

5.下面就是要把我们aar拆出来的零件以及我们自己的so库基橘重新打包成aar:

工程右侧,找到Gradle,点开后找到我们上面新建的mole,点击Tasks->build->assemble
等构建完成后,aar就生成了,生成目录在我们的moudle目录下面的:
build->outputs->aar下面

okay

E. 升级androidx 报错bug

1、在项目的 gradle.properties 文件中配置如下

2、引入

https://blog.csdn.net/qq_24382363/article/details/87285438

这时候会提示上述错误,宏罩含因为sdk采用了更加严格的aapt编译,正确的用法如下

如果字符串含有%,而不需要格式化可以有三种蔽笑方法解决

这个错误是引闷族用的两个包中的属性名称冲突导致
忽略已存在的框架

jar 包

aar

那 直接 去aar 中删除itemIconTint

解压aar文件到tmpDir目录下

修改后 将tmpDir重新打包成一个新的aar

https://www.jianshu.com/p/f0a267551493

F. Android:多aar打包

我使用的是网上这个 https://github.com/kezong/fat-aar-android
这个github库。

具体配置是再跟gradle中添加:
classpath 'com.kezong:fat-aar:1.2.7'

在需要打包的地方添加:
apply plugin: 'com.kezong.fat-aar'

然后添加需要合并的包,可以是远程包,本地aar,本地project。可以说很完整了。
例如:

怎么看远程依赖呢?下面这里就可以看

最后生成的aar包如下,jni和jar包都有了

反编译看看classes.jar看看,本地项目的类都在这里面了。

后面得看看是怎么打包起来的了,不然后续作者不维护了就蛋疼了。

G. 终极方案:快速解决Android项目依赖冲突

冲突类型无非是类、jar包重复,比如:

在此不多做介绍了,直接上解决方案

1、配置显示冲突依赖详细信息

2、编译,查看控制台详细输出

1、project依赖排除示例

2、远程依赖排除示例

参考链接:如何exclude aar包中的某个jar包

核心:

① 解压aar文件到tmpDir目录下

② 找到classes.jar包,用压缩工具打开,删除目标文件

③ 将tmpDir重新打包成一个新的aar

H. AndroidStudio 打包 Android项目 成 aar

· 打包 Android项目成 aar,有两种方式:

接下来分别列举说明

1.1 点击 File —> New —> New Mole... ,选择 “Android Library” , 最后点击 “Finish” 创建 mole Library。

1.2 编写需要打包成 aar 的库乱碧文件,例如:我测试写团态的 TestUtils 类

1.4 点击 assemble 之后编译完成,bulid->outputs->aar文件夹下会生成“正式”和“测试”aar包。

2.1 修改需要打包的mole项目下的 build.gradle 文件,然后点击 “Sync Now”同步下

2.2 修改需要打包的mole项目下的 AndroidManifest.xml 清单文件

2.4 点击 assemble 之后编译完成,bulid->outputs->aar文件夹下会生成“正式”和“测试”aar包塌陪源

I. 如何将android studio 打包aar

将 Mole 配置为 library 后,构建输出一个 aar 文件,根据渠道和 BuildType 的不同,在相应的目录下可以找到。比如对 BuildType 为 debug 的配置,输出为:[MoleName]/build/outputs/aar/[MoleName]-debug.aar。一份 aar 文件其实就是一份 zip 包,和 jar 不同橡祥的是,它将一些资源文件、第三方库文件、so 文件等等都打包在内,而代码文件编译后压缩在在 classes.jar 中。比如:

3、导入 aar 的方式引用
这种方式比较简单,打开 Project Structure,添加一个新 Mole,然后选择 Import *.JAR or *.AAR Package 的方式导入:

导入后,在你的工程下面,会生成一个文件夹,里面是 aar 文件以及 Android Studio 的配置文梁物搏件。

接着可以蚂衫在 gradle 中配置依赖了,其他 Mole 可以引用这个 Mole 了,依赖方式使用compile project 的方式即可。
缺点:被依赖的 aar 无法 F3 跟进去,无法看到资源文件内容以及目录层级等等缺陷。
4、使用配置依赖的方式引用
gradle 其实还有另一种依赖可以引用 aar:
compile(name: 'xxx', ext: 'aar')。
首先需要将 aar 文件放入引用 Mole 的 libs 目录下,和一般的 jar 文件类似。然后在 gradle 配置文件中把 libs 目录加入依赖:
repositories {
flatDir {
dirs 'libs'
}
}

接着在 gradle 的依赖配置中加入 compile(name: 'xxx', ext: 'aar') 这一句,依赖即可关联完毕。构建一下工程,在 Mole 的 build/intermediates/exploded-aar 目录下,可以看到有一些临时文件生成:

看起来完全是引用 aar 的解压版本。Android Studio 安装反编译插件后,可以通过 F3 跟进到 class 文件里面,如果你有被依赖 Mole 的源代码的话,还可以 Attach Source 关联源代码查看。另外,可以很方便的查看 aar 中的资源文件。
另外,这种依赖方式更新 aar 后,生成的临时文件也会随之变动,不用担心改动不同步的问题。
5、总结
综上,介绍了 aar 文件的生成方式,以及两种 aar 依赖的方式,经过实战检验,第二种通过配置 gradle 依赖的方式简单易用,只需一行代码即可搞定。

阅读全文

与aar解压后重新打成Aar相关的资料

热点内容
用什么app校对试卷 浏览:101
基于单片机的光控路灯 浏览:33
为什么说安卓平板适配的软件少 浏览:676
三国志下载pdf 浏览:683
为什么单片机c语言 浏览:423
算法一定有一个或多个输入 浏览:242
浪潮服务器贵州销售云主机 浏览:844
amdlinux显卡安装 浏览:570
泰海科技云服务器如何卸载 浏览:124
有密码打开excel加密 浏览:822
java生成重复字符 浏览:282
串口服务器有什么用 浏览:330
linux安装red5 浏览:295
单片机中断时入口地址作用 浏览:150
程序员的工作是重复性的吗 浏览:68
照片怎么转换成pdf 浏览:134
女生学编程好吗 浏览:240
目前绝地求生怎么看服务器地址大全 浏览:827
论人类不平等的起源pdf 浏览:438
压缩机螺杆加工 浏览:370