Android build不考虑proguard-rules

时间:2017-11-04 05:55:28

标签: android libgdx obfuscation

在我的基于LibGdx的Android应用程序中,我使用build.gradle文件和下面提到的progaurd文件。我在android项目文件夹中有progaurd-rules.pro文件,如下所示。

问题:

  1. 我在Play商店发布了我的apk。虽然我有progaurd-rules.pro,当我的应用程序崩溃时,我没有得到它有问题的文件的行号。请让我知道2件事

    一个。我是否需要将progaurd-rules.pro内容复制到progaurd-project.txt?

    湾我可以在android- build.gradle中添加progaurd-rules.txt,如下面的代码所示?

    proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt', 'proguard-rules.pro'
    
  2. 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
    

2 个答案:

答案 0 :(得分:1)

Proguard通过删除未使用的代码并使用语义模糊的名称重命名类,字段和方法来模糊代码,从而使代码基础更小,更高效。结果是较小的.apk文件,更难以进行逆向工程。 Proguard已集成到Android构建系统中。

当你的应用程序崩溃时,如果你想获得它有问题的文件的行号。为此,您需要集成像Fabric或市场上任何其他可用的崩解剂。我举一个Fabric的例子。

添加build.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:2.7.1@aar') {
    transitive = true;
  }

在清单文件中添加API密钥

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

在MainActivity中初始化您的工具包

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

答案 1 :(得分:0)

要让Play商店开发者控制台对您的堆栈跟踪进行反模糊处理,您需要将文件android\build\outputs\mapping\android\release\mapping.txt上传到 Android Vitals - &gt;控制台中应用程序菜单的反混淆文件部分。每次构建项目时都会生成此文件,因此每次上传新版本的应用程序后都需要执行此操作,并且必须在更改任何代码并重新构建之前执行此操作。任何现有的堆栈跟踪都不会为您进行反混淆处理;仅上载映射文件后报告的内容。要手动对您已有的内容进行反模糊处理,您可以use the retrace tool,前提是您在上传发布版本后尚未完成其他构建。希望您使用版本控制,这样就不会有问题。

请注意,高于第二个&#34; android&#34;可能是其他内容,具体取决于您build.gradle设置的方式。

对于您的问题1,您的(a)部分或(b)部分是可行的解决方案。