Я кэшировал загрузки, создав урезанную, взломанную версию сценария build.gradle
, и использовал его для запуска загрузок из моего файла Dockerfile. Таким образом, каталог с моим Dockerfile также содержал упаковщик gradle (скрипт gradlew и связанный каталог gradle с .jar в нем), мой минимальный файл build.gradle, а также минимальный фиктивный файл AndroidManifest.xml, который был необходим для удовлетворения плагина android .
(Это не идеальная ИМО, поэтому я бы хотел услышать, есть ли у кого-нибудь способ получше.)
Из моего Dockerfile я запускаю загрузку так:
# The following steps use some dummy build files to trigger gradle to download depencies,
# so that they will be available in the image.
COPY . /tmp/triggerGradleDownloads/
RUN cd /tmp/triggerGradleDownloads
&& ./gradlew --no-daemon --refresh-dependencies androidDependencies lint
&& rm -rf /tmp/triggerGradleDownloads
Содержимое ./src/main/AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<!-- we just need a package name in this file to satisfy the android plugin -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.dummy">
</manifest>
Содержимое моего файла build.gradle:
// This is a cut-down and hacked-together build script used only to trigger download of dependencies.
// From your Dockerfile, run "./gradlew --no-daemon --refresh-dependencies androidDependencies lint".
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.4'
}
}
allprojects {
repositories {
google()
jcenter()
}
}
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
minSdkVersion 15
targetSdkVersion 28
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0-rc02'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:design:28.0.0-rc02'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}