Android构建不考虑proguard规则
在我的基于LibGdx的android应用程序中,我正在使用build.gradle文件和下面提到的progaurd文件。我有android项目文件夹中的progaurd-rules.pro文件,如下所示。Android构建不考虑proguard规则
问:
-
我已经发布了我的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吗?
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
要获得Play商店开发者控制台反混淆你的堆栈跟踪,你需要将文件android\build\outputs\mapping\android\release\mapping.txt
上传到Android Vitals - >Deobfuscation文件控制台中应用程序菜单的一部分。该文件将在您每次构建项目时新生成,因此您需要在每次上传新版本的应用程序后执行此操作,并且必须在更改任何代码并再次构建之前执行此操作。任何现有的堆栈跟踪都不会为您解除混淆;只有在您上传映射文件后报告的那些。要手动去混淆已有的版本,您可以use the retrace tool,前提是自上载发行版本以来还没有完成另一个版本。希望你使用版本控制,所以这不会是一个问题。
请注意,高于第二个“android
”可能是其他内容,具体取决于您如何设置build.gradle
。
对于你的问题1,你的(a)部分或(b)部分是可行的解决方案。
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());
1.b正常工作。 – iappmaker