2017-11-04 3 views
2

In meiner LibGdx-basierten Android-App verwende ich die build.gradle-Datei mit den unten erwähnten progaurd-Dateien. Ich habe die progaurd-rules.pro Datei im android Projektordner wie unten gezeigt.Android build nicht in Betracht von proguard-rules

Frage:

  1. Ich habe meine apk in Play Store veröffentlicht. Ich habe zwar progaurd-rules.pro, als meine App abstürzte, bekomme ich nicht die Zeilennummer der Datei, in der sie aufgetreten ist. Bitte lassen Sie mich wissen, 2 Dinge

    a. Muss ich den progaurd-rules.pro-Inhalt in progaurd-project.txt kopieren?

    b. Kann ich die Datei progaurd-rules.txt in android- build.gradle hinzufügen, wie im folgenden Code erwähnt?

    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt', 'proguard-rules.pro' 
    

2. Was ist proguard-android.txt, proguard-project.txt und proguard-rules.pro. Kann ich proguard-project.txt und proguard-rules.pro einspielen?

enter image description here

Android- build.gradle

buildTypes { 
    release { 
     minifyEnabled true 
     proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt' 
    } 
} 

progaurd-rules.pro

-keep class com.google.firebase.provider.FirebaseInitProvider 
-renamesourcefileattribute SourceFile 
-keepattributes SourceFile,LineNumberTable 

progaurd-project.txt

-verbose 

-dontwarn android.support.** 
-dontwarn com.badlogic.gdx.backends.android.AndroidFragmentApplication 
-dontwarn com.badlogic.gdx.utils.GdxBuild 
-dontwarn com.badlogic.gdx.physics.box2d.utils.Box2DBuild 
-dontwarn com.badlogic.gdx.jnigen.BuildTarget* 
-dontwarn com.badlogic.gdx.graphics.g2d.freetype.FreetypeBuild 

-keep class com.badlogic.gdx.controllers.android.AndroidControllers 

-keepclassmembers class com.badlogic.gdx.backends.android.AndroidInput* { 

<init>(com.badlogic.gdx.Application, android.content.Context,  
java.lang.Object,   

com.badlogic.gdx.backends.android.AndroidApplicationConfiguration); 
} 

-keepclassmembers class com.badlogic.gdx.physics.box2d.World { 
    boolean contactFilter(long, long); 
    void beginContact(long); 
    void endContact(long); 
    void preSolve(long, long); 
    void postSolve(long, long); 
    boolean reportFixture(long); 
    float reportRayFixture(long, float, float, float, float, float); 
} 

progaurd-android.txt

com/google/firebase/provider/FirebaseInitProvider.class 

Antwort

0

Um die Play Store-Entwickler-Konsole erhalten Sie Ihre Stack-Traces deobfuscate, müssen Sie um die Datei android\build\outputs\mapping\android\release\mapping.txt auf die Android Vitals ->Deobfuscation hochzuladen Dateien Abschnitt des Menüs Ihrer Anwendung in der Konsole. Diese Datei wird jedes Mal neu erstellt, wenn Sie Ihr Projekt erstellen. Sie müssen dies also jedes Mal tun, nachdem Sie eine neue Version Ihrer App hochgeladen haben, und Sie müssen dies tun, bevor Sie den Code ändern und erneut erstellen. Alle vorhandenen Stack-Traces werden nicht für Sie entschleiert; Nur solche, die nach dem Hochladen der Zuordnungsdatei gemeldet werden. Um die bereits vorhandenen Dateien manuell zu entschlüsseln, können Sie use the retrace tool verwenden, sofern Sie seit dem Hochladen der Release-Version keinen weiteren Build erstellt haben. Hoffentlich verwenden Sie Versionskontrolle, so dass dies kein Problem sein wird.

Beachten Sie, dass oberhalb der zweiten "android" könnte etwas anderes, je nachdem, wie Sie Ihre build.gradle eingerichtet haben.

Für Ihre Frage 1, entweder Ihr Teil (a) oder Teil (b) sind praktikable Lösungen.

+0

1.b funktioniert gut. – iappmaker

1

Proguard verschleiert Code von nicht verwendeten Code Entfernen und Umbenennen von Klassen, Felder und Methoden mit semantisch obskuren Namen, die die Codebasis zu machen, kleiner und effizienter . Das Ergebnis ist eine kleinere .apk-Datei, die schwieriger zu rekonstruieren ist. Proguard ist in Android-Build-System integriert.

Wenn Ihre App abgestürzt ist, wenn Sie die Zeilennummer der Datei abrufen möchten, in der sie aufgetreten ist. Dazu müssen Sie Crashlytics wie Fabric oder andere auf dem Markt verfügbare Produkte integrieren. Ich gebe ein Beispiel für Fabric.

Fügen Sie in Ihrem Build hinzu.gradle

buildscript { 
    repositories { 
    maven { url 'https://maven.fabric.io/public' } 
    } 

    dependencies { 
    // These docs use an open ended version so that our plugin 
    // can be updated quickly in response to Android tooling updates 

    // We recommend changing it to the latest version from our changelog: 
    // https://docs.fabric.io/android/changelog.html#fabric-gradle-plugin 
    classpath 'io.fabric.tools:gradle:1.+' 
    } 
} 

apply plugin: 'io.fabric' 

repositories { 
    maven { url 'https://maven.fabric.io/public' } 
} 


    compile('com.crashlytics.sdk.android:crashlytics:[email protected]') { 
    transitive = true; 
    } 

Fügen Sie Ihren API-Schlüssel in Manifest-Datei

<meta-data 
     android:name="io.fabric.ApiKey" 
     android:value="<FABRIC_API_KEY>" 
    /> 

initialisieren Ihr Kit in Ihrem MainActivity

Fabric.with(this, new Crashlytics()); 
+0

Ich bin nicht an anderen 3rd-Party-Bibliotheken interessiert. Könnten Sie bitte helfen mir ohne neue 3rd-Party-Bibliotheken aber nur mit Android-Entwickler-Konsole – iappmaker

+0

können Sie https://firebase.google.com/docs/crash/android verwenden – Dilip

+0

Das ist in Ordnung. Könnten Sie bitte mein Problem und die Auflösung dafür adressieren – iappmaker

Verwandte Themen