java - 混淆不适用于 kotlin 类和字段名称
问题描述
我正在 kotlin 中开发一个Android SDK并试图对其进行混淆。R8混淆适用于java类
,但不适用于kt类。
有谁知道如何混淆kotlin类和字段名称?
来源:
KotlinClassToKeep.kt
class KotlinClassToKeep {
var kotlinClassToObfuscate = KotlinClassToObfuscate()
fun funToKeep() {
kotlinClassToObfuscate.funToObfuscate()
Log.d("TAG", "here in kotlin")
}
}
KotlinClassToObfuscate.kt
class KotlinClassToObfuscate{
var obfuscateStr: String = "default"
fun funToObfuscate() {
Log.d("TAG", obfuscateStr)
}
}
JavaClassToObfuscate.java
public class JavaClassToKeep {
public JavaClassToObfuscate javaClassToObfuscate;
public void methodToKeep() {
javaClassToObfuscate.methodToObfuscate();
Log.d("TAG", "here in java");
}
}
JavaClassToObfuscate.java
class JavaClassToObfuscate {
public String strToObfuscate = "default";
public void methodToObfuscate() {
Log.d("TAG", strToObfuscate);
}
}
proguard-rules.pro
-repackageclasses 'obfuscate.test.obfuscate'
-keep class obfuscate.test.java.JavaClassToKeep {
*;
}
-keep class obfuscate.test.kotlin.KotlinClassToKeep {
*;
}
然后,我打包了这个库。但是当我使用JD-GUI检查它时,有一些我想混淆的信息就像KotlinClassToObfuscate
它一样。
@Metadata(mv = {1, 5, 1}, k = 1, xi = 48, d1 = {"\000\032\n\002\030\002\n\002\020\000\n\002\b\002\n\002\020\016\n\002\b\005\n\002\020\002\n\000\030\0002\0020\001B\005\006\002\020\002J\006\020\t\032\0020\nR\032\020\003\032\0020\004X\016\006\016\n\000\032\004\b\005\020\006\"\004\b\007\020\b\006\013"}, d2 = {"Lobfuscate/test/kotlin/KotlinClassToObfuscate;", "", "()V", "obfuscateStr", "", "getObfuscateStr", "()Ljava/lang/String;", "setObfuscateStr", "(Ljava/lang/String;)V", "funToObfuscate", "", "obfuscate-test_release"})
public final class b {}
而当我在一个应用项目中使用这个SDK的时候,可以看到上面的类名和val名:
structure on Android Studio
但是正如我所料,java类被混淆了:
这是构建后生成的mapping.txt:
# compiler: R8
# compiler_version: 2.1.75
# pg_map_id: 2e561a0
# common_typos_disable
obfuscate.test.java.JavaClassToObfuscate -> obfuscate.test.obfuscate.a:
obfuscate.test.kotlin.KotlinClassToKeep -> obfuscate.test.kotlin.KotlinClassToKeep:
1:1:void obfuscate.test.kotlin.KotlinClassToObfuscate.funToObfuscate():0:0 -> funToKeep
1:1:void funToKeep():0 -> funToKeep
2:2:void funToKeep():0:0 -> funToKeep
obfuscate.test.kotlin.KotlinClassToObfuscate -> obfuscate.test.obfuscate.b:
它还表明它KotlinClassToObfuscate
会被混淆,但事实是它并没有完全混淆。
有谁知道如何混淆 kotlin 类和字段名称?
解决方案
推荐阅读
- css - 您可以在 React 应用程序中使用 CSS 更改光标吗?
- windows - 获取计算机规格,并自动保存结果
- loops - 如何在批处理脚本的 for /f 循环中从输出中设置多个变量?
- python - 如何使用 Speech_recognizer 检查我是否说出了列表中包含的单词之一
- r - 处理丢失的参数,用missing()处理,在函数内部调用函数
- python - Python 和 Windows 调度程序 - 运行调用其他脚本的 py 脚本
- google-cloud-platform - 用于 PDF 文件的 Google 云存储图标
- angular - 将复选框与数组中的元素绑定
- php - 如何在 laravel eloquent-has-many-deep 包中设置本地键和外键
- react-native - 多次到达 FlatList 底部时对本机火灾事件做出反应