问题标签 [android-obfuscation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
999 浏览

android - 既然混淆在 Kotlin 或 Java 代码中不起作用,我现在应该使用什么?

我尝试混淆我的项目,以便在 Gradle 中启用一些设置。然后我尝试反转代码但不完全混淆

我参考了很多网站我还没有找到一个确切的解决方案

我尝试反编译非常著名的应用程序,例如来自 Play 商店的任何 google 应用程序和 Facebook(代码似乎完全被混淆了)。

任何人都可以建议我应该做什么来使完整的代码混淆

  • 以下 3 个步骤 代码混淆没有用处

第 1 步: Gradle 属性:

第 2 步:应用级 Gradle:

第 3 步: proguard-rules.pro 我也尝试了 proguard 规则

这是我的科特林代码:

在这里,我尝试反转我的发布版本的代码。 Android Apk 反编译器: http ://www.javadecompilers.com/apk

反编译器输出:

注意: 启用上述 Gradle 设置后:

  • 应用程序大小减少 40%
  • 它还删除了我项目中未使用的类和 res 文件。
0 投票
1 回答
153 浏览

android - 为什么片段和视图不会混淆?

虽然 Fragment 和 View 类不是 android MainComponent 并且在 AndroidManifest.xml 中没有引用它们,但是当启用 minify 并且 Proguard 运行良好时,扩展 Fragment 或 View 的类不会更改它们的名称/包。

为什么他们不混淆?

PS1:其他代码完全混淆(更改名称/包/方法/属性)

PS2:上面的类只是混淆了它们的方法和属性。(不是名称和包装)

0 投票
0 回答
28 浏览

android - Okta 重定向不起作用 android 发布版本

Okta 重定向在 minifyenabled 设置为 true 的 android 版本中不起作用

如果我将 minifyenabled 设置为 false,它会在发布版本中正确重定向。如果设置为 true,则进度条将无限显示。

0 投票
0 回答
38 浏览

android - 从 xml 内容引用的 android 混淆类名

有什么方法可以实现 100% 的混淆?

我当前的问题是 xml 文件(Jetpack Navigation argType,fragment)中有 Java/Kotlin 类的引用,我无法混淆。

任何建议都会有所帮助。

谢谢。

0 投票
0 回答
23 浏览

android - 如何在异常处理程序中映射 proguard?

我实现了一个异常处理程序来捕获应用程序上的所有异常。

我得到了如下的 NPE 报告。但我不知道它是什么,因为它被混淆了

ExampleViewModel 中报错的那一行是这样的:

该函数使用一个参数,如下所示:

如何映射数据以便我可以看到它们的原始名称?哪一部分导致NPE?(我猜响应是空的?)我不知道如何映射到应用程序以及 LiveData、MutableLiveData。

0 投票
0 回答
28 浏览

kotlin - 为什么 proguard 脚本无法“保留”我在布局 XML 中使用的自定义视图类

我正在一一分享我的配置。

从我的 Gradle 文件中:

我的 proguard 脚本:

proguard-rules.pro我已经在我的文件夹中的文件中尝试了以下语句的每一行/app

请注意,这com.my_package.layout.MyCustomClass是一个有效的 LinearView 扩展类。我在我的布局 XML 中使用它。当我创建并运行它时,没有错误。这个类工作正常。

发布方式:

但是在发布版本中,当 minifyEnabled 为 true 时,proguard 脚本不起作用。它不保留此文件。有一个运行时异常说这个文件不能被膨胀。因此,该应用程序崩溃了。

历史:

之前没有 proguard 脚本。当时在app crash中报android.view.InflateException。

我按照此文档两次:了解 -keep 指令 ,然后我将脚本一一放上。除非我修改,否则此错误不会消失:minifyEnabled = false

请帮忙。

0 投票
1 回答
56 浏览

android - Kotlin - Firestore toObject 方法未按预期工作

我正在为我的 Android 项目使用 Firestore,并且我正在使用以下代码将获取的文档转换为自定义数据类

现在,当没有发生代码混淆时,此行可以完美运行,但是,使用混淆后,此行不会失败,而是不会将user文档数据复制到userData. 所以我认为问题可能与 Firestore 和代码混淆有关。

以前有没有其他人遇到过这个问题?

0 投票
0 回答
22 浏览

android - 有什么方法可以在 Android Studio 上配置包/类重命名重构并手动触发它?

正如我们所知,proguard 无法混淆 Android 应用程序的某些类,例如扩展Activity, Application, Service, View类等。它混淆了所有其他类,但这些类保留了它们的原始名称和包。实际上,我必须从 proguard 中手动排除这些类,因为如果我不这样做,apk 就会中断(看起来它无法在某处重命名类引用,从而破坏了使用反射按名称搜索活动的方法)。

很高兴我可以使用 Android Studio 重构/重命名工具手动将这些包和类重命名为一些手动输入的名称,但是每次发布版本都必须这样做非常耗时。

那么,在生成签名的混淆 apk 以供发布之前,有什么方法可以在 Android Studio 上配置自动包和类重构/重命名为一些预定义的值(甚至更好的是自动生成的值)?我正在考虑一个Run configuration或一些很容易触发的插件。任何可以在不破坏应用程序的情况下执行此操作的外部工具都将满足我的需求。

0 投票
0 回答
42 浏览

android - java.lang.NoClassDefFoundError:$DefaultImpls 解析失败

在一个多模块 Android 项目中,在项目的一个模块中,我在 Gradle中将 minifyEnabled设置为 true。当应用程序使用该模块中的一个类时,我遇到了这个异常,该类实现了一个包含具有默认值的方法的接口。例如,该模块包含以下接口及其实现:

如果应用程序调用实现的方法 1,它就可以工作。但是仅使用第一个参数调用 method2 会使应用程序因上述错误而崩溃。如果用两个参数调用它就可以工作。仅当 minifyEnabled 为 true 时才会发生。我尝试了几个 ProGuard 规则无济于事。还尝试使用 Kotlin 编译器标志“-Xjvm-default=all”。显然是 ProGuard 规则(实际上是 R8)。有没有人遇到过同样的问题?

0 投票
1 回答
39 浏览

proguard - Proguard 中的 --keepattributes SourceFile 有什么作用?

我试图弄清楚 Firebase 将如何进行从混淆代码到真实代码的映射,根据他们的文档,我需要添加这一行 -

-keepattributes SourceFile,LineNumberTable

这应该保持文件名和行号不变。然而,尽管使用了这种配置,我注意到在反编译我的 APK 后,它包含了混淆的文件名,如 a.java、b.java 等。此外,我在这个答案中读到这SourceFile只是一个可以重命名的字符串。我不明白这一点。

我的问题是

  1. SourceFile属性是什么?
  2. 尽管文档说文件名保持不变,为什么保持SourceFile属性仍然混淆文件?
  3. 为什么SourceFile属性可以重命名?