如何从我们的项目中排除 Android Studio 的内部 m2 存储库?



我的组织维护着自己的库和工具库,用于构建项目。 只有在组织的授权成员手动审核后,才会将新项目添加到此存储库中。 这意味着在我们的 android 项目中,我们从 gradle 构建脚本中删除了 Maven Central、JCenter 等。 组织维护的存储库是唯一用于在生成服务器上生成版本的存储库,并且应该是开发人员在自己的计算机上生成此项目的开发版本的唯一存储库。

但是,即使顶级构建脚本如下所示(注意:没有存储库):

buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
}
}
allprojects {
}
task clean(type: Delete) {
delete rootProject.buildDir
}

从 Android Studio 运行时,该项目仍然会构建,即使在从终端调用 gradlew 时失败(应该失败)。 显然,Android Studio 仍在引用自己的内置存储库(位于 [Android Install]/gradle/m2repository/)。 这会导致开发人员无意中破坏构建的不良情况,因为他们引用的项目不在组织的存储库中,而是在 Android Studio 的内置存储库中。 与其试图强制每个人在每次提交之前在终端中执行 gradle 构建,不如让 gradle 文件或项目设置告诉 Android Studio 不要包含任何未明确声明的存储库?

Android Studio 不使用android 插件的内置存储库(com.android.tools.build:gradle)。
Android Studio 会在首次下载后缓存此插件。
这意味着在您的情况下,第一次是从经过认证的存储库下载的。

您可以在此处找到此缓存:

file:/Applications/Android Studio.app/Contents/gradle/m2repository/com/android/tools/build/gradle/

此外,新的Android插件3.3.x仅位于Google maven存储库"https://maven.google.com"中,而不是jcenter中。

请记住,支持库、Firebase 和 google Play 服务库现在存储在同一个 google maven 存储库中,但旧版本离线存储在android_sdk/extras/中。

在这里您可以找到更多详细信息:
https://developer.android.com/studio/build/dependencies.html#google-maven

显然Android Studio仍然引用自己的内置 repository (位于 [Android Install]/gradle/m2repository/)

只需将这些文件替换为您自己的文件并编辑 maven 元数据.xml以包含正确的版本,即android-sdksextrasm2repositorycomandroidsupportsupport-v427.0.0通过添加<version>27.0.0</version>来编辑位于android-sdksextrasm2repositorycomandroidsupportsupport-v4中的maven-metadata.xml,以防未包含...等或制作脚本来自动化该过程。

如果组织的存储库像脱机 maven 存储库一样构建,那么它可能已经以这种方式组织。

我最近以这种方式添加了一些支持库,它无需使用 google()、jscenter()...等等,构建成功。

最新更新