Android项目实战(三十三):AS下获取获取依赖三方的jar文件、aar 转 jar

本文介绍如何在Android Studio中获取依赖的第三方jar文件。包括从ExternalLibraries中查找、通过LibraryProperties找到本地路径、区分resource.jar与.jar文件以及如何从.aar文件中提取.jar文件。
原文: Android项目实战(三十三):AS下获取获取依赖三方的jar文件、aar 转 jar

使用 Android studio 开发项目中,有几种引用三方代码的方式:jar 包 ,类库 ,gradle.build 的compile依赖。

大家会发现github上不少的项目只提供compile依赖的方式,但是当用到jar包使用过的情况 且 该项目不提供jar包的时候怎么办?

其实Android Studio 在compile方式 依赖三方项目的时候 就已经在本地有了该项目的jar包了,我们只需要去本地找到那个jar包就可以了。

查找方法:

 

一、项目大纲路径下的:External Libraries ,会发现很多我们当前项目中用的三方。

 

二、选择其中的一个右键 :选中 Library Properties... 

 

三、 可以看到该三方项目的jar包在本地中的路径位置,只需要在该路径下找到该jar包即可

 

 

四、可以在该路径下找到jar文件了。

 五、resource.jar 与 jar

大家实际操作起来会发现,有的三方我们能找到它的resource.jar  和 jar两种jar包,而有的三方我们只能找到resource.jar包 而没有jar包

resource.jar 文件 和 .jar 文件的区别:

实际上 resource.jar 包 叫做 资源jar包,我们解压缩会发现其中的文件都是.java 类型的 。 而去 解压缩.jar 文件 会发现其中的文件都是 .class类型的。

 

而只有内部是.class文件的 jar包才是我们真正可以使用的,而resouce.jar 资源jar包 不能使用,否则会报ClassNotFindException 异常 。

 

那么按上述步骤找到的三方只有resource.jar 包的情况下  怎么获取 jar包呢。

这里再了解一下 .aar 文件 和 .jar 文件的区别。

*.jar:只包含了class文件与清单文件,不包含资源文件,如图片等所有res中的文件。

*.aar:包含所有资源,class以及res资源文件全部包含

如果你只是一个简单的类库那么使用生成的*.jar文件即可;如果你的是一个UI库,包含一些自己写的控件布局文件以及字体等资源文件那么就只能使用*.aar文件。

 

按上述 一 --- 四的步骤,其实我们会发现 

 

除了 .jar 文件 和 .resource.jar 文件之外,还有一个 .aar 文件

如果有 .aar 文件 ,就可以从.aar 文件中获取到我们需要的 .jar文件 

步骤如下:

1、找到一个 .aar 文件

2、修改文件格式为 .zip 关于解压

 

3、解压缩这个.zip文件 

 

4、其中的 classes.jar 就是我们需要的 该三方的 .jar 包了  重命名成自己需要的名字即可。

 

  

<think>我们正在处理一个关于在Android项目中编译AAR包时包含libs目录下AAR资源的问题,并且要求不使用第三方工具。根据引用内容,我们可以总结出以下几点关键信息: 1. 在项目的build.gradle文件中,可以通过`flatDir`来指定本地AAR文件的目录(如引用[1]和引用[4]所示)。 2. 如果项目中的library module依赖了libs目录下的AAR,那么在app module中需要将library module的libs目录也配置进去(引用[2])。 3. 当library module生成AAR时,它依赖的其他module或AAR也需要被包含进去(引用[2])。 4. 直接使用`compile fileTree(include: ['*.jar'], dir: 'libs')`只能包含JAR,不能包含AAR(引用[5]),因此需要单独指定AAR文件。 根据以上信息,我们可以采取以下步骤: **步骤1:在library module中配置本地AAR依赖** 假设我们有一个library module(例如名为`mylibrary`),它需要依赖libs目录下的AAR文件。 1. 在library module的根目录下创建`libs`文件夹,并将需要依赖AAR文件放入其中。 2. 在library module的`build.gradle`文件中,添加以下内容: ```groovy repositories { flatDir { dirs 'libs' // 指定libs目录为本地仓库 } } dependencies { // 其他依赖... implementation fileTree(include: ['*.jar'], dir: 'libs') // 包含jar // 单独指定每个aar文件,因为fileTree默认不支持aar implementation(name: 'library-release', ext: 'aar') // 例如,名为library-release.aar文件 } ``` 注意:`fileTree`默认只包含jar文件,所以我们需要单独为每个aar文件添加依赖,使用`name`(不带扩展名的文件名)和`ext`(扩展名)指定。 **步骤2:在app module中配置依赖** 如果app module依赖了该library module,那么需要在app module的`build.gradle`中配置: 1. 确保app module能够访问到library module的libs目录中的AAR文件。因为当library module打包成AAR时,其本地依赖(libs下的AAR)不会自动打包进去(AAR文件本身不包含嵌套的AAR),所以我们需要在app module中再次声明这些依赖。 2. 在app module的`build.gradle`中,添加以下内容: ```groovy repositories { flatDir { // 添加app module的libs目录 dirs 'libs' // 添加library module的libs目录,这样app module就可以找到library所依赖aar dirs project(':mylibrary').file('libs') } } dependencies { implementation project(':mylibrary') // 依赖library module // 同时,需要再次声明library module所依赖aar(因为传递依赖不会自动处理本地aar) implementation(name: 'library-release', ext: 'aar') } ``` 这样,app module在编译时就能找到library module所依赖AAR文件。 **步骤3:处理传递依赖问题** 需要注意的是,本地AAR依赖不会像远程依赖那样自动传递。因此,如果library module依赖AAR,那么所有使用该library module的module(如app module)都必须显式声明这些AAR依赖。 **总结** 不使用第三方工具,我们通过配置多个`flatDir`仓库(包括library module的libs目录)并显式声明每个AAR依赖,来实现包含libs目录下的AAR资源。虽然这种方法需要重复声明依赖(在library module和app module中都要声明),但它是Android官方支持的方式。 另外,如果library module很多,重复声明可能会很繁琐。我们可以考虑将共同的AAR依赖提取到项目根目录的libs中,然后在所有module中统一使用同一个libs目录。 **相关问题** 1. 如何在Android项目中同时使用多个本地AAR文件? 2. 为什么在library module中使用了flatDir,但在app module中仍然找不到AAR依赖? 3. 如何避免在多个module中重复声明相同的AAR依赖? 4. AAR文件JAR文件依赖方式上有什么区别?</think>### 在 Android 项目中包含 libs 目录 AAR 资源的配置方法 根据引用内容[^1][^2][^3],要在不使用第三方工具的情况下编译 AAR 包时包含 libs 目录下的 AAR 资源,需按以下步骤配置: #### 1. **配置仓库路径** 在项目的 `build.gradle` 文件中声明 `flatDir` 仓库,指向 libs 目录: ```groovy allprojects { repositories { google() mavenCentral() // 关键配置:声明本地 libs 目录为仓库 flatDir { dirs 'libs' } } } ``` #### 2. **添加 AAR 依赖** 在模块级 `build.gradle` 中声明依赖: ```groovy dependencies { // 包含所有 JAR 文件 implementation fileTree(include: ['*.jar'], dir: 'libs') // 关键配置:显式添加 AAR 依赖 implementation(name: 'your-library-name', ext: 'aar') // 替换为实际文件名 } ``` #### 3. **处理嵌套依赖** 如果当前模块依赖的其他库也包含 AAR(引用[^2]): ```groovy dependencies { // 声明主库依赖 implementation project(':your-library-module') // 同时添加该库的 AAR 依赖 implementation(name: 'nested-library', ext: 'aar') // 嵌套库的 AAR } ``` #### 4. **目录结构示例 ``` app/ ├── libs/ │ ├── your-library-name.aar // 主 AAR │ └── nested-library.aar // 嵌套 AAR └── build.gradle // 配置依赖 ``` #### 注意事项: 1. **AAR 特性**:AAR 文件包含代码、资源和清单(引用[^3]) 2. **传递依赖**:Android 默认不传递本地 AAR 依赖,需手动添加所有层级(引用[^2]) 3. **命名规范**:`name` 参数使用文件名**不带扩展名**的部分 4. **同步问题**:修改后务必点击 "Sync Project with Gradle Files" > 此方案通过官方支持的 `flatDir` 实现本地 AAR 集成,避免使用第三方工具(引用[^1][^4][^5])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值