Android Studio/gradle derlememde, uygulama simgemi otomatik olarak oluşturmaya çalışıyorum. Simge görüntüsünü (PNG) üreten görev, doğru zamanda çalıştırılıyor, ancak görüntü tüketen görev çalışmaya başlamadan önce siliniyor.Ara sıra dosyalarımın daha sonra görevleri tüketmeden önce silmeyi nasıl engellerim?
Bu benim sorunu göstermektedir benim app/build.gradle
eklediğiniz ne basitleştirilmiş bir versiyonudur: Ben ./gradlew clean
ve sonra ./gradlew assembleDebug
çalıştırırsanız
task createIcon(type:Exec) {
def outdir =
new File("$buildDir/intermediates/res/merged/debug/drawable-ldpi/")
outputs.dir(outdir)
if (!outdir.exists()) {
outdir.mkdirs()
}
def svg = 'src/images/ic_launcher.svg'
inputs.source(new File(svg))
def png = new File(outdir, "ic_launcher.png")
outputs.file(png)
commandLine "$workingDir/svgToPng.sh", svg, png
}
tasks.whenTaskAdded{ t ->
if(t.name.equals("generateDebugAssets")){
t.dependsOn createIcon
}
}
, görebildiğim benim createIcon
görevin çıktı dosyası, "app/build/intermediates/res/merged/debug/drawable-ldpi/ic_launcher.png" oluşturuldu ve daha sonra çok geçmeden silindi. Ben gradlew aşağıdaki çıktıyı almak:
:app:preBuild UP-TO-DATE
:app:preDebugBuild UP-TO-DATE
...
Bitmap saved as: /home/laurence/src/foo/app/build/intermediates/res/merged/debug/drawable-ldpi/ic_launcher.png
:app:generateDebugAssets
:app:mergeDebugAssets
:app:generateDebugResValues UP-TO-DATE
:app:generateDebugResources
:app:mergeDebugResources
:app:processDebugManifest
:app:processDebugResources
/home/laurence/src/foo/app/build/intermediates/manifests/full/debug/AndroidManifest.xml:13:23-44 : AAPT: No resource found that matches the given name (at 'icon' with value '@drawable/ic_launcher').
:app:processDebugResources FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:processDebugResources'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/home/laurence/.local/android-sdks/build-tools/23.0.2/aapt'' finished with non-zero exit value 1
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Sen aapt
iddialar o @drawable/ic_launcher
bulamadığından görev :app:processDebugResources
başarısız olduğunu görebilirsiniz (içinde android:icon
değerini benim AndroidManifest.xml
) yerine karşılık gelmelidir nerede PNG'yi üretiyorum.
PNG'nin yalnızca konsol çıktısında "Bitmap olarak kaydedildi" satırından değil, yapı sırasında hedef dizini izleyerek oluşturulduğunu da doğruladım. Dosya varolmaya başlar ve daha sonra bir an ortadan kaybolur.
Hatta bundan daha da kötüsü, ./gradlew assembleDebug
'u ikinci kez çalıştırırsam, yapı başarılı olur!
Oluşturulmuş PNG'nin silinmesini nasıl engellerim ve yapmamı iki kez çalıştırmaya gerek kalmadan processDebugResources
'un görmesini sağlarım?
Proje nesnesi yerine [dosya] (https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html#file (java.lang.Object)) kolaylık yöntemlerini tercih etmelisiniz Bir dosya nesnesini kendiliğinden açabilirsiniz. Örneğin, from 'svgDir = dosya (" $ buildDir/generated/fromSvg/")' yerine 'from defsvgDir = yeni dosya (buildDir," created/fromSvg/")' –
@LanceJava Teşekkürler. Ben (ve groovy) kürek için oldukça yeni ve henüz en iyi uygulamalara aşina değilim. Cevabınızı önerinize göre güncelledim. –