先简单介绍一下前景,由于我们的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:+" ,
(有些比如像ReactPackageReadableMap都会有变更)你会发现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 同一版本覆盖发布即可。

 

以上为个人的一些记录,如有帮助,记得点赞三连~

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐