├── ReDexSample
├── .gitignore
├── src
│ └── main
│ │ ├── res
│ │ ├── values
│ │ │ ├── strings.xml
│ │ │ ├── colors.xml
│ │ │ └── styles.xml
│ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ ├── drawable-v24
│ │ │ ├── myvideo_icon.png
│ │ │ ├── launch_bg.xml
│ │ │ └── ic_launcher_foreground.xml
│ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ ├── mipmap-anydpi-v26
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ ├── layout
│ │ │ └── activity_main.xml
│ │ └── drawable
│ │ │ └── ic_launcher_background.xml
│ │ ├── java
│ │ └── com
│ │ │ └── sample
│ │ │ └── redex
│ │ │ ├── SampleApplication.java
│ │ │ └── MainActivity.java
│ │ └── AndroidManifest.xml
├── keystore
│ └── debug.keystore
├── proguard-rules.pro
├── build.gradle
└── configuration.txt
├── settings.gradle
├── .gitignore
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── redex-test
├── interdex.config
└── stripdebuginfo.config
├── gradle.properties
├── gradlew.bat
├── README.md
└── gradlew
/ReDexSample/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':ReDexSample'
2 |
--------------------------------------------------------------------------------
/ReDexSample/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | redex
3 |
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | .DS_Store
5 | **/build/
6 | /captures
7 | **/.externalNativeBuild/
8 | .idea/
9 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter22/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/ReDexSample/keystore/debug.keystore:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter22/HEAD/ReDexSample/keystore/debug.keystore
--------------------------------------------------------------------------------
/ReDexSample/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter22/HEAD/ReDexSample/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/ReDexSample/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter22/HEAD/ReDexSample/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/ReDexSample/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter22/HEAD/ReDexSample/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/ReDexSample/src/main/res/drawable-v24/myvideo_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter22/HEAD/ReDexSample/src/main/res/drawable-v24/myvideo_icon.png
--------------------------------------------------------------------------------
/ReDexSample/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter22/HEAD/ReDexSample/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/ReDexSample/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter22/HEAD/ReDexSample/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/ReDexSample/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter22/HEAD/ReDexSample/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/ReDexSample/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter22/HEAD/ReDexSample/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/ReDexSample/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter22/HEAD/ReDexSample/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/ReDexSample/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter22/HEAD/ReDexSample/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/ReDexSample/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter22/HEAD/ReDexSample/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/ReDexSample/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #3F51B5
4 | #303F9F
5 | #FF4081
6 |
7 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Thu Nov 29 18:03:28 CST 2018
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
7 |
--------------------------------------------------------------------------------
/ReDexSample/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/ReDexSample/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/ReDexSample/src/main/res/drawable-v24/launch_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 | -
6 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ReDexSample/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/redex-test/interdex.config:
--------------------------------------------------------------------------------
1 | {
2 | "redex" : {
3 | "passes" : [
4 | "InterDexPass"
5 | ]
6 | },
7 | "InterDexPass" : {
8 | "minimize_cross_dex_refs": true,
9 | "minimize_cross_dex_refs_method_ref_weight": 100,
10 | "minimize_cross_dex_refs_field_ref_weight": 90,
11 | "minimize_cross_dex_refs_type_ref_weight": 100,
12 | "minimize_cross_dex_refs_string_ref_weight": 90
13 | },
14 | "string_sort_mode" : "class_order",
15 | "bytecode_sort_mode" : "class_order"
16 | }
--------------------------------------------------------------------------------
/redex-test/stripdebuginfo.config:
--------------------------------------------------------------------------------
1 | {
2 | "redex" : {
3 | "passes" : [
4 | "StripDebugInfoPass"
5 | ]
6 | },
7 | "StripDebugInfoPass" : {
8 | "drop_all_dbg_info" : "0",
9 | "drop_local_variables" : "1",
10 | "drop_line_numbers" : "0",
11 | "drop_src_files" : "0",
12 | "use_whitelist" : "0",
13 | "cls_whitelist" : [],
14 | "method_whitelist" : [],
15 | "drop_prologue_end" : "1",
16 | "drop_epilogue_begin" : "1",
17 | "drop_all_dbg_info_if_empty" : "1"
18 | }
19 |
20 | }
--------------------------------------------------------------------------------
/ReDexSample/src/main/java/com/sample/redex/SampleApplication.java:
--------------------------------------------------------------------------------
1 | package com.sample.redex;
2 |
3 |
4 | import android.app.Application;
5 | import android.content.Context;
6 |
7 | public class SampleApplication extends Application {
8 |
9 | public SampleApplication() {
10 | }
11 |
12 | @Override
13 | public void onCreate() {
14 | super.onCreate();
15 |
16 | }
17 |
18 | @Override
19 | protected void attachBaseContext(final Context base) {
20 | super.attachBaseContext(base);
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/ReDexSample/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
12 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 | # IDE (e.g. Android Studio) users:
3 | # Gradle settings configured through the IDE *will override*
4 | # any settings specified in this file.
5 | # For more details on how to configure your build environment visit
6 | # http://www.gradle.org/docs/current/userguide/build_environment.html
7 | # Specifies the JVM arguments used for the daemon process.
8 | # The setting is particularly useful for tweaking memory settings.
9 | org.gradle.jvmargs=-Xmx1536m
10 | # When configured, Gradle will run in incubating parallel mode.
11 | # This option should only be used with decoupled projects. More details, visit
12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
13 | # org.gradle.parallel=true
14 |
15 |
16 |
--------------------------------------------------------------------------------
/ReDexSample/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
12 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/ReDexSample/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 | #-keep class sample.dex.com.dextranformsample.Dex*{*;}
23 |
24 | -printconfiguration configuration.txt
25 | -dontoptimize
26 | -dontshrink
27 | -ignorewarnings
28 | -dontobfuscate
29 | -keepattributes SourceFile,LineNumberTable
30 | -keep class com.sample.oatmeal {*;}
31 |
--------------------------------------------------------------------------------
/ReDexSample/src/main/res/drawable-v24/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
1 |
7 |
12 |
13 |
19 |
22 |
25 |
26 |
27 |
28 |
34 |
35 |
--------------------------------------------------------------------------------
/ReDexSample/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion 27
5 | defaultConfig {
6 | applicationId "com.sample.redex"
7 | minSdkVersion 21
8 | targetSdkVersion 27
9 | versionCode 1
10 | versionName "1.0"
11 | multiDexEnabled true
12 | }
13 | signingConfigs {
14 | debug {
15 | storeFile file("./keystore/debug.keystore")
16 | }
17 | }
18 | buildTypes {
19 | release {
20 | minifyEnabled true
21 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
22 | signingConfig signingConfigs.debug
23 | }
24 | debug {
25 | minifyEnabled false
26 | signingConfig signingConfigs.debug
27 |
28 | }
29 | }
30 |
31 | }
32 |
33 |
34 |
35 | dependencies {
36 | implementation fileTree(dir: 'libs', include: ['*.jar'])
37 |
38 | implementation 'com.android.support:appcompat-v7:27.1.0'
39 |
40 | // 这里主要是为了把Dex变多一些
41 | implementation group: 'com.google.guava', name: 'guava', version: '19.0'
42 | implementation "org.scala-lang:scala-library:2.11.7"
43 | implementation "com.squareup.okhttp3:okhttp:3.5.0"
44 | implementation 'com.facebook.fresco:fresco:1.12.1'
45 | implementation "io.reactivex.rxjava2:rxjava:2.2.6"
46 | implementation 'com.squareup.picasso:picasso:2.71828'
47 | implementation 'com.alibaba:fastjson:1.1.70.android'
48 | implementation 'com.github.bumptech.glide:glide:4.8.0'
49 | implementation 'com.google.code.gson:gson:2.8.5'
50 | implementation 'com.google.android.play:core:1.3.4'
51 | implementation 'com.tencent.tinker:tinker-android-lib:1.9.1'
52 | implementation 'com.tencent.wcdb:wcdb-android:1.0.8'
53 | implementation 'com.tencent.mars:mars-core:1.2.2'
54 | implementation 'com.google.android.gms:play-services-base:16.0.0'
55 | implementation 'com.google.android.gms:play-services-gcm:16.0.0'
56 | implementation 'com.google.android.gms:play-services-ads:16.0.0'
57 | implementation 'com.google.android.gms:play-services-maps:16.0.0'
58 |
59 | implementation 'com.google.android.gms:play-services-gcm:16.0.0'
60 |
61 | }
62 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | set DIRNAME=%~dp0
12 | if "%DIRNAME%" == "" set DIRNAME=.
13 | set APP_BASE_NAME=%~n0
14 | set APP_HOME=%DIRNAME%
15 |
16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
17 | set DEFAULT_JVM_OPTS=
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windows variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 |
53 | :win9xME_args
54 | @rem Slurp the command line arguments.
55 | set CMD_LINE_ARGS=
56 | set _SKIP=2
57 |
58 | :win9xME_args_slurp
59 | if "x%~1" == "x" goto execute
60 |
61 | set CMD_LINE_ARGS=%*
62 |
63 | :execute
64 | @rem Setup the command line
65 |
66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
67 |
68 | @rem Execute Gradle
69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
70 |
71 | :end
72 | @rem End local scope for the variables with windows NT shell
73 | if "%ERRORLEVEL%"=="0" goto mainEnd
74 |
75 | :fail
76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
77 | rem the _cmd.exe /c_ return code!
78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
79 | exit /b 1
80 |
81 | :mainEnd
82 | if "%OS%"=="Windows_NT" endlocal
83 |
84 | :omega
85 |
--------------------------------------------------------------------------------
/ReDexSample/src/main/java/com/sample/redex/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.sample.redex;
2 |
3 | import java.io.PrintWriter;
4 | import java.io.StringWriter;
5 | import java.net.UnknownHostException;
6 | import java.util.Collections;
7 | import java.util.IdentityHashMap;
8 | import java.util.Set;
9 |
10 | import android.app.Activity;
11 | import android.os.Bundle;
12 | import android.util.Log;
13 |
14 | public class MainActivity extends Activity {
15 |
16 | @Override
17 | protected void onCreate(Bundle savedInstanceState) {
18 | super.onCreate(savedInstanceState);
19 | setContentView(R.layout.activity_main);
20 | Log.e("test", getStackTraceString(new Throwable()));
21 |
22 | }
23 |
24 | public static String getStackTraceString(Throwable tr) {
25 | if (tr == null) {
26 | return "";
27 | }
28 |
29 | Throwable t0 = tr;
30 | while (t0 != null) {
31 | if (t0 instanceof UnknownHostException) {
32 | return "";
33 | }
34 | t0 = t0.getCause();
35 | }
36 |
37 | StringWriter sw = new StringWriter();
38 | final PrintWriter pw = new PrintWriter(sw, false);
39 | Set dejaVu =
40 | Collections.newSetFromMap(new IdentityHashMap());
41 | dejaVu.add(tr);
42 |
43 | pw.println(tr);
44 | StackTraceElement[] trace = tr.getStackTrace();
45 | for (StackTraceElement traceElement : trace)
46 | pw.println("\tat " + traceElement);
47 |
48 | Throwable ourCause = tr.getCause();
49 | while (ourCause != null) {
50 | printEnclosedStackTrace(ourCause, pw, trace, "Caused by: ", "", dejaVu);
51 | ourCause = ourCause.getCause();
52 | }
53 |
54 | pw.flush();
55 | return sw.toString();
56 | }
57 |
58 | private static void printEnclosedStackTrace(Throwable t, PrintWriter s,
59 | StackTraceElement[] enclosingTrace,
60 | String caption,
61 | String prefix,
62 | Set dejaVu) {
63 | if (dejaVu.contains(t)) {
64 | s.println("\t[CIRCULAR REFERENCE:" + t + "]");
65 | } else {
66 | dejaVu.add(t);
67 | StackTraceElement[] trace = t.getStackTrace();
68 | int m = trace.length - 1;
69 | int n = enclosingTrace.length - 1;
70 | while (m >= 0 && n >=0 && trace[m].equals(enclosingTrace[n])) {
71 | m--; n--;
72 | }
73 | int framesInCommon = trace.length - 1 - m;
74 |
75 | s.println(prefix + caption + t);
76 | for (int i = 0; i <= m; i++)
77 | s.println(prefix + "\tat " + trace[i]);
78 | if (framesInCommon != 0)
79 | s.println(prefix + "\t... " + framesInCommon + " more");
80 | }
81 | }
82 | }
83 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Chapter22
2 | 今天我们尝试使用facebook redex库来优化我们的安装包。
3 |
4 | 不过个人感觉redex太过于复杂了,内部还耦合着很多Facebook特有的逻辑。
5 |
6 | 个人更加建议掌握原理之后,自己实现一套轻量简单的。
7 |
8 | 安装redex
9 | =======
10 | 在 github checkout [redex](https://github.com/facebook/redex)的源码,
11 |
12 | 根据readme完成编译:
13 | ```
14 | git clone https://github.com/facebook/redex.git
15 | cd redex
16 |
17 | autoreconf -ivf && ./configure && make -j4
18 | sudo make install
19 | ```
20 |
21 | 编译RedexSample
22 | =============
23 | RedexSample通过引入一大堆开源库,尝试把dex数量变多一些。直接编译即可
24 | ```
25 | assembleDebug
26 | ```
27 |
28 | 通过redex命令优化
29 | ===========
30 |
31 | 1. 为了可以更加清楚流程,可以输出redex的日志
32 | ```
33 | export TRACE=2
34 | ```
35 |
36 | 2. 去除debuginfo的方法
37 | ```
38 | redex --sign -s ReDexSample/keystore/debug.keystore -a androiddebugkey -p android -c redex-test/stripdebuginfo.config -P ReDexSample/proguard-rules.pro -o redex-test/strip_output.apk ReDexSample/build/outputs/apk/debug/ReDexSample-debug.apk
39 |
40 | ```
41 |
42 | 可以看到这样的日志
43 | ```
44 | Running StripDebugInfoPass...
45 | matched on 105417 methods. Removed 0 dbg line entries, 103172 dbg local var entries, 0 dbg prologue start entries, 0 epilogue end entries and 14107 empty dbg tables.
46 | StripDebugInfoPass (run) completed in 0.1 seconds
47 |
48 | ```
49 |
50 | 再次安装查看是否堆栈行号还存在
51 | ```
52 | 2019-02-08 23:52:20.763 13117-13117/com.sample.redex E/test: java.lang.Throwable
53 | at com.sample.redex.MainActivity.onCreate(MainActivity.java:20)
54 | at android.app.Activity.performCreate(Activity.java:7436)
55 | at android.app.Activity.performCreate(Activity.java:7426)
56 | at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1286)
57 | at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3279)
58 | at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3484)
59 | at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:86)
60 | at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
61 | at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
62 | at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2123)
63 | at android.os.Handler.dispatchMessage(Handler.java:109)
64 | at android.os.Looper.loop(Looper.java:207)
65 | at android.app.ActivityThread.main(ActivityThread.java:7470)
66 | at java.lang.reflect.Method.invoke(Native Method)
67 | at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:524)
68 | at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:958)
69 |
70 | ```
71 |
72 | 3. Dex重分包的方法
73 | ```
74 | redex --sign -s ReDexSample/keystore/debug.keystore -a androiddebugkey -p android -c redex-test/interdex.config -P ReDexSample/proguard-rules.pro -o redex-test/interdex_output.apk ReDexSample/build/outputs/apk/debug/ReDexSample-debug.apk
75 |
76 | ```
77 |
78 | 需要注意的是,redex不会处理第一个dex,因为第一个dex是需要maindex pattern来指定的。会有以下的日志:
79 |
80 | ```
81 | Running InterDexPass...
82 | [primary dex]: 0 out of 228 classes in primary dex from interdex list.
83 | [primary dex]: 0 out of 228 classes in primary dex skipped from interdex list.
84 | Writing out primary dex with 228 classes.
85 | No interdex classes passed.
86 | [dex ordering] Cross-dex-ref-minimizer active with method ref weight 100, field ref weight 90, type ref weight 100, string ref weight 90.
87 | Writing out secondary dex number 1, which is not part of of coldstart, not part of of extended set, doesn't have scroll classes and has 6511 classes.
88 | Writing out secondary dex number 2, which is not part of of coldstart, not part of of extended set, doesn't have scroll classes and has 7566 classes.
89 | Writing out secondary dex number 3, which is not part of of coldstart, not part of of extended set, doesn't have scroll classes and has 19 classes.
90 |
91 | ```
92 |
93 | 然后查看原包与生成的interdex_output.apk的分包差异,个人认为redex的分包计算方法写的也是有那么一点问题,但是我们可以参考这个思路。
--------------------------------------------------------------------------------
/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 |
3 | ##############################################################################
4 | ##
5 | ## Gradle start up script for UN*X
6 | ##
7 | ##############################################################################
8 |
9 | # Attempt to set APP_HOME
10 | # Resolve links: $0 may be a link
11 | PRG="$0"
12 | # Need this for relative symlinks.
13 | while [ -h "$PRG" ] ; do
14 | ls=`ls -ld "$PRG"`
15 | link=`expr "$ls" : '.*-> \(.*\)$'`
16 | if expr "$link" : '/.*' > /dev/null; then
17 | PRG="$link"
18 | else
19 | PRG=`dirname "$PRG"`"/$link"
20 | fi
21 | done
22 | SAVED="`pwd`"
23 | cd "`dirname \"$PRG\"`/" >/dev/null
24 | APP_HOME="`pwd -P`"
25 | cd "$SAVED" >/dev/null
26 |
27 | APP_NAME="Gradle"
28 | APP_BASE_NAME=`basename "$0"`
29 |
30 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
31 | DEFAULT_JVM_OPTS=""
32 |
33 | # Use the maximum available, or set MAX_FD != -1 to use that value.
34 | MAX_FD="maximum"
35 |
36 | warn () {
37 | echo "$*"
38 | }
39 |
40 | die () {
41 | echo
42 | echo "$*"
43 | echo
44 | exit 1
45 | }
46 |
47 | # OS specific support (must be 'true' or 'false').
48 | cygwin=false
49 | msys=false
50 | darwin=false
51 | nonstop=false
52 | case "`uname`" in
53 | CYGWIN* )
54 | cygwin=true
55 | ;;
56 | Darwin* )
57 | darwin=true
58 | ;;
59 | MINGW* )
60 | msys=true
61 | ;;
62 | NONSTOP* )
63 | nonstop=true
64 | ;;
65 | esac
66 |
67 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
68 |
69 | # Determine the Java command to use to start the JVM.
70 | if [ -n "$JAVA_HOME" ] ; then
71 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
72 | # IBM's JDK on AIX uses strange locations for the executables
73 | JAVACMD="$JAVA_HOME/jre/sh/java"
74 | else
75 | JAVACMD="$JAVA_HOME/bin/java"
76 | fi
77 | if [ ! -x "$JAVACMD" ] ; then
78 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
79 |
80 | Please set the JAVA_HOME variable in your environment to match the
81 | location of your Java installation."
82 | fi
83 | else
84 | JAVACMD="java"
85 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
86 |
87 | Please set the JAVA_HOME variable in your environment to match the
88 | location of your Java installation."
89 | fi
90 |
91 | # Increase the maximum file descriptors if we can.
92 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
93 | MAX_FD_LIMIT=`ulimit -H -n`
94 | if [ $? -eq 0 ] ; then
95 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
96 | MAX_FD="$MAX_FD_LIMIT"
97 | fi
98 | ulimit -n $MAX_FD
99 | if [ $? -ne 0 ] ; then
100 | warn "Could not set maximum file descriptor limit: $MAX_FD"
101 | fi
102 | else
103 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
104 | fi
105 | fi
106 |
107 | # For Darwin, add options to specify how the application appears in the dock
108 | if $darwin; then
109 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
110 | fi
111 |
112 | # For Cygwin, switch paths to Windows format before running java
113 | if $cygwin ; then
114 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
115 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
116 | JAVACMD=`cygpath --unix "$JAVACMD"`
117 |
118 | # We build the pattern for arguments to be converted via cygpath
119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
120 | SEP=""
121 | for dir in $ROOTDIRSRAW ; do
122 | ROOTDIRS="$ROOTDIRS$SEP$dir"
123 | SEP="|"
124 | done
125 | OURCYGPATTERN="(^($ROOTDIRS))"
126 | # Add a user-defined pattern to the cygpath arguments
127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
129 | fi
130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
131 | i=0
132 | for arg in "$@" ; do
133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
135 |
136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
138 | else
139 | eval `echo args$i`="\"$arg\""
140 | fi
141 | i=$((i+1))
142 | done
143 | case $i in
144 | (0) set -- ;;
145 | (1) set -- "$args0" ;;
146 | (2) set -- "$args0" "$args1" ;;
147 | (3) set -- "$args0" "$args1" "$args2" ;;
148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
154 | esac
155 | fi
156 |
157 | # Escape application args
158 | save () {
159 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
160 | echo " "
161 | }
162 | APP_ARGS=$(save "$@")
163 |
164 | # Collect all arguments for the java command, following the shell quoting and substitution rules
165 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
166 |
167 | # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
168 | if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
169 | cd "$(dirname "$0")"
170 | fi
171 |
172 | exec "$JAVACMD" "$@"
173 |
--------------------------------------------------------------------------------
/ReDexSample/src/main/res/drawable/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
11 |
16 |
21 |
26 |
31 |
36 |
41 |
46 |
51 |
56 |
61 |
66 |
71 |
76 |
81 |
86 |
91 |
96 |
101 |
106 |
111 |
116 |
121 |
126 |
131 |
136 |
141 |
146 |
151 |
156 |
161 |
166 |
171 |
172 |
--------------------------------------------------------------------------------
/ReDexSample/configuration.txt:
--------------------------------------------------------------------------------
1 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/tinker-android-lib-1.9.1.aar/d0a4f05c68fe3c9c8b7dddb789b70b5f/jars/classes.jar(**.class)
2 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/tinker-android-loader-1.9.1.aar/f3c606e84afc607785e33a79d70f8216/jars/classes.jar(**.class)
3 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/5b397c6c5e8016cb7594fa8a6973bec9/jars/classes.jar(**.class)
4 | -injars /Users/uc/.gradle/caches/modules-2/files-2.1/com.google.guava/guava/19.0/6ce200f6b23222af3d8abb6b6459e6c44f4bb0e9/guava-19.0.jar(**.class)
5 | -injars /Users/uc/.gradle/caches/modules-2/files-2.1/org.scala-lang/scala-library/2.11.7/f75e7acabd57b213d6f61483240286c07213ec0e/scala-library-2.11.7.jar(**.class)
6 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/picasso-2.71828.aar/38cbbc06dafb6bf045f7ed5c2b5d035c/jars/classes.jar(**.class)
7 | -injars /Users/uc/.gradle/caches/modules-2/files-2.1/com.squareup.okhttp3/okhttp/3.10.0/7ef0f1d95bf4c0b3ba30bbae25e0e562b05cf75e/okhttp-3.10.0.jar(**.class)
8 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/fresco-1.12.1.aar/ce381fcffdfdc209598cf92bcb25e437/jars/classes.jar(**.class)
9 | -injars /Users/uc/.gradle/caches/modules-2/files-2.1/io.reactivex.rxjava2/rxjava/2.2.6/c0df91c5b9c98ebd28eec6764cb3416c195aec20/rxjava-2.2.6.jar(**.class)
10 | -injars /Users/uc/.gradle/caches/modules-2/files-2.1/com.alibaba/fastjson/1.1.70.android/133e74249176e8f5a5cd976bbfa491ac4f8b0c4e/fastjson-1.1.70.android.jar(**.class)
11 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/glide-4.8.0.aar/f8fd1bd9c8f0fe985be4018e6c87f509/jars/classes.jar(**.class)
12 | -injars /Users/uc/.gradle/caches/modules-2/files-2.1/com.google.code.gson/gson/2.8.5/f645ed69d595b24d4cf8b3fbb64cc505bede8829/gson-2.8.5.jar(**.class)
13 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/core-1.3.4.aar/d62552a9aa07872b7a387ba8eb388558/jars/classes.jar(**.class)
14 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/wcdb-android-1.0.8.aar/1334cf76777d1d9d6cd77ba4448aa693/jars/classes.jar(**.class)
15 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/mars-core-1.2.2.aar/95fdd08b43b19a4ae5cb2a25df6a535f/jars/classes.jar(**.class)
16 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/play-services-gcm-16.0.0.aar/9fb6511557b6c8080583292154d058a1/jars/classes.jar(**.class)
17 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/play-services-maps-16.0.0.aar/89c0806e7ee130bd6e11aa2eb1359297/jars/classes.jar(**.class)
18 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/play-services-iid-16.0.0.aar/79c252017f97df9dcca0d457588649a8/jars/classes.jar(**.class)
19 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/play-services-base-16.0.1.aar/4b3d04027a037298bafe71410b0a949a/jars/classes.jar(**.class)
20 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/play-services-ads-16.0.0.aar/5a7914d6f0c2225fa2bd4fd0118df0c6/jars/classes.jar(**.class)
21 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/exifinterface-27.1.0.aar/2a10747db5288c6406660817492b7165/jars/classes.jar(**.class)
22 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/gifdecoder-4.8.0.aar/61e1b245b51801a77f7c43bc53c726d3/jars/classes.jar(**.class)
23 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/customtabs-26.1.0.aar/c11c485c5c1d32f20d67fc76478c6d39/jars/classes.jar(**.class)
24 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/play-services-stats-16.0.1.aar/28f24d61789b9ca6eea65ae276e0cde2/jars/classes.jar(**.class)
25 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/play-services-ads-identifier-16.0.0.aar/7f5b930851735fab6a496b79f32a2c6a/jars/classes.jar(**.class)
26 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/play-services-ads-lite-16.0.0.aar/29df15b3d00afeb6ec7a26caa38ba538/jars/classes.jar(**.class)
27 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/play-services-gass-16.0.0.aar/ffdbfd6a4c18485d1ca3c1b0054b4390/jars/classes.jar(**.class)
28 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/play-services-tasks-16.0.1.aar/42af44526d691a51e36080653d5a1b83/jars/classes.jar(**.class)
29 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/play-services-basement-16.0.1.aar/b3387df9840d89e87189a36be8438969/jars/classes.jar(**.class)
30 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/support-v4-26.1.0.aar/876066b1d475f92ed482acd25b3ebe48/jars/classes.jar(**.class)
31 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/support-media-compat-26.1.0.aar/294af985be0eccd9f9a59f1477ea47fd/jars/classes.jar(**.class)
32 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/support-fragment-27.1.1.aar/98ca140b137c699c0f020d32da41d85f/jars/classes.jar(**.class)
33 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/animated-vector-drawable-27.1.0.aar/d253f202a2cfd0f48c023f062c870938/jars/classes.jar(**.class)
34 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/support-vector-drawable-27.1.0.aar/7374492aefd5a7e37a9519a0548a214f/jars/classes.jar(**.class)
35 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/support-core-ui-27.1.1.aar/5f7124d8511ff809329cea1f5ffc7007/jars/classes.jar(**.class)
36 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/support-core-utils-27.1.1.aar/574da4602dce2c8690175120d90ed166/jars/classes.jar(**.class)
37 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/support-compat-27.1.1.aar/8a0946f0ef55bc739d65a5aa1d139cea/jars/classes.jar(**.class)
38 | -injars /Users/uc/.gradle/caches/modules-2/files-2.1/com.android.support/support-annotations/27.1.1/39ded76b5e1ce1c5b2688e1d25cdc20ecee32007/support-annotations-27.1.1.jar(**.class)
39 | -injars /Users/uc/.gradle/caches/modules-2/files-2.1/com.squareup.okio/okio/1.14.0/102d7be47241d781ef95f1581d414b0943053130/okio-1.14.0.jar(**.class)
40 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/drawee-1.12.1.aar/66326456932c213191f7e8f2aa94b114/jars/classes.jar(**.class)
41 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/nativeimagefilters-1.12.1.aar/abf142a951bb364a5f0ae2fc4eea66e8/jars/classes.jar(**.class)
42 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/imagepipeline-1.12.1.aar/7d8593cf79dc648de86b6c2716204ff9/jars/classes.jar(**.class)
43 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/nativeimagetranscoder-1.12.1.aar/54eba4028ed591f7ebee581e875c726f/jars/classes.jar(**.class)
44 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/imagepipeline-base-1.12.1.aar/87c48de4fbab613ee9cb1e2ef012d9f5/jars/classes.jar(**.class)
45 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/fbcore-1.12.1.aar/ad37f9356def83bf459184cd416456b9/jars/classes.jar(**.class)
46 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/soloader-0.6.0.aar/81b6cd02518b5114d6bdfc49bb6801c6/jars/classes.jar(**.class)
47 | -injars /Users/uc/.gradle/caches/modules-2/files-2.1/org.reactivestreams/reactive-streams/1.0.2/323964c36556eb0e6209f65c1cef72b53b461ab8/reactive-streams-1.0.2.jar(**.class)
48 | -injars /Users/uc/.gradle/caches/modules-2/files-2.1/com.github.bumptech.glide/disklrucache/4.8.0/a7448551cb3edd61bcf3d1b1136b670e630441cf/disklrucache-4.8.0.jar(**.class)
49 | -injars /Users/uc/.gradle/caches/modules-2/files-2.1/com.github.bumptech.glide/annotations/4.8.0/c4c9e79eb2bfeb9059fce55020c6b237402285f6/annotations-4.8.0.jar(**.class)
50 | -injars /Users/uc/.gradle/caches/modules-2/files-2.1/com.tencent.tinker/tinker-commons/1.9.1/ffe516bb28b4d1c0d02474981a54886b33fec049/tinker-commons-1.9.1.jar(**.class)
51 | -injars /Users/uc/.gradle/caches/modules-2/files-2.1/javax.validation/validation-api/1.1.0.Final/8613ae82954779d518631e05daa73a6a954817d5/validation-api-1.1.0.Final.jar(**.class)
52 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/play-services-ads-base-16.0.0.aar/8a504a7ef5180c51aed2448d60377cc9/jars/classes.jar(**.class)
53 | -injars /Users/uc/.gradle/caches/modules-2/files-2.1/com.parse.bolts/bolts-tasks/1.4.0/d85884acf6810a3bbbecb587f239005cbc846dc4/bolts-tasks-1.4.0.jar(**.class)
54 | -injars /Users/uc/.gradle/caches/modules-2/files-2.1/com.tencent.tinker/aosp-dexutils/1.9.1/6d851b44f45134eca6cbc718a1742d97043a9ba5/aosp-dexutils-1.9.1.jar(**.class)
55 | -injars /Users/uc/.gradle/caches/modules-2/files-2.1/com.tencent.tinker/bsdiff-util/1.9.1/cbaf2513dbbe6857b8b0fbca2c3e2d5a0229f333/bsdiff-util-1.9.1.jar(**.class)
56 | -injars /Users/uc/.gradle/caches/modules-2/files-2.1/com.tencent.tinker/tinker-ziputils/1.9.1/86b2c17f92a9a2fc4d76f92d2b538a1ffb4fd69c/tinker-ziputils-1.9.1.jar(**.class)
57 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/livedata-core-1.1.0.aar/9dca505e492dbf6aedf42d11f33a3daf/jars/classes.jar(**.class)
58 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/viewmodel-1.1.0.aar/8630780c779d64cb6d4f11cdb77e149a/jars/classes.jar(**.class)
59 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/runtime-1.1.0.aar/48ed20d82f2b33e037eeef649a9757f6/jars/classes.jar(**.class)
60 | -injars /Users/uc/.gradle/caches/modules-2/files-2.1/android.arch.lifecycle/common/1.1.0/edf3f7bfb84a7521d0599efa3b0113a0ee90f85/common-1.1.0.jar(**.class)
61 | -injars /Users/uc/.gradle/caches/transforms-1/files-1.1/runtime-1.1.0.aar/efca246f07b97f41a6fb9d190c9a6a5c/jars/classes.jar(**.class)
62 | -injars /Users/uc/.gradle/caches/modules-2/files-2.1/android.arch.core/common/1.1.0/8007981f7d7540d89cd18471b8e5dcd2b4f99167/common-1.1.0.jar(**.class)
63 | -injars /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/javac/release/compileReleaseJavaWithJavac/classes(**.class)
64 | -injars /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/transforms/mergeJavaRes/release/0.jar(!**.class)
65 | -outjars /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/transforms/proguard/release/0.jar
66 |
67 | -libraryjars /Users/uc/Library/Android/sdk/platforms/android-27/android.jar
68 | -libraryjars /Users/uc/Library/Android/sdk/build-tools/28.0.2/core-lambda-stubs.jar
69 | -libraryjars /Users/uc/Library/Android/sdk/platforms/android-27/optional/org.apache.http.legacy.jar
70 |
71 | -forceprocessing
72 | -dontshrink
73 | -printusage /Users/uc/work/Geektime/Chapter22/ReDexSample/build/outputs/mapping/release/usage.txt
74 | -dontoptimize
75 | -dontobfuscate
76 | -printmapping /Users/uc/work/Geektime/Chapter22/ReDexSample/build/outputs/mapping/release/mapping.txt
77 | -dontusemixedcaseclassnames
78 | -keepattributes *Annotation*,Signature,InnerClasses,EnclosingMethod,SourceFile,LineNumberTable,*Annotation*,*Annotation*
79 | -verbose
80 | -dontnote com.android.vending.licensing.ILicensingService,com.google.vending.licensing.ILicensingService,com.google.android.vending.licensing.ILicensingService,android.support.**,androidx.**,org.apache.http.**,android.net.http.**,java.lang.invoke.**,okhttp3.internal.Platform
81 | -dontwarn android.support.**,androidx.**,android.util.FloatMath,okio.Okio,okio.DeflaterSink,android.security.NetworkSecurityPolicy,android.app.Notification,sun.misc.Unsafe,libcore.io.Memory,com.google.android.apps.common.proguard.UsedBy*,javax.annotation.**,org.checkerframework.**,okio.**,com.squareup.okhttp.**,okhttp3.**,javax.annotation.**,com.android.volley.toolbox.**,com.facebook.infer.**
82 | -ignorewarnings
83 | -printconfiguration /Users/uc/work/Geektime/Chapter22/ReDexSample/configuration.txt
84 | -printseeds /Users/uc/work/Geektime/Chapter22/ReDexSample/build/outputs/mapping/release/seeds.txt
85 |
86 |
87 |
88 | -keep public class com.google.vending.licensing.ILicensingService
89 |
90 | -keep public class com.android.vending.licensing.ILicensingService
91 |
92 | -keep public class com.google.android.vending.licensing.ILicensingService
93 |
94 | # For native methods, see http://proguard.sourceforge.net/manual/examples.html#native
95 | -keepclasseswithmembers,allowshrinking class * {
96 | native ;
97 | }
98 |
99 | # Keep setters in Views so that animations can still work.
100 | -keepclassmembers public class * extends android.view.View {
101 | void set*(***);
102 | *** get*();
103 | }
104 |
105 | # We want to keep methods in Activity that could be used in the XML attribute onClick.
106 | -keepclassmembers class * extends android.app.Activity {
107 | public void *(android.view.View);
108 | }
109 |
110 | # For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations
111 | -keepclassmembers enum * {
112 | public static **[] values();
113 | public static ** valueOf(java.lang.String);
114 | }
115 |
116 | -keepclassmembers class * extends android.os.Parcelable {
117 | public static final ** CREATOR;
118 | }
119 |
120 | -keepclassmembers class **.R$* {
121 | public static ;
122 | }
123 |
124 | # Preserve annotated Javascript interface methods.
125 | -keepclassmembers class * {
126 | @android.webkit.JavascriptInterface
127 | ;
128 | }
129 |
130 | # Understand the @Keep support annotation.
131 | -keep class android.support.annotation.Keep
132 |
133 | -keep class androidx.annotation.Keep
134 |
135 | -keep @android.support.annotation.Keep class * {
136 | ;
137 | ;
138 | }
139 |
140 | -keep @androidx.annotation.Keep class * {
141 | ;
142 | ;
143 | }
144 |
145 | -keepclasseswithmembers class * {
146 | @android.support.annotation.Keep
147 | ;
148 | }
149 |
150 | -keepclasseswithmembers class * {
151 | @androidx.annotation.Keep
152 | ;
153 | }
154 |
155 | -keepclasseswithmembers class * {
156 | @android.support.annotation.Keep
157 | ;
158 | }
159 |
160 | -keepclasseswithmembers class * {
161 | @androidx.annotation.Keep
162 | ;
163 | }
164 |
165 | -keepclasseswithmembers class * {
166 | @android.support.annotation.Keep
167 | (...);
168 | }
169 |
170 | -keepclasseswithmembers class * {
171 | @androidx.annotation.Keep
172 | (...);
173 | }
174 |
175 | -keep class com.sample.oatmeal {
176 | ;
177 | ;
178 | }
179 |
180 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:214
181 | -keep class com.google.android.gms.ads.AdActivity {
182 | (...);
183 | }
184 |
185 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:206
186 | -keep class com.google.android.gms.common.api.GoogleApiActivity {
187 | (...);
188 | }
189 |
190 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:31
191 | -keep class com.sample.redex.MainActivity {
192 | (...);
193 | }
194 |
195 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:24
196 | -keep class com.sample.redex.SampleApplication {
197 | (...);
198 | }
199 |
200 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:201
201 | -keep class com.squareup.picasso.PicassoProvider {
202 | (...);
203 | }
204 |
205 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:47
206 | -keep class com.tencent.tinker.lib.service.DefaultTinkerResultService {
207 | (...);
208 | }
209 |
210 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:39
211 | -keep class com.tencent.tinker.lib.service.TinkerPatchService {
212 | (...);
213 | }
214 |
215 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:43
216 | -keep class com.tencent.tinker.lib.service.TinkerPatchService$InnerService {
217 | (...);
218 | }
219 |
220 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:112
221 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SGTKStub_00 {
222 | (...);
223 | }
224 |
225 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:142
226 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SGTKStub_00_T {
227 | (...);
228 | }
229 |
230 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:115
231 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SGTKStub_01 {
232 | (...);
233 | }
234 |
235 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:146
236 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SGTKStub_01_T {
237 | (...);
238 | }
239 |
240 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:118
241 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SGTKStub_02 {
242 | (...);
243 | }
244 |
245 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:150
246 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SGTKStub_02_T {
247 | (...);
248 | }
249 |
250 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:121
251 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SGTKStub_03 {
252 | (...);
253 | }
254 |
255 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:124
256 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SGTKStub_04 {
257 | (...);
258 | }
259 |
260 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:127
261 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SGTKStub_05 {
262 | (...);
263 | }
264 |
265 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:130
266 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SGTKStub_06 {
267 | (...);
268 | }
269 |
270 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:133
271 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SGTKStub_07 {
272 | (...);
273 | }
274 |
275 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:136
276 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SGTKStub_08 {
277 | (...);
278 | }
279 |
280 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:139
281 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SGTKStub_09 {
282 | (...);
283 | }
284 |
285 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:70
286 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SGTStub_00 {
287 | (...);
288 | }
289 |
290 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:100
291 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SGTStub_00_T {
292 | (...);
293 | }
294 |
295 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:73
296 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SGTStub_01 {
297 | (...);
298 | }
299 |
300 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:104
301 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SGTStub_01_T {
302 | (...);
303 | }
304 |
305 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:76
306 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SGTStub_02 {
307 | (...);
308 | }
309 |
310 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:108
311 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SGTStub_02_T {
312 | (...);
313 | }
314 |
315 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:79
316 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SGTStub_03 {
317 | (...);
318 | }
319 |
320 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:82
321 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SGTStub_04 {
322 | (...);
323 | }
324 |
325 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:85
326 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SGTStub_05 {
327 | (...);
328 | }
329 |
330 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:88
331 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SGTStub_06 {
332 | (...);
333 | }
334 |
335 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:91
336 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SGTStub_07 {
337 | (...);
338 | }
339 |
340 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:94
341 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SGTStub_08 {
342 | (...);
343 | }
344 |
345 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:97
346 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SGTStub_09 {
347 | (...);
348 | }
349 |
350 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:154
351 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SIStub_00 {
352 | (...);
353 | }
354 |
355 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:184
356 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SIStub_00_T {
357 | (...);
358 | }
359 |
360 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:157
361 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SIStub_01 {
362 | (...);
363 | }
364 |
365 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:188
366 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SIStub_01_T {
367 | (...);
368 | }
369 |
370 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:160
371 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SIStub_02 {
372 | (...);
373 | }
374 |
375 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:192
376 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SIStub_02_T {
377 | (...);
378 | }
379 |
380 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:163
381 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SIStub_03 {
382 | (...);
383 | }
384 |
385 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:166
386 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SIStub_04 {
387 | (...);
388 | }
389 |
390 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:169
391 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SIStub_05 {
392 | (...);
393 | }
394 |
395 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:172
396 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SIStub_06 {
397 | (...);
398 | }
399 |
400 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:175
401 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SIStub_07 {
402 | (...);
403 | }
404 |
405 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:178
406 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SIStub_08 {
407 | (...);
408 | }
409 |
410 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:181
411 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$SIStub_09 {
412 | (...);
413 | }
414 |
415 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:51
416 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$STDStub_00 {
417 | (...);
418 | }
419 |
420 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:61
421 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$STDStub_00_T {
422 | (...);
423 | }
424 |
425 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:52
426 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$STDStub_01 {
427 | (...);
428 | }
429 |
430 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:64
431 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$STDStub_01_T {
432 | (...);
433 | }
434 |
435 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:53
436 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$STDStub_02 {
437 | (...);
438 | }
439 |
440 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:67
441 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$STDStub_02_T {
442 | (...);
443 | }
444 |
445 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:54
446 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$STDStub_03 {
447 | (...);
448 | }
449 |
450 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:55
451 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$STDStub_04 {
452 | (...);
453 | }
454 |
455 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:56
456 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$STDStub_05 {
457 | (...);
458 | }
459 |
460 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:57
461 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$STDStub_06 {
462 | (...);
463 | }
464 |
465 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:58
466 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$STDStub_07 {
467 | (...);
468 | }
469 |
470 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:59
471 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$STDStub_08 {
472 | (...);
473 | }
474 |
475 | # Referenced at /Users/uc/work/Geektime/Chapter22/ReDexSample/build/intermediates/merged_manifests/release/processReleaseManifest/merged/AndroidManifest.xml:60
476 | -keep class com.tencent.tinker.loader.hotplug.ActivityStubs$STDStub_09 {
477 | (...);
478 | }
479 |
480 | # Referenced at /Users/uc/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/5b397c6c5e8016cb7594fa8a6973bec9/res/layout/abc_alert_dialog_material.xml:41
481 | -keep class android.support.v4.widget.NestedScrollView {
482 | (...);
483 | }
484 |
485 | # Referenced at /Users/uc/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/5b397c6c5e8016cb7594fa8a6973bec9/res/layout/abc_select_dialog_material.xml:23
486 | -keep class android.support.v7.app.AlertController$RecycleListView {
487 | (...);
488 | }
489 |
490 | # Referenced at /Users/uc/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/5b397c6c5e8016cb7594fa8a6973bec9/res/layout/abc_action_menu_item_layout.xml:17
491 | -keep class android.support.v7.view.menu.ActionMenuItemView {
492 | (...);
493 | }
494 |
495 | # Referenced at /Users/uc/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/5b397c6c5e8016cb7594fa8a6973bec9/res/layout/abc_expanded_menu_layout.xml:17
496 | -keep class android.support.v7.view.menu.ExpandedMenuView {
497 | (...);
498 | }
499 |
500 | # Referenced at /Users/uc/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/5b397c6c5e8016cb7594fa8a6973bec9/res/layout/abc_popup_menu_item_layout.xml:17
501 | # Referenced at /Users/uc/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/5b397c6c5e8016cb7594fa8a6973bec9/res/layout/abc_list_menu_item_layout.xml:17
502 | -keep class android.support.v7.view.menu.ListMenuItemView {
503 | (...);
504 | }
505 |
506 | # Referenced at /Users/uc/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/5b397c6c5e8016cb7594fa8a6973bec9/res/layout/abc_screen_toolbar.xml:27
507 | -keep class android.support.v7.widget.ActionBarContainer {
508 | (...);
509 | }
510 |
511 | # Referenced at /Users/uc/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/5b397c6c5e8016cb7594fa8a6973bec9/res/layout/abc_screen_toolbar.xml:43
512 | # Referenced at /Users/uc/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/5b397c6c5e8016cb7594fa8a6973bec9/res/layout/abc_action_mode_bar.xml:19
513 | -keep class android.support.v7.widget.ActionBarContextView {
514 | (...);
515 | }
516 |
517 | # Referenced at /Users/uc/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/5b397c6c5e8016cb7594fa8a6973bec9/res/layout/abc_screen_toolbar.xml:17
518 | -keep class android.support.v7.widget.ActionBarOverlayLayout {
519 | (...);
520 | }
521 |
522 | # Referenced at /Users/uc/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/5b397c6c5e8016cb7594fa8a6973bec9/res/layout/abc_action_menu_layout.xml:17
523 | -keep class android.support.v7.widget.ActionMenuView {
524 | (...);
525 | }
526 |
527 | # Referenced at /Users/uc/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/5b397c6c5e8016cb7594fa8a6973bec9/res/layout/abc_activity_chooser_view.xml:19
528 | -keep class android.support.v7.widget.ActivityChooserView$InnerLayout {
529 | (...);
530 | }
531 |
532 | # Referenced at /Users/uc/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/5b397c6c5e8016cb7594fa8a6973bec9/res/layout/abc_alert_dialog_material.xml:18
533 | -keep class android.support.v7.widget.AlertDialogLayout {
534 | (...);
535 | }
536 |
537 | # Referenced at /Users/uc/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/5b397c6c5e8016cb7594fa8a6973bec9/res/layout/abc_alert_dialog_button_bar_material.xml:26
538 | -keep class android.support.v7.widget.ButtonBarLayout {
539 | (...);
540 | }
541 |
542 | # Referenced at /Users/uc/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/5b397c6c5e8016cb7594fa8a6973bec9/res/layout/abc_screen_content_include.xml:19
543 | -keep class android.support.v7.widget.ContentFrameLayout {
544 | (...);
545 | }
546 |
547 | # Referenced at /Users/uc/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/5b397c6c5e8016cb7594fa8a6973bec9/res/layout/abc_alert_dialog_title_material.xml:45
548 | -keep class android.support.v7.widget.DialogTitle {
549 | (...);
550 | }
551 |
552 | # Referenced at /Users/uc/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/5b397c6c5e8016cb7594fa8a6973bec9/res/layout/abc_screen_simple_overlay_action_mode.xml:23
553 | -keep class android.support.v7.widget.FitWindowsFrameLayout {
554 | (...);
555 | }
556 |
557 | # Referenced at /Users/uc/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/5b397c6c5e8016cb7594fa8a6973bec9/res/layout/abc_screen_simple.xml:17
558 | # Referenced at /Users/uc/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/5b397c6c5e8016cb7594fa8a6973bec9/res/layout/abc_dialog_title_material.xml:22
559 | -keep class android.support.v7.widget.FitWindowsLinearLayout {
560 | (...);
561 | }
562 |
563 | # Referenced at /Users/uc/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/5b397c6c5e8016cb7594fa8a6973bec9/res/layout/abc_search_view.xml:75
564 | -keep class android.support.v7.widget.SearchView$SearchAutoComplete {
565 | (...);
566 | }
567 |
568 | # Referenced at /Users/uc/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/5b397c6c5e8016cb7594fa8a6973bec9/res/layout/abc_screen_toolbar.xml:36
569 | -keep class android.support.v7.widget.Toolbar {
570 | (...);
571 | }
572 |
573 | # Referenced at /Users/uc/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/5b397c6c5e8016cb7594fa8a6973bec9/res/layout/abc_screen_simple_overlay_action_mode.xml:32
574 | # Referenced at /Users/uc/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/5b397c6c5e8016cb7594fa8a6973bec9/res/layout/abc_screen_simple.xml:25
575 | -keep class android.support.v7.widget.ViewStubCompat {
576 | (...);
577 | }
578 |
579 | # Referenced at /Users/uc/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/5b397c6c5e8016cb7594fa8a6973bec9/res/layout/abc_alert_dialog_title_material.xml:56
580 | # Referenced at /Users/uc/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/5b397c6c5e8016cb7594fa8a6973bec9/res/layout/abc_alert_dialog_material.xml:52
581 | # Referenced at /Users/uc/.gradle/caches/transforms-1/files-1.1/appcompat-v7-27.1.0.aar/5b397c6c5e8016cb7594fa8a6973bec9/res/layout/abc_alert_dialog_button_bar_material.xml:43
582 | -keep class android.widget.Space {
583 | (...);
584 | }
585 |
586 | # Keep all native methods, their classes and any classes in their descriptors
587 | -keepclasseswithmembers,includedescriptorclasses class com.tencent.wcdb.** {
588 | native ;
589 | }
590 |
591 | # Keep all exception classes
592 | -keep class com.tencent.wcdb.**.*Exception
593 |
594 | # Keep classes referenced in JNI code
595 | -keep class com.tencent.wcdb.database.WCDBInitializationProbe {
596 | ;
597 | }
598 |
599 | -keep,includedescriptorclasses class com.tencent.wcdb.database.SQLiteCustomFunction {
600 | ;
601 | ;
602 | }
603 |
604 | -keep class com.tencent.wcdb.database.SQLiteDebug$* {
605 | ;
606 | ;
607 | }
608 |
609 | -keep class com.tencent.wcdb.database.SQLiteCipherSpec {
610 | ;
611 | }
612 |
613 | -keep interface com.tencent.wcdb.support.Log$* {
614 | ;
615 | ;
616 | }
617 |
618 | # Keep methods used as callbacks from JNI code
619 | -keep class com.tencent.wcdb.repair.RepairKit {
620 | int onProgress(java.lang.String,int,long);
621 | }
622 |
623 | -keep class com.tencent.wcdb.database.SQLiteConnection {
624 | void notifyCheckpoint(java.lang.String,int);
625 | }
626 |
627 | # Ensure that proguard will not strip the handleIntent method.
628 | -keepclassmembers class com.google.android.gms.gcm.GcmListenerService {
629 | public void handleIntent(android.content.Intent);
630 | }
631 |
632 | # b/35135904 Ensure that proguard will not strip the mResultGuardian.
633 | -keepclassmembers class com.google.android.gms.common.api.internal.BasePendingResult {
634 | com.google.android.gms.common.api.internal.BasePendingResult$ReleasableResultGuardian mResultGuardian;
635 | }
636 |
637 | # We keep all fields for every generated proto file as the runtime uses
638 | # reflection over them that ProGuard cannot detect. Without this keep
639 | # rule, fields may be removed that would cause runtime failures.
640 | -keepclassmembers class * extends com.google.android.gms.internal.ads.zzbbo {
641 | ;
642 | }
643 |
644 | # Keep implemtations of the AdMob mediation adapter interfaces. Adapters for
645 | # third party ad networks implement these interfaces and are invoked by the
646 | # AdMob SDK via reflection.
647 | -keep class * extends com.google.android.gms.ads.mediation.MediationAdapter {
648 | public ;
649 | public ;
650 | }
651 |
652 | -keep class * extends com.google.ads.mediation.MediationAdapter {
653 | public ;
654 | public ;
655 | }
656 |
657 | -keep class * extends com.google.android.gms.ads.mediation.customevent.CustomEvent {
658 | public ;
659 | public ;
660 | }
661 |
662 | -keep class * extends com.google.ads.mediation.customevent.CustomEvent {
663 | public ;
664 | public ;
665 | }
666 |
667 | # We keep all fields for every generated proto file as the runtime uses
668 | # reflection over them that ProGuard cannot detect. Without this keep
669 | # rule, fields may be removed that would cause runtime failures.
670 | -keepclassmembers class * extends com.google.android.gms.internal.ads.zzbbo {
671 | ;
672 | }
673 |
674 | # We keep all fields for every generated proto file as the runtime uses
675 | # reflection over them that ProGuard cannot detect. Without this keep
676 | # rule, fields may be removed that would cause runtime failures.
677 | -keepclassmembers class * extends com.google.android.gms.internal.ads.zzbbo {
678 | ;
679 | }
680 |
681 | # Proguard flags for consumers of the Google Play services SDK
682 | # https://developers.google.com/android/guides/setup#add_google_play_services_to_your_project
683 | # Keep SafeParcelable NULL value, needed for reflection by DowngradeableSafeParcel
684 | -keepclassmembers public class com.google.android.gms.common.internal.safeparcel.SafeParcelable {
685 | public static final *** NULL;
686 | }
687 |
688 | # Needed for Parcelable/SafeParcelable classes & their creators to not get renamed, as they are
689 | # found via reflection.
690 | -keep class com.google.android.gms.common.internal.ReflectedParcelable
691 |
692 | -keep,allowshrinking class * extends com.google.android.gms.common.internal.ReflectedParcelable
693 |
694 | -keepclassmembers class * extends android.os.Parcelable {
695 | public static final *** CREATOR;
696 | }
697 |
698 | # Keep the classes/members we need for client functionality.
699 | -keep @interface android.support.annotation.Keep
700 |
701 | -keep @android.support.annotation.Keep class *
702 |
703 | -keepclasseswithmembers class * {
704 | @android.support.annotation.Keep
705 | ;
706 | }
707 |
708 | -keepclasseswithmembers class * {
709 | @android.support.annotation.Keep
710 | ;
711 | }
712 |
713 | # Keep the names of classes/members we need for client functionality.
714 | -keep @interface com.google.android.gms.common.annotation.KeepName
715 |
716 | -keep,allowshrinking @com.google.android.gms.common.annotation.KeepName class *
717 |
718 | -keepclassmembers,allowshrinking class * {
719 | @com.google.android.gms.common.annotation.KeepName
720 | ;
721 | @com.google.android.gms.common.annotation.KeepName
722 | ;
723 | }
724 |
725 | # Keep Dynamite API entry points
726 | -keep @interface com.google.android.gms.common.util.DynamiteApi
727 |
728 | -keep @com.google.android.gms.common.util.DynamiteApi public class * {
729 | public ;
730 | public ;
731 | }
732 |
733 | # Copyright (C) 2017 The Android Open Source Project
734 | #
735 | # Licensed under the Apache License, Version 2.0 (the "License");
736 | # you may not use this file except in compliance with the License.
737 | # You may obtain a copy of the License at
738 | #
739 | # http://www.apache.org/licenses/LICENSE-2.0
740 | #
741 | # Unless required by applicable law or agreed to in writing, software
742 | # distributed under the License is distributed on an "AS IS" BASIS,
743 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
744 | # See the License for the specific language governing permissions and
745 | # limitations under the License.
746 | # Prevent Parcelable objects from being removed or renamed.
747 | -keep class android.support.v4.media.** extends android.os.Parcelable {
748 | public static final android.os.Parcelable$Creator *;
749 | }
750 |
751 | # Copyright (C) 2016 The Android Open Source Project
752 | #
753 | # Licensed under the Apache License, Version 2.0 (the "License");
754 | # you may not use this file except in compliance with the License.
755 | # You may obtain a copy of the License at
756 | #
757 | # http://www.apache.org/licenses/LICENSE-2.0
758 | #
759 | # Unless required by applicable law or agreed to in writing, software
760 | # distributed under the License is distributed on an "AS IS" BASIS,
761 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
762 | # See the License for the specific language governing permissions and
763 | # limitations under the License.
764 | # keep setters in VectorDrawables so that animations can still work.
765 | -keepclassmembers class android.support.graphics.drawable.VectorDrawableCompat$* {
766 | void set*(***);
767 | *** get*();
768 | }
769 |
770 | # Copyright (C) 2016 The Android Open Source Project
771 | #
772 | # Licensed under the Apache License, Version 2.0 (the "License");
773 | # you may not use this file except in compliance with the License.
774 | # You may obtain a copy of the License at
775 | #
776 | # http://www.apache.org/licenses/LICENSE-2.0
777 | #
778 | # Unless required by applicable law or agreed to in writing, software
779 | # distributed under the License is distributed on an "AS IS" BASIS,
780 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
781 | # See the License for the specific language governing permissions and
782 | # limitations under the License.
783 | # CoordinatorLayout resolves the behaviors of its child components with reflection.
784 | -keep public class * extends android.support.design.widget.CoordinatorLayout$Behavior {
785 | public (android.content.Context,android.util.AttributeSet);
786 | public ();
787 | }
788 |
789 | # Keep our interfaces so they can be used by other ProGuard rules.
790 | # See http://sourceforge.net/p/proguard/bugs/466/
791 | -keep,allowobfuscation @interface com.facebook.common.internal.DoNotStrip
792 |
793 | -keep,allowobfuscation @interface com.facebook.soloader.DoNotOptimize
794 |
795 | # Do not strip any method/class that is annotated with @DoNotStrip
796 | -keep @com.facebook.common.internal.DoNotStrip class *
797 |
798 | -keepclassmembers class * {
799 | @com.facebook.common.internal.DoNotStrip
800 | ;
801 | @com.facebook.common.internal.DoNotStrip
802 | ;
803 | }
804 |
805 | # Do not strip any method/class that is annotated with @DoNotOptimize
806 | -keep @com.facebook.soloader.DoNotOptimize class *
807 |
808 | -keepclassmembers class * {
809 | @com.facebook.soloader.DoNotOptimize
810 | ;
811 | @com.facebook.soloader.DoNotOptimize
812 | ;
813 | }
814 |
815 | # Keep native methods
816 | -keepclassmembers class * {
817 | native ;
818 | }
819 |
820 | -keep class * extends android.arch.lifecycle.ViewModel {
821 | ();
822 | }
823 |
824 | -keepclassmembers enum android.arch.lifecycle.Lifecycle$Event {
825 | ;
826 | }
827 |
828 | -keep class * extends android.arch.lifecycle.LifecycleObserver
829 |
830 | -keep class * extends android.arch.lifecycle.GeneratedAdapter {
831 | (...);
832 | }
833 |
834 | -keepclassmembers class ** {
835 | @android.arch.lifecycle.OnLifecycleEvent
836 | ;
837 | @android.arch.lifecycle.OnLifecycleEvent
838 | ;
839 | }
840 |
--------------------------------------------------------------------------------