-
2021-06-10 10:10:07
一、背景
在写基础库的时候需要打包一个arr提供给业务app的时候有两种方式,一种是将打包的aar直接发给业务开发人员通过本地依赖的方式引入或者将打包好的aar上传到maven私服上面业务app通过远程依赖的方式接入。但是有时候我们不想将自己的maven私服提供给别人就需要用本地依赖的方式,AS本地依赖打包出来的aar是不含有三方库的,业务app只依赖arr会报类找不到的错误。
二、解决方案
1.为什么aar不包含依赖代码
Google Android Studio 的负责人在 stackoverflow 上解释了 为什么 Android Studio 不能将多个依赖打包进一个 AAR 文件的原因,是因为将不同的library打包在一起,涉及到资源和配置文件智能合并,所以是个比较复杂的问题,同时也容易造成相同的依赖冲突。
2.app接入的时候引入三方库
apply plugin: 'kotlin-android' apply plugin: 'org.greenrobot.greendao' apply plugin: 'kotlin-kapt' android { //为引入aar包做准备 repositories { flatDir { dirs 'libs' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) //加入aar本地依赖包,例如: implementation (name: 'aarName', ext: 'aar') //aar依赖的三方库引入 implementation "com.squareup.retrofit2:converter-gson:2.4.0" implementation "com.google.android.material:material:1.1.0" ... }
3.使用fat-aar-android将第三方库代码编译到aar中
官方虽然不支持,但是开发者的能力是无限的,为了解决此问题,开发出来了一个 Gradle 插件 fat-aar-android, 这种方式是抛弃 Android Studio 自带的打包 AAR 的方法,而是自己编写一个生成 AAR 的脚本。
更多相关内容 -
Android studio 打包 —— aar 嵌套引用本地 aar 的打包
2021-01-03 16:56:41Android studio 的 module 打包一般会打包成 aar 的形式。如果 module 引用了一个本地的 aar,在打包的时候,这个被引用的 aar 是不会打包进去的,这种设计思想是比较好的,可以很好的避免包冲突的问题。例如 App ... -
Android Studio打包jar及aar包的方法
2020-08-27 04:47:35主要介绍了Android Studio打包jar及aar包的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
Android studio打包aar和jar文件
2021-06-07 12:43:341.新建一个Android工程,这个大家都会,步骤省略2.在刚刚新建的工程中新建一个module。依次步骤:点击 File ===》New ===》 New Module ===》 选择Android Library ===》点击nextandroid_library.png3.在新建的...1.新建一个Android工程,这个大家都会,步骤省略
2.在刚刚新建的工程中新建一个module。依次步骤:点击 File ===》New ===》 New Module ===》 选择Android Library ===》点击next
android_library.png
3.在新建的module中创建一个测试类,例如下图的类:
mylibrary.png
内容:
public class LogUtil {
public static String showLog() {
return "jar====>返回的数据";
}
}
4.在module的gradle.build中添加makeJar的相关配置代码,如下:
def _BASENAME = "TestJar";
def _VERSION = "_V1.0";
def _DestinationPath = "build"; //生成jar包的位置
def zipFile = file('build/intermediates/intermediate-jars/release/classes.jar'); //待打包文件位置
task deleteBuild(type:Delete){
delete _DestinationPath + _BASENAME + _VERSION + ".jar"
}
task makeJar(type:Jar){
from zipTree(zipFile)
from fileTree(dir:'src/main',includes:['assets/**']) //将assets目录打入jar包
baseName = _BASENAME + _VERSION
destinationDir = file(_DestinationPath)
}
makeJar.dependsOn(deleteBuild, build)
注意:上面的这段代码跟android{}这个节点是平级的
5.编译生成jar包的操作,有两种方法:
方法一:依次找到以下窗口,点击:
Gradle.png
找到新建的module的Gradle,打开节点,依次打开Task ===》 other ===》 双击makeJar,就会编译,最后在新建module的build目录下生成目标jar文件
image.png
image.png
image.png
而相应的aar文件则会同时生成:在下图目录中
image.png
aar文件和jar的内容区别:aar文件包含了res目录下的资源文件,一般的jar下不包含,经过特殊的配置之后也可以包含res资源
当然配置编译生成jar文件的另外两种配置可以参考下面的链接!
感谢支持!
-
一、 Android Studio打包 AAR
2021-06-07 04:23:46前言jar与aar差异*.jar:...*.aar:包含所有资源 ,class 以及 res 资源文件全部包含1、将app-build.gradle的apply plugin: ‘com.android.application’修改成apply plugin: ‘com.android.library’,注释applicat...前言
jar与aar差异
*.jar:只包含了class文件与清单文件 ,不包含资源文件,如图片等所有res中的文件。
*.aar:包含所有资源 ,class 以及 res 资源文件全部包含
1、将app-build.gradle的apply plugin: ‘com.android.application’修改成apply plugin: ‘com.android.library’,注释applicationId,使我们的框架作为library;
//apply plugin: 'com.android.application'
apply plugin: 'com.android.library'
defaultConfig {
// applicationId "com.sunsky.aardemo"
……
}
2、将manifest中launcher去掉:
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
3、导出 AAR
打开 Andriod Studio 右上角的Gradle projects,依次展开aardemo -> app -> Tasks -> build,双击 assemble
导出AAR
这时打开文件夹 app -> build -> outputs -> aar,将看到自动生成的app-debug.aar 和app-release.aar
AAR文件目录
4、Project引用 AAR(本地)
4.1将aar文件放入libs目录里面
4.2 在app目录下的build.gradle文件中添加以下内容
implementation(name: 'app-release', ext: 'aar')//app-release为文件名称
-
android studio打包aar遇到的坑
2020-12-21 15:57:56先简单介绍一下前景,由于我们的...2.如果我们的sdk内部不包括任何三方库,那么直接在android studio的gradle 自己module的Task-->build-->assemble 执行即可.。 然后就可以在build文件夹中的outputs文件中先简单介绍一下前景,由于我们的sdk内部实现不想暴露出来,所以考虑到打成jar包的形式
1.android sdk 一般分为两种:.jar(仅包含编译生成的class文件),
.aar(包含jar和资源文件),
这个根据个人的项目需求可以决定使用哪一种;
2.如果我们的sdk内部不包括任何三方库,那么直接在android studio的gradle 自己module的Task-->build-->assemble 执行即可.。
然后就可以在build文件夹中的outputs文件中找到自己的aar文件,解压之后就可以看到对应的jar文件;在新项目中如何引入aar或jar即可,不再赘述。
3.如果我们的sdk内部依赖了三方库,例如网络库OkHttp等,再使用以上方式,你会发现当去调用OkHttp的时候会报错,因为打成的本地aar文件是不包含三方的远程依赖库的,
官方解释:怕三方依赖库之间冲突,为了避免此种情况,所以本地打成的aar文件无法包含三方依赖库。
所以我们需要使用如下方式:3.1 打开 library 的 build.gradle 文件,在最外层加入如下内容:
apply plugin: 'maven' uploadArchives{ repositories.mavenDeployer{ //本地仓库用这个: 本地仓库路径, Windows 为(url:"file://E://***/***/***/") repository(url:"file:/home/xxx/desklop/mysdk/") //远程用这个:指定maven远程仓库url //repository(url: "http://localhost:8081/nexus/content/repositories/releases/") { //nexus登录默认用户名和密码 //authentication(userName: "admin", password: "admin") //} // 唯一标识 pom.groupId = "com.xxx" // 项目名称 pom.artifactId = "libA" // 版本号 pom.version = "1.0" } }
3.2 同样的,打开Android Studio右侧的Gradle面板,双击 module下面的 Tasks/upload/uploadArchives
3.3 build success之后,本地配置的仓库路径中将会生成aar相关的文件
3.4 在app module中引用aar,首先在根目录的 build.gradle 的仓库配置中加入本地仓库地址,然后在app module 的bulid.gradle 中添加 项目依赖
//maven引入 二选一 添加到 项目级的 build.gradle maven{ url 'file:/home/xxx/desklop/mysdk/' } // 远程仓库一般不需要再添加账户密码,但如果是需要验证账户和密码,则要添加credentials 及username、password 一起填入,否则会出现无法下载到sdk的情况 //maven{ // url 'http://localhost:8081/nexus/content/repositories/releases/' // credentials { // username 'admin' // password 'admin' // } //} // 添加到 app 的 build.gradle,注意名字规则和上面配置本地仓库之间的关联 implementation 'com.xxx:libA:1.0'
如果是远程仓库则需要将本地的url替换为远程仓库url。
注意:1.需要将 build 配置中的 apply plugin: 'com.android.application' 替换成 apply plugin: 'com.android.library',并且去掉applicationId
2.有个细节,如果我们封装的aar需要给到react native使用,那么如果创建的module是直接在android原生项目中,它所依赖的 implementation "com.facebook.react:react-native:+" ,
(有些比如像ReactPackage、ReadableMap都会有变更)你会发现Project中 External Libraries的 com.facebook.react:react-native 是v0.2.1版本的,这是因为jcenter中的当前库就是这个版本的,
那么我们就需要换一个思路了,我们需要创建一个RN的项目,当前我使用的RN版本是 "react-native": "0.63.4"
当我们把RN项目 npm init 之后,再去原生中创建或者将之前已经封装好的module再引入,那么再打成aar时,这时我们的sdk依赖的react-native版本就已经是高版本的了。3.无法重复上传同一个版本的sdk ,build会出现:Return code is: 400, ReasonPhrase: Bad Request.
需要对maven库配置 设置允许release 同一版本覆盖发布即可。
以上为个人的一些记录,如有帮助,记得点赞三连~
-
Android studio打包 aar
2018-02-11 23:00:35以android studio 2.0正式版为例1.aar包是Android studio下打包android工程中src、res、lib后生成的aar文件,aar包导入其他android studio 工程后,其他工程可以方便引用源码和资源文件2.生成aar包步骤:2.1用... -
Android studio 打包aar包(含.so,.jar)以及使用方法
2021-03-05 08:54:01Android Library 2.左侧切换至project 3.将用到的jar包放至libs,右击->add as library 4.若要导入.so文件 a.在src/main下新建文件夹jnLibs(必须是这个名字) b.将so文件放入 5.要在aar里写调用方法和逻辑写... -
Android Studio 打包AAR和第三方静态库(示例代码)
2021-06-03 15:03:13需求现在有一个第三方库libstatic_add.a和对应的...方案创建Android Studio Library Project创建Project时,记得添加"Include C++ Support",如果没有安装CMake,LLDB和NDK的话,记得安装一下。项目创建好后,包括以... -
AndroidStudio打包aar文件
2018-11-02 15:17:11unity实际项目中,unity会调用...一 在androidStudio上创建一个新的android工程。 选择相应的androidSDK创建一个新的android工程。 二 添加Unity的class.jar 把Unity安装路径下的Editor\Data\PlaybackEngines\Andr... -
android studio 打包aar 与 引入aar包
2021-06-28 23:48:361、 aar包是Android studio 下打包Android工程中src、res、lib后生成的aar文件(与Jar包最大的不同是Jar包不包含资源文件,而aar包中是包含的) 2、打aar包基本不需要什么操作,按下图步骤操作即可: 二、android ... -
Android Studio 打包aar丢失远程依赖问题解决
2021-08-12 13:53:04打包aar -> 新建项目 -> 引入aar -> 编译运行 结果奔溃了!!! 原因是:class not found. 其实就是打包aar的时候远程依赖没有被添加到aar中。 所以把aar需要的远程依赖,添加一份到app的gradle文件就好... -
Android Studio 打包 aar
2020-11-11 23:12:01https://www.jianshu.com/p/baa7976cec09 -
AndroidStudio打包aar到JCenter仓库所使用的附件
2015-06-12 16:53:23AndroidStudio打包aar到JCenter仓库所使用的附件,我的博客地址为http://blog.csdn.net/ls1110924?viewmode=contents -
Android studio 打包aar和.jar文件
2018-04-29 17:05:52Android 开发中对aar包和.jar包的使用必不可少,下面来总结一下新建一个项目为MyaarTest的工程,在file–>new moudle–>选择Androidlibrary创建一个名称为aartest的library,在这里定义自己的代码;其中生成aar包的... -
android studio 打包aar
2019-07-19 10:59:54本文摘抄网址:Android Studio 打包 aar artifactory下载网址:https://jfrog.com/open-source/ android中自动上传aar的代码设置:Artifactory的搭建与使用简介 推荐查看maven的一些属性设置:maven3常用POM属性... -
使用android studio打包和导入aar
2022-01-12 13:47:481,使用android studio新建项目之后,新建一个moudel。 File - new -new module,选择android library,取名为myapplication 在myapplication下的目录,src/main/java 下新建Java文件StringUtils package ... -
Android studio 导入AAR文件,并打包AAR文件
2022-01-17 19:16:21首先创建一个android工程,之后新建文件夹,和app平级 任意取名,我这边随便取了个ss 把要导入的aar文件拖入,并在ss文件夹内新建build.gradle文件 build.gradle文件输入以下内容 configurations.maybeCreate(... -
AndroidStudio 如何使用aar详解
2021-01-04 08:51:11一. 简介 aar 是一个类似于 jar 的文件格式。但是他们之间是有区别的。...将一个AndroidStudio项目中的 Module 打包成 aar 其实很简单。 在每一个 Module 的目录下面都会有这样一个文件夹: build\outputs\ -
Android Studio打aar包
2021-05-19 16:32:21给客户一个静态aar包比给一堆so动态库和jar包好。 打包 在你写好的SDK项目基础上,以下操作:(这里写好的意思指运行没问题,so包平台兼容并正常,打的jar包也没问题) 使用 -
AndroidStudio导出aar到Unity使用。
2021-10-14 13:42:53新建空androidstudio工程 二。 新建module module名字随意,看个人喜好 三。在新建出的module中添加你的Unity的 classes.jar(获取途径:你自己的unity目录中【Editor\Data\PlaybackEngines\Android... -
Android studio 怎么打包成aar包和引用aar包
2021-06-04 13:30:06首先什么是aar格式看看官网的说明:The 'aar' bundle is the binary distribution of an Android Library Project.The file extension is .aar, and the maven artifact type should be aar as well, but the file ... -
Android studio 打包aar
2015-07-13 11:16:131.在库项目module下的build.gradle文件中添加以下代码 apply plugin: 'maven' group = 'com.tbc.android.test' version = '1.0.0' uploadArchives { repositories { mavenDeployer { po -
AndroidStudio生成aar包和如何使用aar包
2021-10-12 17:07:18aar包是Androidstudio下打包android工程中src、res、lib后生成的aar文件,aar包导入其他android studio 工程后,其他工程可以方便引用源码和资源文件 2、生成aar包步骤 2.1、用android studio打开一个工程,然后... -
Unity Android(四)使用AndroidStudio2020打包aar,提供Unity调用
2022-01-07 21:24:47AS打包AAR以及常见报错 ps:假如你已下载AS2020.3并且已经配置好了sdk以及jdk 1.新建Project File-New project-Empty Activity 2.以默认app模块作为Module,编译aar需要该模块 在该Module内我们需要修改... -
Android studio打包aar文件--在要打aar文件的工程里,嵌套有aar文件的打包方法。生成release.aar的方法
2018-07-31 10:32:17我们写了一个项目A,要打包成aar文件,给第三方公司使用,但是我们的项目A里,用的有另外公司的aar文件。也就是aar文件里嵌套aar文件。这种情况怎么打包呢? 把工程app下的build.gradle的 apply plugin: '... -
AndroidStudio中打包嵌套第三方aar的aar
2021-06-03 17:18:37之前写过一个如果打包嵌套第三方...解决这个问题,我使用的是fat-aar工具,参考博客图解使用fat-aar方式在AndroidStudio中打包嵌套第三方aar的aar,博客很详细。主要步骤如下: 1、Screen代码库app下的build.gradle中加 -
android studio 打包AAR并将AAR引入u3d
2017-09-19 10:59:10打包方法: 然后找到生成的AAR: 导入u3d时需要注意: 先用压缩软件打开aar文件,然后删除libs文件夹中的classes.jar 如果删除了下图中的classes.jar: 不删除classes.jar就会出现: Failed to Move ... -
Android Studio 打包AAR和第三方静态库
2018-05-16 15:47:00需求 现在有一个第三方库libstatic_add.a和对应的头文件static.h,...创建Android Studio Library Project 创建Project时,记得添加"Include C++ Support",如果没有安装CMake,LLDB和NDK的话,记得安装一下。 ...