android studio打包aar遇到的坑
先简单介绍一下前景,由于我们的sdk内部实现不想暴露出来,所以考虑到打成jar包的形式1.android sdk 一般分为两种:.jar(仅包含编译生成的class文件),.aar(包含jar和资源文件),这个根据个人的项目需求可以决定使用哪一种;2.如果我们的sdk内部不包括任何三方库,那么直接在android studio的gradle 自己module的Task-->build--&g
先简单介绍一下前景,由于我们的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 同一版本覆盖发布即可。
以上为个人的一些记录,如有帮助,记得点赞三连~
更多推荐
所有评论(0)