在我的基于LibGdx的Android应用程序中,我使用build.gradle文件和下面提到的progaurd文件。我在android项目文件夹中有progaurd-rules.pro文件,如下所示。
问题:
我在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。什么是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
答案 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)部分是可行的解决方案。