You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitHub私有仓库发布非开源Android SDK库,实现用户免凭证引用

解决方案:私有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 00:01:20