相关疑难解决方法(0)

Android:Proguard的推荐配置是什么?

我正在为Android开发应用程序并使用Proguard来混淆代码.

目前我正在使用ProGuard配置:

-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class com.android.vending.licensing.ILicensingService
Run Code Online (Sandbox Code Playgroud)

要维护布局XML上使用的自定义组件名称:

-keep public class custom.components.**
Run Code Online (Sandbox Code Playgroud)

要删除调试日志:

-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** v(...);
}
Run Code Online (Sandbox Code Playgroud)

为了避免更改布局onClick上调用的方法名称:

-keepclassmembers class * {
 public void onClickButton1(android.view.View);
 public void onClickButton2(android.view.View);
 public void onClickButton3(android.view.View);
}

-keepclasseswithmembernames class …
Run Code Online (Sandbox Code Playgroud)

android proguard

64
推荐指数
2
解决办法
6万
查看次数

Proguard优化设置:在现代API和Proguard版本中启用类合并,强制转换和字段/*

我一直在混淆我的应用程序很长一段时间,我采用了以下设置,就像咒语一样,因为它们是谷歌的推荐

-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
Run Code Online (Sandbox Code Playgroud)

然而,有一天我错误地评论了这一行,该应用程序正确构建,并"显然"工作.我做了很多测试,无法让它崩溃.

所以我想知道是否需要那些禁用的优化设置......

  • 从今天的Android SDK和最新的Proguard版本开始,我只针对Android 4.0.3以后的设备(15),并使用Proguard 5.1.
  • 对于那些没有做异国情调并且有适当的书面proguard.cfg指示以保留相关问题类别的应用程序等.

与此问题相关的大多数答案都有相互矛盾的信息,并且与相当旧的API版本有关.

逐一:

!代码/简/算术

我发现了一个关于Google网上论坛的讨论 ,他们说simplification/arithmethic在Android Donut之后不需要SDK.我假设,我可以安全地启用此优化.

!类/合并/*

看起来proguard在开启此优化的项目中做得很好:

[proguard]   Number of vertically merged classes:         296
[proguard]   Number of horizontally merged classes:       445
Run Code Online (Sandbox Code Playgroud)

除了堆栈跟踪不正确之外还有其他副作用吗?我的意思是,与应用程序崩溃相关的副作用而不是调试问题.我发现了这个相关的问题,但不能得出结论是否安全.

!field/*和!code/simplification/cast

ProGuard的作者回答的这个问题中读到这些问题是为了避免使用较旧的Proguard版本的错误.那么在Proguard 5.1上激活它们是否安全?

optimization android proguard

11
推荐指数
1
解决办法
1714
查看次数

Android proguard不完整的堆栈跟踪

我遇到了一个问题,即开发人员控制台中的堆栈跟踪与代码不匹配.行号显着关闭,并且必须在跟踪中的方法将不会存在于控制台的跟踪中.例如(简化的控制台跟踪):

at getBitmapSize
at getBitmapBytes
at onActivityResult
Run Code Online (Sandbox Code Playgroud)

但是在代码中它必须采用这条路径:

onActivitResult -> handleSaveImage -> getBitmapBytes -> getBitmapSize
Run Code Online (Sandbox Code Playgroud)

这段代码多年来没有变化,因此不需要使用错误的mapping.txt.以某种方式应用proguard是删除应用程序中的结构.那可能吗?它不会映射回来吗?

在转向proguard之前,我从未在堆栈跟踪中看到丢失方法.

还有什么我应该知道的关于让行号匹配?

我已经设定:

-keepattributes SourceFile,LineNumberTable
Run Code Online (Sandbox Code Playgroud)

这几乎是有效的.他们只是没有正确排队.

更新

我设置了一个测试,将NPE放在可预测的内联点上.

(优化)logcat错误具有正确的行号,并且仅为了清晰而分开的方法明显是行间的.通过正确的行号,一切都更加明显.

(未优化)获得相同的堆栈跟踪,除了跟踪中的其他方法.行号再次正确.

我不明白为什么开发人员控制台跟踪的行号错误,但这就是它难以理解的原因.它们不仅在一个文件中关闭,而且在所有文件中都关闭,因此它只是一个令人困惑的混乱,尤其是在您有多个异常处理(如i/o)的任何地方.

更新2

我将未经优化的应用程序提交到Play商店,现在堆栈跟踪排队.当你依赖Play堆栈跟踪时,我建议不要在复杂的应用程序中使用优化.

android proguard stack-trace

5
推荐指数
1
解决办法
679
查看次数

标签 统计

android ×3

proguard ×3

optimization ×1

stack-trace ×1