Android SDK 开发

无论是否开源,只要是编写一个库提供给其它的项目去使用,就可以统称为 SDK 开发。

SDK 开发和传统的应用程序开发会有一些不同之处。

  • 首先 ,SDK 开发界面相关的工作会相对比较少,许多库甚至是完全没有界面的,因此 SDK 开发多数情况下是以实现功能逻辑为主的。
  • 其次,产品的形式不同。应用程序开发的最终产品可能是一个可安装的 APK 文件,而 SDK 开发的最终产品通常是一些库文件,甚至只有一个库的引用地址。
  • 最后,面向的用户群体不同。SDK 开发面向的用户群体从来都不是普通用户,而是其他开发者。因此如何让我们编写的库可以保持稳定的工作,同时还能提供简单方便的接口给其它开发者去调用,这是我们应该优先考虑的事情。

由于 app 模块是一个专门用于开发应用程序的模块,所以会新建一个模块,并在此模块中实现具体的功能。

在最顶层的目录右击 -> New -> Module -> 选择 Android Library。

查看 Library 模块中的 build.gradle 文件:了解一下应用程序模块和库模块的主要区别。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// com.android.library 表示这是一个库模块。而 app 模块内的 com.android.application 表示是一个应用程序模块。
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 29
buildToolsVersion "29.0.2"

defaultConfig {
// 这里是不可以配置 applicationId 属性的,而 app 模块必须配置,用于作为应用程序的唯一标识。
minSdkVersion 21
targetSdkVersion 29
versionCode 1
versionName "1.0"

testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles 'consumer-rules.pro'
}
...
}
...

当开发和测试工作完成后,接下来要做的事情就是将编写的库发布出去。

每一个 Android 项目工程最外层目录下的 build.gradle 文件中都会默认配有仓库,一般包括 google() 和 jcenter() 两个仓库,前者包含的主要是 Google 自家的扩展依赖库,后者包含的大多是一些第三方的开源库,如 Retrofit、Glide 等,所以,我们也要将自己的库发布到 jcenter 仓库才行。

首先,要注册一个 Bintray 账号,然后创建一个新的仓库,Bintray 是一个专门提供软件分发服务的网站,jcenter 仓库的发布与下载服务都是由它提供的。(提示,qq 邮箱或者 163 邮箱可能无法注册,会一直报红)

然后使用第三方插件 bintray-release 将代码发布到 jcenter 仓库中,在库模块的 build.gradle 文件尾部加入配置:这段配置就表示将插件引入模块中。

1
2
3
4
5
6
7
8
9
10
apply plugin: "com.novoda.bintray-release"

buildscript {
repositories {
jcenter()
}
dependencies{
classpath 'com.novoda:bintray-release:0.9.1'
}
}

然后再加入一段 publish 闭包来设置一些必要的参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
publish {
// 添加 Bintray 的用户名即可
userOrg = 'feiyeyuanye'
// 用于作为组织的唯一标识,通常填入公司的倒排域名,这里使用了项目的包名。
groupId = 'com.permissionx.jhrdev'
// 用于作为工程的唯一标识,这部分直接填入 permissionx 即可,另外要保证同一个 groupId 下不会存在两个相同的 artifactId。
artifactId = 'permissionx'
// 表示当前开源库的版本号
publishVersion = '1.0.0'
// 用于对开源库进行一些简单的描述
desc = 'Make Android runtime permission request easy'
// 填入 PermissionX 的版本库主页地址即可
website = 'https://github.com/feiyeyuanye/PermissionX'
}

然后打开 Android Studio 底部的 Terminal 窗口,添加命令:(Mac 系统)

./gradlew clean build bintrayUpload -PbintrayUser=USER -PbintrayKey=KEY -PdryRun=false

  • USER 部分要替换成 Bintray 的用户名
  • KEY 部分要替换成 Bintray API Key

执行命令之后,就可以将库上传到之前创建的 Maven 仓库中。然后将库发布到 jcenter 仓库中,并等待邮件提示。

注:更加详细的操作,请查看第一行代码。

后续的对库的更新,只需要升级 publish 闭包中的版本号即可,版本号通常以 3 位数字的格式居多。其中,如果是一些 bug 的修复或者是小功能的修改,应该升级最后一个版本号。而如果是一些比较大的功能或 API 变更,则应该升级中间一位版本号。只有涉及非常大的功能变更甚至是整体架构的改变时,才应该升级第一位版本号。

升级完版本号之后,只需要重新执行发布命令,就可以将新版的库发布到 jcenter 仓库中了。

一切都完成之后,最后将库的 GitHUb 主页进行更新,添加一些对此库的使用描述即可。

备注

参考资料

第一行代码(第3版)

传送门GitHub