在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)));
}
}
评论区