AabResGuard
A tool used to obfuscate aab resources.
Features
A tool used to obfuscate aab resources.
- Merge duplicated resources: Consolidate duplicate resource files to reduce package size.
- Filter bundle files: Support for filtering files in the
bundle
package. Currently only supports filtering in theMATE-INFO/
andlib/
paths. - White list: The resources in the whitelist are not to be obfuscated.
- Incremental obfuscation: Input the
mapping
file to support incremental obfuscation. - Remove string: Input the unused file splits by lines to support remove strings.
- ???: Looking ahead, there will be more feature support, welcome to submit PR & issue.
Data of size savings
AabResGuard is a resource obfuscation tool powered by the douyin Android team. It has been launched at the end of July 2018 in several overseas products, such as Tiktok, Vigo, etc.
There is no feedback on related resource issues.
For more data details, please go to Data of size savings.
Quick start
- Command tool: Support command line.
- Gradle plugin: Support for
gradle plugin
, using the original packaging command to execute obfuscation.
Gradle plugin
Configured in build.gradle(root project)
buildscript {
repositories {
mavenCentral()
jcenter()
google()
}
dependencies {
classpath "com.bytedance.android:aabresguard-plugin:0.1.0"
}
}
Configured in build.gradle(application)
apply plugin: "com.bytedance.android.aabResGuard"
aabResGuard {
mappingFile = file("mapping.txt").toPath() // Mapping file used for incremental obfuscation
whiteList = [ // White list rules
"*.R.raw.*",
"*.R.drawable.icon"
]
obfuscatedBundleFileName = "duplicated-app.aab" // Obfuscated file name, must end with '.aab'
mergeDuplicatedRes = true // Whether to allow the merge of duplicate resources
enableFilterFiles = true // Whether to allow filter files
filterList = [ // file filter rules
"*/arm64-v8a/*",
"META-INF/*"
]
enableFilterStrings = false // switch of filter strings
unusedStringPath = file("unused.txt").toPath() // strings will be filtered in this file
languageWhiteList = ["en", "zh"] // keep en,en-xx,zh,zh-xx etc. remove others.
}
The aabResGuard plugin
intrudes the bundle
packaging process and can be obfuscated by executing the original packaging commands.
./gradlew clean :app:bundleDebug --stacktrace
Get the obfuscated bundle
file path by gradle
.
def aabResGuardPlugin = project.tasks.getByName("aabresguard${VARIANT_NAME}")
Path bundlePath = aabResGuardPlugin.getObfuscatedBundlePath()