2017-11-04 149 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