Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/shwenzhang/AndResGuard
proguard resource for Android by wechat team
https://github.com/shwenzhang/AndResGuard
Last synced: about 1 month ago
JSON representation
proguard resource for Android by wechat team
- Host: GitHub
- URL: https://github.com/shwenzhang/AndResGuard
- Owner: shwenzhang
- License: apache-2.0
- Created: 2015-10-11T11:48:06.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2023-10-20T04:14:07.000Z (about 1 year ago)
- Last Synced: 2024-10-29T15:31:13.561Z (about 1 month ago)
- Language: Java
- Homepage:
- Size: 7.96 MB
- Stars: 8,537
- Watchers: 269
- Forks: 1,537
- Open Issues: 167
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Security: SECURITY.md
Awesome Lists containing this project
- my-awesome - shwenzhang/AndResGuard - 10 star:8.5k fork:1.5k proguard resource for Android by wechat team (Java)
- awesome-hacking-lists - shwenzhang/AndResGuard - proguard resource for Android by wechat team (Java)
README
# AndResGuard
[![Build Status](https://travis-ci.org/shwenzhang/AndResGuard.svg?branch=master)](https://travis-ci.org/shwenzhang/AndResGuard)
[ ![Download](https://api.bintray.com/packages/wemobiledev/maven/com.tencent.mm%3AAndResGuard-core/images/download.svg) ](https://bintray.com/wemobiledev/maven/com.tencent.mm%3AAndResGuard-core/_latestVersion)
[![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-AndResGuard-green.svg?style=true)](https://android-arsenal.com/details/1/3034)*Read this in other languages: [English](README.md), [简体中文](README.zh-cn.md).*
`AndResGuard` is a tooling for reducing your apk size, it works like the `ProGuard` for Java source code, but only aim at the resource files. It changes `res/drawable/wechat` to `r/d/a`, and renames the resource file `wechat.png` to `a.png`. Finally, it repackages the apk with 7zip, which can reduce the package size obviously.
`AndResGuard` is fast, and it does **NOT** need the source codes. Input an Android apk, then we can get a 'ResGuard' apk in a few seconds.
Some uses of `AndResGuard` are:
1. Obfuscate android resources. It contains all the resource type(such as drawable、layout、string...). It can prevent your apk from being reversed by `Apktool`.
2. Shrinking the apk size. It can reduce the `resources.arsc` and the package size obviously.
3. Repackage with `7zip`. It supports repackage apk with `7zip`, and we can specify the compression method for each file.
`AndResGuard` is a command-line tool, it supports Windows, Linux and Mac. We suggest you to use 7zip in Linux or Mac platform for a higher compression ratio.
## How to use
### With Gradle
This has been released on `Bintray`
```gradle
apply plugin: 'AndResGuard'buildscript {
repositories {
jcenter()
google()
}
dependencies {
classpath 'com.tencent.mm:AndResGuard-gradle-plugin:1.2.21'
}
}andResGuard {
// mappingFile = file("./resource_mapping.txt")
mappingFile = null
use7zip = true
useSign = true
// It will keep the origin path of your resources when it's true
keepRoot = false
// If set, name column in arsc those need to proguard will be kept to this value
fixedResName = "arg"
// It will merge the duplicated resources, but don't rely on this feature too much.
// it's always better to remove duplicated resource from repo
mergeDuplicatedRes = true
whiteList = [
// your icon
"R.drawable.icon",
// for fabric
"R.string.com.crashlytics.*",
// for google-services
"R.string.google_app_id",
"R.string.gcm_defaultSenderId",
"R.string.default_web_client_id",
"R.string.ga_trackingId",
"R.string.firebase_database_url",
"R.string.google_api_key",
"R.string.google_crash_reporting_api_key",
"R.string.project_id",
]
compressFilePattern = [
"*.png",
"*.jpg",
"*.jpeg",
"*.gif",
]
sevenzip {
artifact = 'com.tencent.mm:SevenZip:1.2.21'
//path = "/usr/local/bin/7za"
}/**
* Optional: if finalApkBackupPath is null, AndResGuard will overwrite final apk
* to the path which assemble[Task] write to
**/
// finalApkBackupPath = "${project.rootDir}/final.apk"/**
* Optional: Specifies the name of the message digest algorithm to user when digesting the entries of JAR file
* Only works in V1signing, default value is "SHA-1"
**/
// digestalg = "SHA-256"
}
```### Wildcard
The whiteList and compressFilePattern support wildcard include ? * +.```
? Zero or one character
* Zero or more of character
+ One or more of character
```### WhiteList
You need put all resource which access via `getIdentifier` into whiteList.
**You can find more whitsList configs of third-part SDK in [white_list.md](doc/white_list.md). Welcome PR your configs which is not included in white_list.md**The whiteList only works on the specsName of resources, it wouldn't keep the path of resource.
If you wanna keeping the path, please use `mappingFile` to implement it.For example, we wanna keeping the path of icon, we need add below into our `mappingFile`.
```
res path mapping:
res/mipmap-hdpi-v4 -> res/mipmap-hdpi-v4
res/mipmap-mdpi-v4 -> res/mipmap-mdpi-v4
res/mipmap-xhdpi-v4 -> res/mipmap-xhdpi-v4
res/mipmap-xxhdpi-v4 -> res/mipmap-xxhdpi-v4
res/mipmap-xxxhdpi-v4 -> res/mipmap-xxxhdpi-v4
```### How to Launch
If you are using `Android Studio`, you can find the generate task option in ```andresguard``` group.
Or alternatively, you run ```./gradlew resguard[BuildType | Flavor]``` in your terminal. The format of task name is as same as `assemble`.### Sevenzip
The `sevenzip` in gradle file can be set by `path` or `artifact`. Multiple assignments are allowed, but the winner is **always** `path`.### Result
If finalApkBackupPath is null, AndResGuard will overwrite final APK to the path which assemble[Task] write. Otherwise, it will store in the path you assigned.### Other
[Looking for more detail](doc/how_to_work.md)## Known Issue
1. The first element of list which returned by `AssetManager#list(String path)` is empty string when you're using the APK which is compressed by 7zip. [#162](https://github.com/shwenzhang/AndResGuard/issues/162)## Best Practise
1. Do **NOT** add `resources.arsc` into `compressFilePattern` unless the app size is really matter to you.([#84](https://github.com/shwenzhang/AndResGuard/issues/84) [#233](https://github.com/shwenzhang/AndResGuard/issues/233))
2. Do **NOT** enable 7zip compression(`use7zip`) when you distribute your APP on Google Play. It'll prevent the file-by-file patch when updating your APP. ([#233](https://github.com/shwenzhang/AndResGuard/issues/233))## Thanks
[Apktool](https://github.com/iBotPeaches/Apktool) Connor Tumbleson[v2sig](https://github.com/shwenzhang/AndResGuard/pull/133) @jonyChina162