android - 如何在android studio中混淆包名

标签 android android-studio obfuscation android-proguard

我已经使用下面的代码成功混淆了类名和方法

buildTypes {
    release {
        shrinkResources false
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.release
    }
}

在应用级build.gradle文件

-dontwarn mypackage.**
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose
-dontwarn

proguard-rules.pro

但我的问题是包名没有被混淆。

那么我该如何实现,请帮忙。

谢谢

最佳答案

在 Pro-Guard 中,包名可以在 various ways 中混淆,随着混淆和紧凑程度的增加。例如,考虑以下类:

mycompany.myapplication.MyMain 
mycompany.myapplication.Foo
mycompany.myapplication.Bar 
mycompany.myapplication.extra.FirstExtra 
mycompany.myapplication.extra.SecondExtra 
mycompany.util.FirstUtil mycompany.util.SecondUtil

假设类名 mycompany.myapplication.MyMain 是配置保留的主要应用程序类。 除 Main 之外的所有其他类名都可以被混淆。

默认情况下,包含无法重命名的类的包也不会重命名,并且保留包层次结构。这会导致像这样混淆的类名:

mycompany.myapplication.MyMain 
mycompany.myapplication.a 
mycompany.myapplication.b 
mycompany.myapplication.a.a 
mycompany.myapplication.a.b 
mycompany.a.a 
mycompany.a.b

-flattenpackagehierarchy 选项通过展平混淆包的包层次结构来进一步混淆包名称:

-flattenpackagehierarchy 'myobfuscated'

或者,-repackageclasses 选项通过将混淆的类组合到一个包中来混淆整个包:

-repackageclasses 'myobfuscated'

混淆后的类名如下所示:

mycompany.myapplication.MyMain 
mycompany.myapplication.a 
mycompany.myapplication.b 
myobfuscated.a 
myobfuscated.b 
myobfuscated.c 
myobfuscated.d

另外指定 -allowaccessmodification 选项允许扩大类和类成员的访问权限,从而提供重新打包所有混淆类的机会:

-repackageclasses 'myobfuscated' 
-allowaccessmodification

混淆后的类名如下所示:

mycompany.myapplication.MyMain 
myobfuscated.a 
myobfuscated.b 
myobfuscated.c 
myobfuscated.d 
myobfuscated.e 
myobfuscated.f 

指定的目标包始终可以是根包。例如:

-repackageclasses '' 
-allowaccessmodification

混淆后的类名是尽可能短的名称:

mycompany.myapplication.MyMain 
a 
b 
c 
d 
e 
f

请注意,并非所有代码都可以接受所有级别的包名称混淆。值得注意的是,您可能必须考虑到您的应用程序可能包含必须调整的资源文件。

混淆代码 在 Android studio 中只需访问 this post .

或者将您的代码导入 NetBeans 并使用其内置功能来编译、预验证、混淆和打包代码)))。

关于android - 如何在android studio中混淆包名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46884364/

相关文章:

java - 如何着手在 Android 中创建交互式 map

android - TextView 的白色背景不透明度为 50%

android - 如何在 android studio 上导出已签名的 android 应用程序

mysql - 假名数据到 MySQL 查询

c# - 混淆后从 Settings.settings 文件读取

android - 如何将 Room 表导出为 CSV 格式?

android - 10 英寸平板电脑上的偏好菜单

android-studio - Android Studio 无法同步和构建新旧 kotlin 项目

android - 使用命令行时 Gradle 构建失败

javascript - JavaScript 源加密对于混淆有用吗?