2017-11-04 141 views
2

在我的基於LibGdx的android應用程序中,我正在使用build.gradle文件和下面提到的progaurd文件。我有android項目文件夾中的progaurd-rules.pro文件,如下所示。Android構建不考慮proguard規則

問:

  1. 我已經發布了我的Play商店APK。雖然我有progaurd-rules.pro,當我的應用程序崩潰時,我沒有得到它有問題的文件的行號。請讓我知道2件事

    a。我需要將progaurd-rules.pro內容複製到progaurd-project.txt嗎?

    b。我可以在android- build.gradle中添加progaurd-rules.txt,如下面的代碼所述?

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

2。什麼是proguard-android.txt,proguard-project.txt和proguard-rules.pro。我可以俱樂部proguard-project.txt和proguard-rules.pro嗎?

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 

回答

0

要獲得Play商店開發者控制檯反混淆你的堆棧跟蹤,你需要將文件android\build\outputs\mapping\android\release\mapping.txt上傳到Android Vitals - >Deobfuscation文件控制檯中應用程序菜單的一部分。該文件將在您每次構建項目時新生成,因此您需要在每次上傳新版本的應用程序後執行此操作,並且必須在更改任何代碼並再次構建之前執行此操作。任何現有的堆棧跟蹤都不會爲您解除混淆;只有在您上傳映射文件後報告的那些。要手動去混淆已有的版本,您可以use the retrace tool,前提是自上載發行版本以來還沒有完成另一個版本。希望你使用版本控制,所以這不會是一個問題。

請注意,高於第二個「android」可能是其他內容,具體取決於您如何設置build.gradle

對於你的問題1,你的(a)部分或(b)部分是可行的解決方案。

+0

1.b正常工作。 – iappmaker

1

Proguard的通過移除無用的代碼和重命名類,字段和方法與語義模糊的名字,這使得代碼庫,更小,更高效的混淆代碼。結果是一個更小的.apk文件,更難以進行逆向工程。 Proguard已集成到Android構建系統中。

當你的應用程序崩潰,如果你想得到它有問題的文件的行號。爲此,您需要集成Fabric或其他市場上可用的crashlytics。我正在舉一個Fabric的例子。

加入你的構建。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; 
    } 

添加您的API密鑰清單文件

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

初始化你的包在您的MainActivity

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

我對其他第三方庫不感興趣..你可以幫我沒有任何新的第三方庫,但只有與Android開發者控制檯 – iappmaker

+0

你可以使用https://firebase.google.com/docs/crash/android – Dilip

+0

沒關係。您能否請我解決我的問題和解決方案 – iappmaker