Android 使用或不使用proguard混淆R.id类

Android 使用或不使用proguard混淆R.id类,android,ant,obfuscation,proguard,android-resources,Android,Ant,Obfuscation,Proguard,Android Resources,我知道在Proguard中,建议您保留R内部类的字段名,如ID。因为Proguard不处理布局xml文件。你将以断开的链接结束 但是,即使在通过Ant将R$id传递给ProGuard之前,它也可以通过其他方式混淆R$id之类的类 我这样问是因为如果你有一个id为btnSaveArticle的按钮,对于黑客来说,通过查看名称就很容易理解周围的代码在做什么 是否可以将所有源代码(包括资源文件)复制到另一个文件夹,并使用ant运行regex来更改R.id的名称以及它们在布局xml文件中的位置,然后以某

我知道在Proguard中,建议您保留R内部类的字段名,如ID。因为Proguard不处理布局xml文件。你将以断开的链接结束

但是,即使在通过Ant将R$id传递给ProGuard之前,它也可以通过其他方式混淆R$id之类的类

我这样问是因为如果你有一个id为btnSaveArticle的按钮,对于黑客来说,通过查看名称就很容易理解周围的代码在做什么

是否可以将所有源代码(包括资源文件)复制到另一个文件夹,并使用ant运行regex来更改R.id的名称以及它们在布局xml文件中的位置,然后以某种方式运行generate来重新创建R类

或者您可以创建翻译类eg TR,然后将其映射到R类中的字段

例如

其中DHTXM是一些可以在布局XML中使用的无意义单词。但在代码中,您总是引用TR.btnSaveArticle,proguard会将其混淆

有没有办法做到这一点,还是我在浪费时间

我这样问是因为如果你有一个id为btnSaveArticle的按钮,对于黑客来说,通过查看名称来理解周围的代码会变得太容易了

使用Hierarchy View,无论您如何命名,“Save Article”(保存文章)按钮,都需要不到30秒的时间来确定它的实际ID。我还可以通过一些定制工具设想更快的解决方案

我是在浪费时间吗

嗯,是的

我这样问是因为如果你有一个id为btnSaveArticle的按钮,对于黑客来说,通过查看名称来理解周围的代码会变得太容易了

使用Hierarchy View,无论您如何命名,“Save Article”(保存文章)按钮,都需要不到30秒的时间来确定它的实际ID。我还可以通过一些定制工具设想更快的解决方案

我是在浪费时间吗


是的。

对于Android的默认配置,ProGuard会完全删除R类,除非您的代码对它们进行内省。在后一种情况下,ProGuard还保留字段的原始名称,以避免中断内省


也就是说,资源名称也可以从资源XML文件中检索,ProGuard保持不变。

对于Android的默认配置,ProGuard会完全删除R类,除非您的代码对它们进行内省。在后一种情况下,ProGuard还保留字段的原始名称,以避免中断内省


也就是说,资源名称也可以从资源XML文件中检索,ProGuard保持不变。

这可以通过Ant实现,因为它允许您设置不同的gen和res文件夹

因此,您要做的是将原始文件复制到这些文件夹中,然后使用regex编辑文件以更新为新名称

您将需要这样一个翻译类(例如D)来将其映射到R.class中的字段,因此在代码中可以使用未模糊的名称

public final class D{
  public static final class id{
    D.btnSaveArticle = R.id.btnSaveArticle //DHTXM; 
然后您还需要创建一个不同的src文件夹,并从原始文件夹复制。在这里,您运行一个任务来编辑D类,使其成为

   D.btnSaveArticle = R.id.DHTXM;
我必须创建一个java程序,该程序通过ant运行,以将名称交换为模糊名称

public final class D{
  public static final class id{
    D.btnSaveArticle = R.id.btnSaveArticle //DHTXM; 
如果对字符串和样式执行类似的操作,那么apk中的XML最终会是这样的:

<TextView
        android:id="@+id/GnvCMa"
        android:text="@string/OVuCbd"
        style="@style/ZOVkuu.MGTRgZ" />


设置起来有点费时,但一旦实现,就可以用于其他项目。

可以通过Ant进行设置,因为它允许您设置不同的gen和res文件夹

因此,您要做的是将原始文件复制到这些文件夹中,然后使用regex编辑文件以更新为新名称

您将需要这样一个翻译类(例如D)来将其映射到R.class中的字段,因此在代码中可以使用未模糊的名称

public final class D{
  public static final class id{
    D.btnSaveArticle = R.id.btnSaveArticle //DHTXM; 
然后您还需要创建一个不同的src文件夹,并从原始文件夹复制。在这里,您运行一个任务来编辑D类,使其成为

   D.btnSaveArticle = R.id.DHTXM;
我必须创建一个java程序,该程序通过ant运行,以将名称交换为模糊名称

public final class D{
  public static final class id{
    D.btnSaveArticle = R.id.btnSaveArticle //DHTXM; 
如果对字符串和样式执行类似的操作,那么apk中的XML最终会是这样的:

<TextView
        android:id="@+id/GnvCMa"
        android:text="@string/OVuCbd"
        style="@style/ZOVkuu.MGTRgZ" />


设置起来有点费时,但一旦实现,就可以用于其他项目。

只需使用下面的内容,将其添加到Proguard配置文件中即可

-keepclassmembers class **.R$* {
public static <fields>;}
-keepclassmembers类**.R$*{
公共静态;}

只需使用下面的命令,将其添加到您的Proguard配置文件中

-keepclassmembers class **.R$* {
public static <fields>;}
-keepclassmembers类**.R$*{
公共静态;}

如果您有很多控件,则需要花一些时间来计算所有控件。看到一个带有所有模糊名称的源文件会让一个不经意的黑客不愿意进行黑客攻击。我确实理解你的意思,我仍然无法理解黑客可以获取Android应用程序的全部源代码这一事实。@pt123:“如果你有相当多的控件,那么需要花时间去计算它们的全部”——据你自己承认,他们不需要“计算所有的”,只需要“保存文章”之类的重要控件这与他们试图对你的应用程序做的任何事情都相关。“看到一个名称模糊的源文件会让一个普通的黑客不愿意去破解”--只有愚蠢的。@pt123:“我仍然无法忘记一个事实,黑客可以获得Android应用程序的全部源代码”--他们可以获得大多数操作系统的大多数客户端应用程序的“全部源代码”。诚然,像Java这样基于字节码的语言往往比本机指令更容易反编译。如果您担心客户端应用程序的安全性,那么只编写服务器端应用程序(不过,要小心那些讨厌的JavaS)