如何在android studio中混淆包名称

Neh*_*kla 4 obfuscation android android-studio android-proguard

我使用以下代码成功混淆了类名和方法

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

在应用程序级build.gradle文件中

-dontwarn mypackage.**
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose
-dontwarn
Run Code Online (Sandbox Code Playgroud)

proguard-rules.pro

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

那我怎样才能达到它,请帮忙。

谢谢

小智 7

在 Pro-Guard 中,包名可以通过各种方式进行混淆,混淆程度和紧凑程度越来越高。例如,考虑以下类:

mycompany.myapplication.MyMain 
mycompany.myapplication.Foo
mycompany.myapplication.Bar 
mycompany.myapplication.extra.FirstExtra 
mycompany.myapplication.extra.SecondExtra 
mycompany.util.FirstUtil mycompany.util.SecondUtil
Run Code Online (Sandbox Code Playgroud)

让我们假设类名 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
Run Code Online (Sandbox Code Playgroud)

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

-flattenpackagehierarchy 'myobfuscated'
Run Code Online (Sandbox Code Playgroud)

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

-repackageclasses 'myobfuscated'
Run Code Online (Sandbox Code Playgroud)

混淆后的类名如下所示:

mycompany.myapplication.MyMain 
mycompany.myapplication.a 
mycompany.myapplication.b 
myobfuscated.a 
myobfuscated.b 
myobfuscated.c 
myobfuscated.d
Run Code Online (Sandbox Code Playgroud)

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

-repackageclasses 'myobfuscated' 
-allowaccessmodification
Run Code Online (Sandbox Code Playgroud)

混淆后的类名如下所示:

mycompany.myapplication.MyMain 
myobfuscated.a 
myobfuscated.b 
myobfuscated.c 
myobfuscated.d 
myobfuscated.e 
myobfuscated.f 
Run Code Online (Sandbox Code Playgroud)

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

-repackageclasses '' 
-allowaccessmodification
Run Code Online (Sandbox Code Playgroud)

混淆后的类名是最短的名称:

mycompany.myapplication.MyMain 
a 
b 
c 
d 
e 
f
Run Code Online (Sandbox Code Playgroud)

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

在 Android Studio 中混淆代码 请访问这篇文章

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