【问题标题】:Android build not considering proguard-rulesAndroid构建不考虑proguard-rules
【发布时间】:2017-11-04 05:55:28
【问题描述】:

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

问题:

  1. 我已经在 Play 商店中发布了我的 apk。虽然我有 progaurd-rules.pro,但当我的应用程序崩溃时,我没有得到它有问题的文件的行号。请告诉我两件事

    一个。是否需要将 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 吗?

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

【问题讨论】:

    标签: android libgdx obfuscation


    【解决方案1】:

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

    当您的应用程序崩溃时,如果您想获取问题所在文件的行号。为此,您需要集成像 Fabric 或市场上任何其他可用的 crashlytics。我举一个织物的例子。

    添加你的 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 中初始化您的 Kit

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

    【讨论】:

    • 我对其他 3rd 方库不感兴趣.. 你能在没有任何新的 3rd 方库的情况下帮助我吗,但只能使用 android 开发者控制台
    • 没关系。你能解决我的问题和解决方案吗
    【解决方案2】:

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

    请注意,第二个“android”上方可能是其他内容,具体取决于您的build.gradle 设置方式。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 2016-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-02
      相关资源
      最近更新 更多