如何在GitHub私有仓库发布非开源Android SDK库,实现用户免凭证引用
方案1:GitHub Packages + 只读部署令牌(推荐)
该方案可让终端用户仅需复制仓库配置即可引入库A,自动拉取依赖库B,无需手动输入密码。
步骤1:创建只读部署令牌
在GitHub为公司组织生成Fine-grained Personal Access Token(或Deploy Token),仅授予read:packages权限,确保令牌仅能读取私有包,无修改权限。
步骤2:发布A、B到GitHub Packages
在A、B库模块的build.gradle.kts(或build.gradle)中配置Maven发布逻辑:
plugins { id 'com.android.library' id 'maven-publish' } android { // 你的库基础配置(编译版本、签名等) } publishing { publications { release(MavenPublication) { from components.release groupId = "com.yourcompany.sdk" artifactId = "library-a" // B库替换为library-b version = "1.0.0" } } repositories { maven { name = "GitHubPackages" url = uri("https://maven.pkg.github.com/your-company/your-repo") credentials { username = System.getenv("GITHUB_USERNAME") password = System.getenv("GITHUB_TOKEN") // 填入你创建的只读令牌 } } } }
执行命令./gradlew publishReleasePublicationToGitHubPackagesRepository完成发布,Gradle会自动在A的pom文件中生成对B的依赖声明。
步骤3:终端用户配置
让用户在项目settings.gradle.kts(或settings.gradle)中添加仓库配置,直接嵌入只读令牌:
dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { google() mavenCentral() maven { url = uri("https://your-read-only-token@maven.pkg.github.com/your-company/your-repo") } } }
之后用户只需在app/build.gradle.kts中引入A即可,B会自动被拉取:
dependencies { implementation("com.yourcompany.sdk:library-a:1.0.0") }
方案2:GitHub Releases + Maven规范目录
若不想使用GitHub Packages,可将A、B打包为完整Maven包(含aar、pom及元数据文件),上传到GitHub Release后配置为Maven仓库。
步骤1:打包Maven格式包
执行./gradlew publishToMavenLocal,在本地Maven仓库(~/.m2/repository/com/yourcompany/sdk/)中找到A、B的完整目录结构,包含aar、pom、校验文件等。
步骤2:上传到GitHub Release
将A、B的Maven目录完整上传到GitHub Release的Assets中,确保目录层级符合规范:
com/ yourcompany/ sdk/ library-a/ 1.0.0/ library-a-1.0.0.aar library-a-1.0.0.pom ...(其他元数据文件) library-b/ 1.0.0/ library-b-1.0.0.aar library-b-1.0.0.pom ...
步骤3:终端用户配置
让用户在settings.gradle.kts中添加Release作为Maven仓库:
dependencyResolutionManagement { repositories { maven { url = uri("https://github.com/your-company/your-sdk-repo/releases/download/v1.0.0/") // 确保URL能访问到com/yourcompany/sdk的根层级 } } }
同样,用户仅需引入A即可自动获取依赖B。
关键注意事项
- 确保A的pom文件正确声明对B的依赖,Gradle发布时会根据模块的
implementation依赖自动生成该声明。 - 若使用私有Release,需将只读令牌嵌入仓库URL,避免用户手动输入凭证;同时严格控制令牌权限,降低泄露风险。
- 禁止单独上传AAR文件,必须包含pom文件才能实现依赖传递逻辑。
内容的提问来源于stack exchange,提问作者jsdev

