Optimizasyonu test etme ve ilgili sorunları giderme
Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
Uygulama optimizasyonunu etkinleştirdikten sonra uygulamanızın istenen şekilde çalıştığını ve R8 yapılandırmasının beklediğiniz şekilde çalıştığını kontrol edin. Genel adımlar aşağıdaki gibidir:
Uygulamanızın kritik kullanıcı yolculuklarını (CUJ'ler) test edin: Örneğin, kullanıcıların oturum açabildiklerinden ve diğer önemli görevleri yapabildiklerinden emin olun.
Karşılaştırmaları kullanarak performans kazançlarını ölçün: Uygulama optimizasyonunu etkinleştirmeden önce ve sonra uygulamanızı karşılaştırın.
Sorun bulursanız R8, sorun gidermenize yardımcı olacak araçlar sağlar. R8 ile ilgili bir sorunu çözemiyorsanız hata bildirin.
Genel ipuçları
R8 ile ilgili sorunlar genellikle uygulamanıza özgüdür ancak hata ayıklamayı kolaylaştıracak bazı genel ipuçları aşağıda verilmiştir:
Karartmayı geçici olarak devre dışı bırakma: R8, optimizasyon sürecinin bir parçası olarak kodu karartır. Kod karartma genellikle hataların nedeni değildir ancak hata ayıklama işlemini zorlaştırır. Sorunlu kodu tespit etmenize yardımcı olması için ‑dontobfuscate ve ‑dontoptimize işaretlerini keep rules dosyasına ekleyin.
Yansımayı kontrol edin: Aşağıdaki gibi bir böyle bir öğe yok istisnasıyla karşılaşırsanız
Caused by: java.util.NoSuchElementException: Collection contains no element
matching the predicate in the stack trace ,
İstisna genellikle söz konusu alanın yansıma yoluyla kullanıldığı anlamına gelir ve bir saklama kuralı eklemeniz gerekir.
Betik kodunu inceleyin: R8 sorunlarının çoğu, APK Analiz Aracı gibi araçlarla yapabileceğiniz betik kodu incelemesini gerektirir.
Hangi kuralların uygulandığını kontrol etme
Projenizi oluştururken R8'in uyguladığı tüm kuralların tam raporunu almak için uygulamanızın modül proguard‑rules.pro dosyasına aşağıdakileri ekleyin:
İstediğiniz yolu ve dosya adını belirtebilirsiniz. Yol veya dosya adı belirtmezseniz R8, kurallar raporunu <module-name>/build/outputs/mapping/<build-type>/configuration.txt adresinde oluşturur.
Kodun neden saklandığını anlama
Kaldırılması beklenen bir kodun korunduğunu görürseniz kodun neden korunduğunu anlamak için ‑whyareyoukeeping yapılandırma seçeneğini kullanın. R8, tutulan koddan uygulamanızın giriş noktalarından birine giden bir yol oluşturur. Daha fazla bilgi için Proguard kılavuzundaki ‑whyareyoukeeping belgelerine bakın.
Orijinal yığın izlemeyi kurtarma
R8 tarafından işlenen kod, yığın izlemenin artık orijinal koda atıfta bulunmaması için çeşitli şekillerde değiştirilir. Örneğin, satır numaraları ve sınıfların ve yöntemlerin adları değişebilir. R8, orijinal yığın izlemeyi kurtarmak için komut satırı araçları paketiyle birlikte sunulan retrace komut satırı aracını sağlar.
ReTrace'i kullanmak için bir eşleme dosyası ve yığın izleme dosyası ekleyin. mapping.txt adlı eşleme dosyası, Android App Bundle'ınızla (AAB) otomatik olarak birlikte paketlenir. Daha fazla bilgi için yeniden izleme dokümanlarına ve kilitlenme yığın izlemelerinin kodunu kaldırma hakkındaki Play Console Yardım Merkezi makalesine göz atın.
Bu sayfadaki içerik ve kod örnekleri, İçerik Lisansı sayfasında açıklanan lisanslara tabidir. Java ve OpenJDK, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2025-07-27 UTC.
[[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 2025-07-27 UTC."],[],[],null,["# Test and troubleshoot the optimization\n\nAfter you enable app optimization, check that your app is working as intended\nand that the R8 configuration is doing what you expect. The general steps are as\nfollows:\n\n1. **Test your app's critical user journeys (CUJs):** For example, make sure that users can sign in and do other important tasks.\n2. **Measure performance gains using benchmarks:** [Benchmark your app](/topic/performance/benchmarking/benchmarking-overview) before and after enabling app optimization.\n\nIf you find issues, R8 provides tools to help you troubleshoot. If you're unable\nto solve an issue with R8, [file a bug](https://b.corp.google.com/issues/new?component=326788&template=1025938&pli=1).\n\nGeneral tips\n------------\n\nIssues with R8 are often unique to your app, but here are some general tips to\nmake debugging easier:\n\n- **Temporarily turn off obfuscation:** R8 obfuscates code as part of its optimization process. Obfuscation usually isn't the cause of errors, but obfuscation makes errors more difficult to debug. Add the `‑dontobfuscate` and `‑dontoptimize` flags to the keep rules file to help you pinpoint problematic code.\n- **Check for reflection:** If you run into a *no such element* exception such\n as\n\n `Caused by: java.util.NoSuchElementException: Collection contains no element\n matching the predicate in the stack trace` ,\n\n the exception usually means the field in question is being used through\n reflection and you have to add a keep rule.\n- **Inspect bytecode:** Most R8 issues require bytecode inspection, which you\n can do with tools such as the [APK Analyzer](/studio/debug/apk-analyzer).\n\nCheck which rules are applied\n-----------------------------\n\nTo output a full report of all the rules that R8 applies when building your\nproject, include the following in your app's module\n`proguard‑rules.pro` file: \n\n -printconfiguration \u003coutput-dir\u003e/\u003creport-name\u003e.txt\n\nYou can specify any path and filename. If you don't specify a path or filename,\nR8 outputs the rules report at `\u003cmodule-name\u003e/build/outputs/mapping/\u003cbuild-type\u003e/configuration.txt`.\n\nUnderstand why code was kept\n----------------------------\n\nIf you see kept code that you expected to be removed, use the configuration\noption `‑whyareyoukeeping` to help understand why the code was\nkept. R8 outputs a path from the kept code to one of your app's [entry\npoints](/topic/performance/app-optimization/add-keep-rules#how-write). For more information, see the\n[`‑whyareyoukeeping`](https://www.guardsquare.com/manual/configuration/usage)\ndocumentation in the Proguard manual.\n\nRecover the original stack trace\n--------------------------------\n\nCode processed by R8 is changed in various ways so that the stack trace no\nlonger refers to the original code. For example, line numbers and the names of\nclasses and methods can change. To recover the original stack trace, R8 provides\nthe retrace command-line tool, which is bundled with the command-line tools\npackage.\n\nTo use retrace, give it a *mapping file* and a stack trace file. The mapping\nfile, called `mapping.txt`, is automatically bundled with your Android App\nBundle (AAB). For more details, see the [retrace](/studio/command-line/retrace) documentation and the Play\nConsole Help Center article about how to [de‑obfuscate crash stack\ntraces](https://support.google.com/googleplay/android-developer/answer/9848633).\n| **Warning:** If you're shipping APKs, the `mapping.txt` file isn't automatically bundled with your APK. Android Studio saves the mapping file in the `/build/outputs/mapping/` directory. The mapping file is overwritten every time you build your project, so you must save a copy each time you publish a new release."]]