侧边栏壁纸
博主头像
Gstory's Blog 博主等级

每天进步一点点!

  • 累计撰写 108 篇文章
  • 累计创建 24 个标签
  • 累计收到 11 条评论

目 录CONTENT

文章目录

Andoroid之字符串混淆

gstory
2022-02-01 / 0 评论 / 0 点赞 / 2222 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于2023-10-08,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

在android打包时,有些静态常量等想做一定的处理,不想解包后原样显示,可以通过paranoid来实现这一效果。

引入

为了使 Paranoid 与您的项目一起工作,您必须将 Paranoid Gradle 插件应用到该项目。请注意,Paranoid 插件必须在 Android 插件之后应用。

buildscript {
  repositories {
    mavenCentral()
  }

  dependencies {
    classpath 'io.michaelrocks:paranoid-gradle-plugin:0.3.7'
  }
}

apply plugin: 'com.android.application'
apply plugin: 'io.michaelrocks.paranoid'

配置

可以使用paranoid扩展对象配置 Paranoid 插件:

paranoid {
  // ...
}

扩展对象包含以下属性:

  • enabled— boolean。允许为项目禁用混淆。默认值为true。
  • cacheable— boolean。允许为转换启用缓存。默认值为false。
  • includeSubprojects— boolean。允许为子项目启用混淆。默认值为false。
  • obfuscationSeed- Integer。可用于使混淆在构建中保持稳定的种子。默认值为null,这意味着种子是根据每个构建的输入文件计算的。

实现

@Obfuscate
public class MainActivity extends AppCompatActivity {
  private static final String QUESTION = "Q: %s";
  private static final String ANSWER = "A: %s";

  @Override
  protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);

    final TextView questionTextView = (TextView) findViewById(R.id.questionTextView);
    questionTextView.setText(String.format(QUESTION, "Does it work?"));

    final TextView answerTextView = (TextView) findViewById(R.id.answerTextView);
    answerTextView.setText(String.format(ANSWER, "Sure it does!"));
  }
}

该类包含字符串常量 (QUESTION和ANSWER) 和字符串文字。编译后这个类会变成这样。

@Obfuscate
public class MainActivity extends AppCompatActivity {
  private static final String QUESTION = Deobfuscator.getString(4);
  private static final String ANSWER = Deobfuscator.getString(5);

  protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);

    final TextView questionTextView = (TextView) findViewById(R.id.questionTextView);
    questionTextView.setText(String.format(Deobfuscator.getString(0), Deobfuscator.getString(1)));

    final TextView answerTextView = (TextView) findViewById(R.id.answerTextView);
    answerTextView.setText(String.format(Deobfuscator.getString(2), Deobfuscator.getString(3)));
  }
}
0

评论区