.jar に存在し、ダウンロードする必要がある検証ライブラリについて考えてみましょう。それ以外の場合は、いくつかのタイプの製品フレーバーを提供できます。そして、この後、作業用の Build Flavors を選択するだけです。
productFlavors {
fastDebug {
applicationIdSuffix ".jar"
}
regularDegub {
applicationIdSuffix ".regular"
}
....
// Other Configuration
}
dependencies {
...
// Jar Debug by adding only Jar
fastDegubCompile fileTree(dir: 'libs', include: '*.jar')
fastDegubCompile 'com.android.support:support-v4:23.1.1'
...
// Regular Debug with downloading all libraries
// Including only specific from project files
regularDegubCompile 'com.squareup.picasso:picasso:2.5.2'
regularDegubCompile 'com.android.support:support-v4:23.1.1'
regularDegubCompile files('libs/specific1.jar', 'libs/specific2.jar')
}
| | 更新 |
したがって、いくつかの回避策の後、Gradleがライブラリをキャッシュに収集し、ソースを表示できることがわかりました。しかし、私はまだプロジェクト構成で正しい検証ライブラリの方法を探しています。
今のところ、Gradle キャッシュの場所からファイルを収集するためのスクリプトを作成しました。そして、ビルドフレーバーを使用できる新しい場所にそれらをコピーします。これは非常に高速に動作しますが (200 個のライブラリで 7 秒未満)、まだ改善が必要です (上記を参照)。
時間がない場合は、次の更新のために、ソリューションを拡張するために自由に記入してください. 理解に感謝。
// Task for calling from Gradle Scripts
// -----------------------------------
task gatheringJarFilesTask << {
println("Gathering Jars Start...")
gatheringJarFiles(gradleCacheLocation, foundedJarsList)
println("------------------------------")
println("Gathering Jars End! Start copying!")
copyFiles(projectJarsLocation, foundedJarsList)
}
// Constants, which might be optimized too
// -----------------------------------
def gradleCacheLocation = '/home/kasyangenka/.gradle/caches/modules-2/files-2.1'
def projectJarsLocation = '/home/kasyangenka/Projects/GradleScriptsTest/app/libs'
List<String> foundedJarsList = []
// Main Script Methods
// -----------------------------------
def gatheringJarFiles(baseDirPath, gatheredList) {
new File(baseDirPath).eachFile {file ->
println("-> Current file: " + file.getName())
if (file.isDirectory()) {
gatheringJarFiles(file.getAbsolutePath(), gatheredList)
}
def containsLib = (file.getName().contains(".jar")
|| file.getName().contains(".aar"));
if (containsLib) {
println("->> Adding Jar file: " + file.getAbsolutePath())
gatheredList.add(file.getAbsolutePath())
}
}
}
def copyFiles (destiny, List sourceList) {
sourceList.each {filePath ->
copy {
from filePath
into destiny
}
}
}