-
Notifications
You must be signed in to change notification settings - Fork 406
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
aa1835f
commit 1b44559
Showing
36 changed files
with
1,393 additions
and
28 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,250 @@ | ||
|
||
This page will guide you through to the basic steps of processing your Android application or library with ProGuard. | ||
|
||
!!! tip "Java / Kotlin desktop or server projects" | ||
If you have a Java / Kotlin desktop or server project, you can find instructions [here](gradle.md). | ||
|
||
## ProGuard Gradle Plugin (AGP version 4.x - AGP 7.x) | ||
|
||
You can add the ProGuard plugin to your project by | ||
including the following in your root level `build.gradle(.kts)` file: | ||
|
||
=== "Groovy" | ||
```Groovy | ||
buildscript { | ||
repositories { | ||
google() // For the Android Gradle plugin. | ||
mavenCentral() // For the ProGuard Gradle Plugin and anything else. | ||
} | ||
dependencies { | ||
classpath 'com.android.tools.build:gradle:x.y.z' // The Android Gradle plugin. | ||
classpath 'com.guardsquare:proguard-gradle:7.1.0' // The ProGuard Gradle plugin. | ||
} | ||
} | ||
``` | ||
=== "Kotlin" | ||
```kotlin | ||
buildscript { | ||
repositories { | ||
google() // For the Android Gradle plugin. | ||
mavenCentral() // For the ProGuard Gradle Plugin and anything else. | ||
} | ||
dependencies { | ||
classpath("com.android.tools.build:gradle:x.y.z") // The Android Gradle plugin. | ||
classpath("com.guardsquare:proguard-gradle:7.1.0") // The ProGuard Gradle plugin. | ||
} | ||
} | ||
``` | ||
|
||
To actually apply the plugin to your project, | ||
just add the line to your module level `build.gradle(.kts)` file after applying the Android Gradle plugin as shown below. | ||
|
||
=== "Groovy" | ||
```Groovy | ||
apply plugin: 'com.android.application' | ||
apply plugin: 'com.guardsquare.proguard' | ||
``` | ||
=== "Kotlin" | ||
```kotlin | ||
plugins { | ||
id("com.android.application") | ||
id("proguard") | ||
} | ||
``` | ||
|
||
ProGuard expects unobfuscated class files as input. Therefore, other obfuscators such as R8 have to be disabled. | ||
|
||
=== "Groovy" | ||
```Groovy | ||
android { | ||
... | ||
buildTypes { | ||
release { | ||
// Deactivate R8. | ||
minifyEnabled false | ||
} | ||
} | ||
} | ||
``` | ||
=== "Kotlin" | ||
```kotlin | ||
android { | ||
... | ||
buildTypes { | ||
getByName("release") { | ||
// Deactivate R8. | ||
isMinifyEnabled = false | ||
} | ||
} | ||
} | ||
``` | ||
|
||
ProGuard can be executed automatically whenever you build any of the configured variants. | ||
You can configure a variant using the `proguard` block in your module level `build.gradle(.kts)` files. | ||
This is a top-level block and should be placed outside the `android` block. | ||
|
||
For example, in the snippet below, ProGuard is configured to only process the release variant of the application, | ||
using a configuration provided by the user (`proguard-project.txt`) and a [default configuration](#default-configurations) (`proguard-android-optimize.txt`). | ||
|
||
=== "Groovy" | ||
```Groovy | ||
android { | ||
... | ||
} | ||
|
||
proguard { | ||
configurations { | ||
release { | ||
defaultConfiguration 'proguard-android-optimize.txt' | ||
configuration 'proguard-project.txt' | ||
} | ||
} | ||
} | ||
``` | ||
=== "Kotlin" | ||
```kotlin | ||
android { | ||
... | ||
} | ||
|
||
proguard { | ||
configurations { | ||
register("release") { | ||
defaultConfiguration("proguard-android-optimize.txt") | ||
configuration("proguard-project.txt") | ||
} | ||
} | ||
} | ||
``` | ||
|
||
You can then build your application as usual: | ||
|
||
=== "Linux/macOS" | ||
```sh | ||
./gradlew assembleRelease | ||
``` | ||
=== "Windows" | ||
``` | ||
gradlew assembleRelease | ||
``` | ||
|
||
### Default configurations | ||
|
||
There are three default configurations available: | ||
|
||
| Default configuration | Description | | ||
|-----------------------|-------------| | ||
| `proguard-android.txt` | ProGuard will obfuscate and shrink your application | | ||
| `proguard-android-optimize.txt` | ProGuard will obfuscate, shrink and optimize your application | | ||
| `proguard-android-debug.txt` | ProGuard will process the application without any obfuscation,<br>optimization or shrinking | | ||
|
||
### Consumer rules | ||
|
||
ProGuard will apply the consumer rules provided by library dependencies. If you need to exclude these rules, | ||
you can use the `consumerRuleFilter`. | ||
|
||
#### consumerRuleFilter | ||
|
||
The `consumerRuleFilter` option allows you to specify a list of maven group and | ||
module name pairs to filter out the ProGuard consumer rules of the dependencies | ||
that match the specified group and module pairs. | ||
|
||
A group and module name pair is very similar to the maven coordinates you write | ||
when specifying the dependencies in the `dependencies` block, but without the | ||
version part. | ||
|
||
=== "Groovy" | ||
```Groovy | ||
proguard { | ||
configurations { | ||
release { | ||
consumerRuleFilter 'groupName:moduleName', 'anotherGroupName:anotherModuleName' | ||
} | ||
} | ||
} | ||
``` | ||
=== "Kotlin" | ||
```Kotlin | ||
proguard { | ||
configurations { | ||
register("release") { | ||
consumerRuleFilter("groupName:moduleName", "anotherGroupName:anotherModuleName") | ||
} | ||
} | ||
} | ||
``` | ||
|
||
### Example | ||
|
||
The example [`android-plugin`](https://github.com/Guardsquare/proguard/tree/master/examples/android-plugin) | ||
has a small working Android project using the ProGuard Gradle Plugin. | ||
|
||
## AGP Integrated ProGuard (AGP version <7) | ||
|
||
ProGuard is integrated with older versions of the Android Gradle plugin. | ||
If you have an Android Gradle project that uses such an AGP version, | ||
you can enable ProGuard instead of the default `R8` obfuscator as follows: | ||
|
||
1. Disable R8 in your `gradle.properties`: | ||
```ini | ||
android.enableR8=false | ||
android.enableR8.libraries=false | ||
``` | ||
|
||
2. Override the default version of ProGuard with the most recent one in your | ||
main `build.gradle`: | ||
```Groovy | ||
buildscript { | ||
... | ||
configurations.all { | ||
resolutionStrategy { | ||
dependencySubstitution { | ||
substitute module('net.sf.proguard:proguard-gradle') with module('com.guardsquare:proguard-gradle:7.1.0') | ||
} | ||
} | ||
} | ||
} | ||
``` | ||
|
||
3. Enable minification as usual in your `build.gradle`: | ||
```Groovy | ||
android { | ||
... | ||
buildTypes { | ||
release { | ||
minifyEnabled true | ||
shrinkResources true | ||
proguardFile getDefaultProguardFile('proguard-android-optimize.txt') | ||
proguardFile 'proguard-project.txt' | ||
} | ||
} | ||
} | ||
``` | ||
|
||
There are two default configurations available when using the integrated ProGuard: | ||
|
||
| Default configuration | Description | | ||
|-----------------------|-------------| | ||
| `proguard-android.txt` | ProGuard will obfuscate and shrink your application | | ||
| `proguard-android-optimize.txt` | ProGuard will obfuscate, shrink and optimize your application | | ||
|
||
4. Add any necessary configuration to your `proguard-project.txt`. | ||
|
||
You can then build your application as usual: | ||
|
||
=== "Linux/macOS" | ||
```sh | ||
./gradlew assembleRelease | ||
``` | ||
=== "Windows" | ||
``` | ||
gradlew assembleRelease | ||
``` | ||
|
||
### Example | ||
|
||
The example [`android-agp3-agp4`](https://github.com/Guardsquare/proguard/tree/master/examples/android-agp3-agp4) | ||
has a small working Android project for AGP < 7. | ||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
<?xml version="1.0" encoding="utf-8"?> | ||
<manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||
package="com.example" | ||
android:versionCode="1" | ||
android:versionName="1.0"> | ||
<application android:label="@string/app_name" | ||
android:icon="@drawable/ic_launcher" | ||
android:theme="@style/AppTheme"> | ||
<activity android:name="HelloWorldActivity" | ||
android:label="@string/app_name"> | ||
<intent-filter> | ||
<action android:name="android.intent.action.MAIN" /> | ||
<category android:name="android.intent.category.LAUNCHER" /> | ||
</intent-filter> | ||
</activity> | ||
</application> | ||
</manifest> |
Oops, something went wrong.