Android 构建时不考虑 proguard-rules
Android build not considering proguard-rules
在我基于 LibGdx 的 android 应用程序中,我使用 build.gradle 文件和下面提到的 progaurd 文件。我在 android 项目文件夹中有 progaurd-rules.pro 文件,如下所示。
问题:
我已经在 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
Proguard 通过删除未使用的代码并使用语义模糊的名称重命名 类、字段和方法来混淆您的代码,从而使代码库更小、更高效。结果是一个更小的 .apk 文件更难逆向工程。 Proguard 已集成到 Android 构建系统中。
当您的应用程序崩溃时,如果您想获取出现问题的文件的行号。为此,您需要集成 crashlytics,如 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());
要让 Play 商店开发者控制台对您的堆栈跟踪进行去混淆处理,您需要将文件 android\build\outputs\mapping\android\release\mapping.txt
上传到 Android Vitals -> 反混淆文件 控制台中应用程序菜单的部分。每次构建项目时都会新生成此文件,因此每次上传新版本的应用程序后都需要执行此操作,并且必须在更改任何代码并重新构建之前执行此操作。任何现有的堆栈跟踪都不会为您去混淆;只有上传映射文件后报告的那些。要手动反混淆您已有的那些,您可以 use the retrace tool,前提是您在上传发布版本后没有进行过其他构建。希望您使用的是版本控制,这样就不会成为问题。
请注意,第二个“android
”上方可能是其他内容,具体取决于您如何设置 build.gradle
。
对于您的问题 1,您的 (a) 部分或 (b) 部分都是可行的解决方案。
在我基于 LibGdx 的 android 应用程序中,我使用 build.gradle 文件和下面提到的 progaurd 文件。我在 android 项目文件夹中有 progaurd-rules.pro 文件,如下所示。
问题:
我已经在 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
Proguard 通过删除未使用的代码并使用语义模糊的名称重命名 类、字段和方法来混淆您的代码,从而使代码库更小、更高效。结果是一个更小的 .apk 文件更难逆向工程。 Proguard 已集成到 Android 构建系统中。
当您的应用程序崩溃时,如果您想获取出现问题的文件的行号。为此,您需要集成 crashlytics,如 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());
要让 Play 商店开发者控制台对您的堆栈跟踪进行去混淆处理,您需要将文件 android\build\outputs\mapping\android\release\mapping.txt
上传到 Android Vitals -> 反混淆文件 控制台中应用程序菜单的部分。每次构建项目时都会新生成此文件,因此每次上传新版本的应用程序后都需要执行此操作,并且必须在更改任何代码并重新构建之前执行此操作。任何现有的堆栈跟踪都不会为您去混淆;只有上传映射文件后报告的那些。要手动反混淆您已有的那些,您可以 use the retrace tool,前提是您在上传发布版本后没有进行过其他构建。希望您使用的是版本控制,这样就不会成为问题。
请注意,第二个“android
”上方可能是其他内容,具体取决于您如何设置 build.gradle
。
对于您的问题 1,您的 (a) 部分或 (b) 部分都是可行的解决方案。