一、简述
目前(Android/java) library
的主要发布仓库有 MavenCentral
和 jitpack
,我之前也对这两种仓库的发布流程做了详细介绍:
- 发布至 MavenCentral: https://juejin.cn/post/6953598441817636900
- 发布至 jitpack: https://juejin.cn/post/7040733114506674183#heading-8
但是,以上两种仓库,一般是用来免费发布开源 library
的,在提交库信息时,就会要求填写开源仓库的 url,如果我们不想开源源代码,仅仅只是希望把混淆后的 aar/jar
发布出去,那么上述两篇文章的流程就行不通了。
一般来说,这些平台也会提供付费服务,支持发布闭源的 library
,就比如 jitpack
付费之后,才可以导入私有的 GitHub 仓库(即 private repo
),从而构建并发布闭源的 library
,可这笔费用不低的,具体费用见官网说明:
jitpack
官网:https://jitpack.io/jitpack
付费价格:https://jitpack.io/private#subscribe
那有没有办法做到,既能免费又能闭源地发布 library
呢?Yes,这就是本篇要讲述的主要内容,灰常实用。
二、创建 library
温馨提示:这里只是举个简单的例子,熟悉 Android library 的朋友可以直接跳到下一节。
不管是 jar
还是 aar
,对于 Android 开发者来说,都是 library
,只是它们的 module 类型不同而已,简单来说,aar
是可以包含资源文件的 jar
,功能更加强大,这里以 aar
为例,创建一个 android library module:
为了新手容易理解,这里有几点简单说明一下:
com.android.library
:是 android library module 使用的 Gradle 插件,android {}
是该插件的配置项,最终产出的库文件是*.aar
。minifyEnabled
:是否开启混淆,默认为 false。proguard-rules.pro
:当前 library 编译时的混淆规则(minifyEnabled
为true
时生效),对生成最终的 aar 文件有影响。consumer-rules.pro
:携带在 aar 文件中的混淆规则,对 别人工程 编译时的混淆规则有影响。
注:java library module 使用的 Gradle 插件是
java-library
(apply plugin: 'java-library'
),没有android{}
配置项,如需混淆,则需要依赖其他 Gradle 插件,有需要的可以看我之前写的另一篇文章。
Android - 混淆 java-library 工程:https://juejin.cn/post/7174443107298050061
// build.gradle
apply plugin: 'com.android.library'android {...defaultConfig {...versionCode 1versionName "1.0"consumerProguardFiles "consumer-rules.pro"}buildTypes {release {minifyEnabled true // 开启混淆proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}
}dependencies {implementation 'androidx.appcompat:appcompat:1.2.0'implementation 'com.google.android.material:material:1.1.0'implementation 'com.luffykou:android-common-utils:1.1.3'
}
这里我创建的 library
功能非常简单,可以将一个图片 Bitmap 转成 Base64 字符串:
/*** GitLqr 工具类** @author LQR* @since 2024/6/22*/
public class GitLqrUtil {/*** bitmap 转 base64*/public static String bitmapToBase64(Bitmap bitmap) {return Base64<