Android Studio, ProGuard eşleme dosyasını nereye kaydediyor?


182

Android Studio'da, imzalı bir APK derlendikten sonra ProGuard eşleme dosyaları nerede üretiliyor?

Çalışıp çalışmadığından veya dosya yolunu yeni unuttuğumdan emin değilim ve zorunlu Google / Stack Overflow aramam buna cevap vermedi



3
@JayakrishnanPM, Google'ın 3 yıl sonra ona ulaştığını görmekten memnun.
CQM

Yanıtlar:


272

build/outputs/proguard/release/mapping.txtUygulama modülünüzün dizininde bulunmalıdır .

ProGuard ve Android Studio son sürümünde, dosya bulunmaktadır build/outputs/mapping/release/mapping.txt.


5
Oluşturulan dosyalar ve yol hakkında daha fazla bilgi: developer.android.com/studio/build/shrink-code.html
Helton Isac

Senin Eğer Anında Çalıştır etkinleştirildiğinde, sen eşleme dosyası görmek mümkün olmayabilir. Anında Çalıştırmayı devre dışı bırakın ve tekrar oluşturun.
Faizan Mubasher

1
Gradle 6.2.2 / Gradle Plugin 3.6.1 güncellemesinden sonra yollar bizim için değişti. /app/build/outputs/mapping/brandExampleEnvProductionRelease/mapping.txt /app/build/outputs/mapping/brandExampleEnvIntegrationBeta/mapping.txtyeni yollar.
Carsten Hagemann

75

Benim için 'build/outputs/mapping/release'


16
'build / output / mapping / release /
mapping.txt

1
Evet, bir android stüdyosu 2.3.2 için mükemmel
Subho

1
app / build / outputs / mapping / release / mapping.txt bc eşleme dosyasını içermeyen ayrı bir derleme klasörü vardı ...
NukeouT

39

Mapping.txt dosyasını dışında bir konuma yazmak için korumayı yapılandırmak daha temiz buldum build/ dizin ağacının , böylece sürüm kontrolüne daha rahat bir şekilde kontrol edilebilirdi.

Bunu başarmak için bunu proguard-rules.prodosyanıza koyun :

-printmapping mapping.txt

Bu, büyük olasılıkla proguard-rules.prodosyanızla aynı dizine yerleştirir . Sonuçta, muhtemelen APK dosyanızla aynı dizine ve eşdeğer bir adla (lezzet, yapı türü vb. İçerebilir) yazmak istersiniz.

Not: Tecrübelerime göre bu bir değil (başka bir yorumcu tarafından önerildi proguard şablon dosyası tarafından reddedildi cevap burada).

GÜNCELLEME: Birden fazla ürün çeşniniz varsa, bu çok daha iyi bir çözümdür: https://stackoverflow.com/a/31116608/444761


1
Bu benim çözümümden daha iyidir, dediğiniz gibi daha sonra sürüm kontrolü altına alabilirsiniz.
Clive Jefferies

neden bu sürümü kontrol etmek istersiniz? ayrı olarak bıraktığınız her APK için yapıya bağlı olduğundan buna ihtiyacınız vardır. Bu tür bir apk'yi ayrı olarak yüklemeniz / kontrol etmeniz gerektiğinden, kaynak VCS'de kontrol etmenize gerek yoktur !?
Denny1989

@ Denny1989 ne demek istediğinden emin değilim. Bir APK oluşturuyorum ve sürüm kontrolü dışında saklıyorum. Eşleme dosyasını bir yerde tutmam gerekiyor. Ben olabilir APK yanında saklayın, ama daha temiz versiyonu kontrolü o kadar bulabilirsiniz. Ancak, proje başına sadece bir sürüm APK'm var, bu yüzden YMMV.
Mark

36

Oluşturulmadığını gördüm, bu yüzden bunu kurallar dosyasına ekledim

-printmapping build/outputs/mapping/release/mapping.txt

1
Printmapping'in kullandığım bir şablon koruma dosyası tarafından geçersiz kılındığını gördüm!
Oğlan

1
bu benim için tüm koruma çıktı dosyalarını çalıştı ve üretti.
j2emanue

16

Bu soruya cevap vermek için çok geç ama birisinin cevabım olması gerekiyorsa.

Deobfuscate ile eşleme dosyasının konumu:

ProGuard dosyayı uygulama uygulamasına / build / outputs / mapping / FLAVOR / release / mapping.txt dosyasına kaydeder

Genellikle hata ayıklama modunda eşleme dosyasına ihtiyacınız yoktur, çünkü genellikle gizleme devre dışıdır. Bu durumda, build.gradle dosyasında hata ayıklama varyantı için kodun altında olduğundan emin olun.

debug {
    minifyEnabled false
    debuggable true
}

Bazı Gotcha'lar:

ProGuard ile her sürüm oluşturduğunuzda mapping.txt dosyasının üzerine yazılır, bu nedenle yeni bir sürüm oluşturmadan önce bu dosyanın yedeğini alın. Uygulamanızın eski bir sürümünden gizlenmiş yığın izlemesine yardımcı olacaktır.

Bunun dışında kodunuzu gizlemenin iki yolu vardır:

1. mapping.txt dosyanızı Google Play Konsoluna yükleyin:

Uygulamanızı Google Play'de yayınlarken, APK'nızın her sürümü için mapping.txt dosyasını yükleyebilirsiniz. Ardından Google Play, kullanıcı tarafından bildirilen sorunlardan gelen yığın izlerini bozar, böylece bunları Google Play Konsolunda inceleyebilirsiniz.

2. Yerel sdk aracını kullanın retrace.sh/retrace.bat:

Bazı zamanlar, üretimde gerçekleşmemesi için (oyun deposuna bırakıldığında) hataları kontrol etmek ve düzeltmek için uygulamanızın yayın sürümünü (yayınlamak için yapı varyantını değiştirerek ve yayınlayarak) çalıştırmak istersiniz.

Gizlenmiş bir yığın izini kendiniz okunabilir olana dönüştürmek için, retrace komut dosyasını kullanın ( Windows'ta retrace.bat; Mac / Linux'ta retrace.sh ).

Dizinde bulunur <sdk-root>/tools/proguard/bin/.

<sdk-root> tüm android kütüphanelerinizin ve SDD'lerinizin kurulduğu yerdir.

Komut dosyası mapping.txt dosyasını ve yığın izlemenizi alarak yeni, okunabilir bir yığın izlemesi oluşturur.

Komut Sözdizimi:

retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]

Örneğin:

retrace.bat -verbose mapping.txt obfuscated_trace.txt

Üretim hatalarını önceden kontrol etmek için oldukça kullanışlı olduğu için yerel gizleme sürümünü tercih ediyorum.

Umut ediyorum bu yardım eder.


12

Android Studio 2.2.2 sürümünü kullanıyorum . Benim için şu konumlarda bulunuyor:

Hata ayıklama için: \app\build\outputs\mapping\debug\mapping.txt

Serbest bırakmak için: \app\build\outputs\mapping\release\mapping.txt


11

resim açıklamasını buraya girin

İşte bir resimde - eşleme klasöründe bulacaksınız:


2

Çünkü aptalım ve biri bana dosyanın nerede olduğunu söylediğinde bile kayboluyorum:

cd StudioProjects/fooProject
find . -name "mapping.txt" | xargs less
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.