├── app
├── .gitignore
├── libs
│ ├── PxPermission.jar
│ ├── rxjava-2.0.5.jar
│ └── reactive-streams-1.0.0.jar
├── 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
│ │ │ ├── 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-v24
│ │ │ │ └── ic_launcher_foreground.xml
│ │ │ └── drawable
│ │ │ │ └── ic_launcher_background.xml
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── yk
│ │ │ │ └── dexdeapplication
│ │ │ │ ├── App.java
│ │ │ │ ├── DateUtils.java
│ │ │ │ ├── MyBroadCastReciver.java
│ │ │ │ ├── MyService.java
│ │ │ │ ├── MainActivity.java
│ │ │ │ ├── MyProvider.java
│ │ │ │ └── SGPermission.java
│ │ └── AndroidManifest.xml
│ ├── test
│ │ └── java
│ │ │ └── com
│ │ │ └── yk
│ │ │ └── dexdeapplication
│ │ │ └── ExampleUnitTest.java
│ └── androidTest
│ │ └── java
│ │ └── com
│ │ └── yk
│ │ └── dexdeapplication
│ │ └── ExampleInstrumentedTest.java
├── build.gradle
└── proguard-rules.pro
├── proxy_core
├── .gitignore
├── src
│ ├── main
│ │ ├── res
│ │ │ └── values
│ │ │ │ └── strings.xml
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── com
│ │ │ └── example
│ │ │ └── proxy_core
│ │ │ ├── ProxyUtils.java
│ │ │ ├── Zip.java
│ │ │ ├── CrashHandler.java
│ │ │ ├── EncryptUtil.java
│ │ │ └── ProxyApplication.java
│ ├── test
│ │ └── java
│ │ │ └── com
│ │ │ └── example
│ │ │ └── proxy_core
│ │ │ └── ExampleUnitTest.java
│ └── androidTest
│ │ └── java
│ │ └── com
│ │ └── example
│ │ └── proxy_core
│ │ └── ExampleInstrumentedTest.java
├── proguard-rules.pro
└── build.gradle
├── proxy_tools
├── .gitignore
├── dexjks.jks
├── src
│ └── main
│ │ ├── res
│ │ └── values
│ │ │ └── strings.xml
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── com
│ │ └── example
│ │ └── proxy_tools
│ │ ├── DexUtils.java
│ │ ├── Zip.java
│ │ ├── Main.java
│ │ └── EncryptUtil.java
├── temp
│ ├── classes.jar
│ ├── res
│ │ └── values
│ │ │ └── values.xml
│ ├── AndroidManifest.xml
│ └── R.txt
└── build.gradle
├── settings.gradle
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── .idea
├── vcs.xml
├── encodings.xml
├── misc.xml
├── runConfigurations.xml
└── modules.xml
├── gradle.properties
├── .gitignore
├── gradlew.bat
├── gradlew
├── README.md
└── LICENSE
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/proxy_core/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/proxy_tools/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app', 'proxy_core', 'proxy_tools'
2 |
--------------------------------------------------------------------------------
/proxy_tools/dexjks.jks:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xqgithub/DexEncryptionDecryption/HEAD/proxy_tools/dexjks.jks
--------------------------------------------------------------------------------
/app/libs/PxPermission.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xqgithub/DexEncryptionDecryption/HEAD/app/libs/PxPermission.jar
--------------------------------------------------------------------------------
/app/libs/rxjava-2.0.5.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xqgithub/DexEncryptionDecryption/HEAD/app/libs/rxjava-2.0.5.jar
--------------------------------------------------------------------------------
/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | DexDEApplication
3 |
4 |
--------------------------------------------------------------------------------
/proxy_core/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | proxy_core
3 |
4 |
--------------------------------------------------------------------------------
/proxy_tools/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | proxy_core
3 |
4 |
--------------------------------------------------------------------------------
/proxy_tools/temp/classes.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xqgithub/DexEncryptionDecryption/HEAD/proxy_tools/temp/classes.jar
--------------------------------------------------------------------------------
/app/libs/reactive-streams-1.0.0.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xqgithub/DexEncryptionDecryption/HEAD/app/libs/reactive-streams-1.0.0.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xqgithub/DexEncryptionDecryption/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/proxy_tools/build.gradle:
--------------------------------------------------------------------------------
1 |
2 | apply plugin: 'java'
3 | apply plugin: 'application'
4 | mainClassName = 'com.example.proxy_tools.Main'
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xqgithub/DexEncryptionDecryption/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xqgithub/DexEncryptionDecryption/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xqgithub/DexEncryptionDecryption/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/proxy_core/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
--------------------------------------------------------------------------------
/proxy_tools/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xqgithub/DexEncryptionDecryption/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xqgithub/DexEncryptionDecryption/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/proxy_tools/temp/res/values/values.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | proxy_core
4 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xqgithub/DexEncryptionDecryption/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xqgithub/DexEncryptionDecryption/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xqgithub/DexEncryptionDecryption/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xqgithub/DexEncryptionDecryption/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xqgithub/DexEncryptionDecryption/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #008577
4 | #00574B
5 | #D81B60
6 |
7 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Wed May 29 21:16:22 GMT+08:00 2019
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-5.1.1-all.zip
7 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/java/com/yk/dexdeapplication/App.java:
--------------------------------------------------------------------------------
1 | package com.yk.dexdeapplication;
2 |
3 | import android.app.Application;
4 | import android.util.Log;
5 |
6 | public class App extends Application {
7 | @Override
8 | public void onCreate() {
9 | super.onCreate();
10 | Log.i("DevYK","MyApplication onCreate()");
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/proxy_tools/temp/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/proxy_core/src/test/java/com/example/proxy_core/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.example.proxy_core;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.junit.Assert.*;
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * @see Testing documentation
11 | */
12 | public class ExampleUnitTest {
13 | @Test
14 | public void addition_isCorrect() {
15 | assertEquals(4, 2 + 2);
16 | }
17 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/yk/dexdeapplication/DateUtils.java:
--------------------------------------------------------------------------------
1 | package com.yk.dexdeapplication;
2 |
3 | import java.text.SimpleDateFormat;
4 | import java.util.Date;
5 |
6 | public class DateUtils {
7 |
8 | private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");
9 |
10 | public void setCurrentDate(Date currentDate) {
11 | this.currentDate = simpleDateFormat.format(currentDate);
12 | }
13 |
14 | private String currentDate;
15 |
16 | public String getCurrentDate(){
17 | return currentDate;
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/java/com/yk/dexdeapplication/MyBroadCastReciver.java:
--------------------------------------------------------------------------------
1 | package com.yk.dexdeapplication;
2 |
3 | import android.content.BroadcastReceiver;
4 | import android.content.Context;
5 | import android.content.Intent;
6 | import android.util.Log;
7 |
8 |
9 | public class MyBroadCastReciver extends BroadcastReceiver {
10 |
11 |
12 | @Override
13 | public void onReceive(Context context, Intent intent) {
14 | Log.i("DevYK", "reciver:" + context);
15 | Log.i("DevYK","reciver:" + context.getApplicationContext());
16 | Log.i("DevYK","reciver:" + context.getApplicationInfo().className);
17 |
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/test/java/com/yk/dexdeapplication/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.yk.dexdeapplication;
2 |
3 | import org.junit.Test;
4 |
5 | import static org.junit.Assert.*;
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * @see Testing documentation
11 | */
12 | public class ExampleUnitTest {
13 | @Test
14 | public void addition_isCorrect() {
15 | assertEquals(4, 2 + 2);
16 | }
17 |
18 |
19 | @Test
20 | public void testClassLoad(){
21 | String path = getClass().getClassLoader().toString();
22 | System.out.printf("dex load :" + path);
23 |
24 |
25 | }
26 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/yk/dexdeapplication/MyService.java:
--------------------------------------------------------------------------------
1 | package com.yk.dexdeapplication;
2 |
3 | import android.app.Service;
4 | import android.content.Intent;
5 | import android.os.IBinder;
6 | import android.support.annotation.Nullable;
7 | import android.util.Log;
8 |
9 |
10 |
11 | public class MyService extends Service {
12 |
13 |
14 | @Nullable
15 | @Override
16 | public IBinder onBind(Intent intent) {
17 | return null;
18 | }
19 |
20 | @Override
21 | public void onCreate() {
22 | super.onCreate();
23 | Log.i("DevYK", "service:" + getApplication());
24 | Log.i("DevYK", "service:" + getApplicationContext());
25 | Log.i("DevYK", "service:" + getApplicationInfo().className);
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/proxy_core/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 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/androidTest/java/com/yk/dexdeapplication/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
1 | package com.yk.dexdeapplication;
2 |
3 | import android.content.Context;
4 | import android.support.test.InstrumentationRegistry;
5 | import android.support.test.runner.AndroidJUnit4;
6 |
7 | import org.junit.Test;
8 | import org.junit.runner.RunWith;
9 |
10 | import static org.junit.Assert.*;
11 |
12 | /**
13 | * Instrumented test, which will execute on an Android device.
14 | *
15 | * @see Testing documentation
16 | */
17 | @RunWith(AndroidJUnit4.class)
18 | public class ExampleInstrumentedTest {
19 | @Test
20 | public void useAppContext() {
21 | // Context of the app under test.
22 | Context appContext = InstrumentationRegistry.getTargetContext();
23 |
24 | assertEquals("com.yk.dexdeapplication", appContext.getPackageName());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/proxy_core/src/androidTest/java/com/example/proxy_core/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
1 | package com.example.proxy_core;
2 |
3 | import android.content.Context;
4 | import android.support.test.InstrumentationRegistry;
5 | import android.support.test.runner.AndroidJUnit4;
6 |
7 | import org.junit.Test;
8 | import org.junit.runner.RunWith;
9 |
10 | import static org.junit.Assert.*;
11 |
12 | /**
13 | * Instrumented test, which will execute on an Android device.
14 | *
15 | * @see Testing documentation
16 | */
17 | @RunWith(AndroidJUnit4.class)
18 | public class ExampleInstrumentedTest {
19 | @Test
20 | public void useAppContext() {
21 | // Context of the app under test.
22 | Context appContext = InstrumentationRegistry.getTargetContext();
23 |
24 | assertEquals("com.example.proxy_core.test", appContext.getPackageName());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/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 | #\u89E3\u51B3debug\u7248\u672C\u5B89\u88C5\u5931\u8D25 Failure [INSTALL_FAILED_TEST_ONLY] \u95EE\u9898
16 | android.injected.testOnly=false
--------------------------------------------------------------------------------
/proxy_core/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 |
3 | android {
4 | compileSdkVersion 28
5 |
6 |
7 |
8 | defaultConfig {
9 | minSdkVersion 21
10 | targetSdkVersion 28
11 | versionCode 1
12 | versionName "1.0"
13 |
14 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
15 |
16 | }
17 |
18 | buildTypes {
19 | release {
20 | minifyEnabled false
21 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
22 | }
23 | }
24 |
25 | }
26 |
27 | dependencies {
28 | implementation fileTree(dir: 'libs', include: ['*.jar'])
29 |
30 | implementation 'com.android.support:appcompat-v7:28.0.0'
31 | testImplementation 'junit:junit:4.12'
32 | androidTestImplementation 'com.android.support.test:runner:1.0.2'
33 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
34 | }
35 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Built application files
2 | *.apk
3 | *.ap_
4 |
5 | # Files for the ART/Dalvik VM
6 | *.dex
7 |
8 | # Java class files
9 | *.class
10 |
11 | # Generated files
12 | bin/
13 | gen/
14 | out/
15 |
16 | # Gradle files
17 | .gradle/
18 | build/
19 |
20 | # Local configuration file (sdk path, etc)
21 | local.properties
22 |
23 | # Proguard folder generated by Eclipse
24 | proguard/
25 |
26 | # Log Files
27 | *.log
28 |
29 | # Android Studio Navigation editor temp files
30 | .navigation/
31 |
32 | # Android Studio captures folder
33 | captures/
34 |
35 | # IntelliJ
36 | *.iml
37 | .idea/workspace.xml
38 | .idea/tasks.xml
39 | .idea/gradle.xml
40 | .idea/assetWizardSettings.xml
41 | .idea/dictionaries
42 | .idea/libraries
43 | .idea/caches
44 |
45 | # Keystore files
46 | # Uncomment the following line if you do not want to check your keystore files in.
47 | #*.jks
48 |
49 | # External native build folder generated in Android Studio 2.2 and later
50 | .externalNativeBuild
51 |
52 | # Google Services (e.g. APIs or Firebase)
53 | google-services.json
54 |
55 | # Freeline
56 | freeline.py
57 | freeline/
58 | freeline_project_description.json
59 |
60 | # fastlane
61 | fastlane/report.xml
62 | fastlane/Preview.html
63 | fastlane/screenshots
64 | fastlane/test_output
65 | fastlane/readme.md
66 |
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion 28
5 | defaultConfig {
6 | applicationId "com.yk.dexdeapplication"
7 | minSdkVersion 21
8 | targetSdkVersion 28
9 | versionCode 1
10 | versionName "1.0"
11 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
12 | }
13 | buildTypes {
14 | release {
15 | minifyEnabled true
16 | shrinkResources true
17 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
18 | }
19 | debug {
20 | minifyEnabled true
21 | shrinkResources true
22 | proguardFiles getDefaultProguardFile('proguard-android.txt'),
23 | 'proguard-rules.pro'
24 | }
25 | }
26 | }
27 |
28 | dependencies {
29 | implementation fileTree(dir: 'libs', include: ['*.jar'])
30 | implementation 'com.android.support:appcompat-v7:28.0.0'
31 | implementation 'com.android.support.constraint:constraint-layout:1.1.3'
32 | testImplementation 'junit:junit:4.12'
33 | androidTestImplementation 'com.android.support.test:runner:1.0.2'
34 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
35 | implementation project(':proxy_core')
36 | }
37 |
--------------------------------------------------------------------------------
/app/src/main/java/com/yk/dexdeapplication/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.yk.dexdeapplication;
2 |
3 | import android.content.ComponentName;
4 | import android.content.Intent;
5 | import android.net.Uri;
6 | import android.os.Bundle;
7 | import android.os.Debug;
8 | import android.os.Environment;
9 | import android.support.v7.app.AppCompatActivity;
10 | import android.util.Log;
11 | import android.widget.Toast;
12 |
13 | import java.io.File;
14 | import java.util.Date;
15 |
16 | public class MainActivity extends AppCompatActivity {
17 | private static final String TAG = "MainActivity";
18 |
19 | @Override
20 | protected void onCreate(Bundle savedInstanceState) {
21 | super.onCreate(savedInstanceState);
22 | setContentView(R.layout.activity_main);
23 | SGPermission.getPermission(this);
24 |
25 | Log.i("DevYK", "activity:" + getApplication());
26 | Log.i("DevYK", "activity:" + getApplicationContext());
27 | Log.i("DevYK", "activity:" + getApplicationInfo().className);
28 |
29 | startService(new Intent(this, MyService.class));
30 |
31 | Intent intent = new Intent("com.yk.dexdeapplication_devyk");
32 | intent.setComponent(new ComponentName(getPackageName(), MyBroadCastReciver.class.getName
33 | ()));
34 | sendBroadcast(intent);
35 |
36 | getContentResolver().delete(Uri.parse("content://com.yk.dexdeapplication.MyProvider"), null,
37 | null);
38 |
39 | DateUtils dateUtils = new DateUtils();
40 | dateUtils.setCurrentDate(new Date());
41 | Toast.makeText(getApplicationContext(), dateUtils.getCurrentDate(), Toast.LENGTH_SHORT).show();
42 |
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
--------------------------------------------------------------------------------
/app/src/main/java/com/yk/dexdeapplication/MyProvider.java:
--------------------------------------------------------------------------------
1 | package com.yk.dexdeapplication;
2 |
3 | import android.content.ContentProvider;
4 | import android.content.ContentValues;
5 | import android.database.Cursor;
6 | import android.net.Uri;
7 | import android.support.annotation.NonNull;
8 | import android.support.annotation.Nullable;
9 | import android.util.Log;
10 |
11 |
12 |
13 | public class MyProvider extends ContentProvider {
14 |
15 | @Override
16 | public boolean onCreate() {
17 | Log.i("DevYK", "provider onCreate:" + getContext());
18 | Log.i("DevYK", "provider onCreate:" + getContext().getApplicationContext());
19 | Log.i("DevYK", "provider onCreate:" + getContext().getApplicationInfo().className);
20 | return true;
21 | }
22 |
23 | @Nullable
24 | @Override
25 | public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String
26 | selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
27 | return null;
28 | }
29 |
30 | @Nullable
31 | @Override
32 | public String getType(@NonNull Uri uri) {
33 | return null;
34 | }
35 |
36 | @Nullable
37 | @Override
38 | public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
39 | return null;
40 | }
41 |
42 | @Override
43 | public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[]
44 | selectionArgs) {
45 | Log.i("DevYK", "provider delete:" + getContext());
46 | return 0;
47 | }
48 |
49 | @Override
50 | public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String
51 | selection, @Nullable String[] selectionArgs) {
52 | return 0;
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/app/src/main/java/com/yk/dexdeapplication/SGPermission.java:
--------------------------------------------------------------------------------
1 | package com.yk.dexdeapplication;
2 |
3 | import android.Manifest;
4 | import android.app.Activity;
5 |
6 |
7 | import com.lisn.rxpermissionlibrary.permissions.RxPermissions;
8 |
9 | import io.reactivex.Observer;
10 | import io.reactivex.disposables.Disposable;
11 |
12 | public class SGPermission {
13 |
14 | /**
15 | * 获取动态权限
16 | */
17 | public static void getPermission(Activity activity) {
18 | //region Permissions
19 | RxPermissions rxPermissions = new RxPermissions(activity );
20 | rxPermissions.request(Manifest.permission.VIBRATE,
21 | Manifest.permission.ACCESS_WIFI_STATE,
22 | Manifest.permission.CHANGE_WIFI_STATE,
23 | Manifest.permission.WAKE_LOCK,
24 | Manifest.permission.ACCESS_COARSE_LOCATION,
25 | Manifest.permission.ACCESS_FINE_LOCATION,
26 | Manifest.permission.ACCESS_NETWORK_STATE,
27 | Manifest.permission.CHANGE_NETWORK_STATE,
28 | Manifest.permission.READ_EXTERNAL_STORAGE,
29 | Manifest.permission.READ_PHONE_STATE,
30 | Manifest.permission.WRITE_EXTERNAL_STORAGE).subscribe(new Observer() {
31 | @Override
32 | public void onSubscribe(Disposable d) {
33 | }
34 |
35 | @Override
36 | public void onNext(Boolean aBoolean) {
37 | if (aBoolean) {
38 | }
39 | }
40 |
41 | @Override
42 | public void onError(Throwable e) {
43 |
44 | }
45 |
46 | @Override
47 | public void onComplete() {
48 |
49 | }
50 | });
51 | //endregion
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-v24/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
1 |
7 |
12 |
13 |
19 |
22 |
25 |
26 |
27 |
28 |
34 |
35 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/proxy_core/src/main/java/com/example/proxy_core/ProxyUtils.java:
--------------------------------------------------------------------------------
1 | package com.example.proxy_core;
2 |
3 | import java.io.File;
4 | import java.io.RandomAccessFile;
5 | import java.lang.reflect.Field;
6 | import java.lang.reflect.Method;
7 | import java.util.Arrays;
8 |
9 |
10 | public class ProxyUtils {
11 |
12 | /**
13 | * 读取文件
14 | * @param file
15 | * @return
16 | * @throws Exception
17 | */
18 | public static byte[] getBytes(File file) throws Exception {
19 | RandomAccessFile r = new RandomAccessFile(file, "r");
20 | byte[] buffer = new byte[(int) r.length()];
21 | r.readFully(buffer);
22 | r.close();
23 | return buffer;
24 | }
25 |
26 | /**
27 | * 反射获得 指定对象(当前-》父类-》父类...)中的 成员属性
28 | * @param instance
29 | * @param name
30 | * @return
31 | * @throws NoSuchFieldException
32 | */
33 | public static Field findField(Object instance, String name) throws NoSuchFieldException {
34 | Class clazz = instance.getClass();
35 | //反射获得
36 | while (clazz != null) {
37 | try {
38 | Field field = clazz.getDeclaredField(name);
39 | //如果无法访问 设置为可访问
40 | if (!field.isAccessible()) {
41 | field.setAccessible(true);
42 | }
43 | return field;
44 | } catch (NoSuchFieldException e) {
45 | //如果找不到往父类找
46 | clazz = clazz.getSuperclass();
47 | }
48 | }
49 | throw new NoSuchFieldException("Field " + name + " not found in " + instance.getClass());
50 | }
51 |
52 |
53 | /**
54 | * 反射获得 指定对象(当前-》父类-》父类...)中的 函数
55 | * @param instance
56 | * @param name
57 | * @param parameterTypes
58 | * @return
59 | * @throws NoSuchMethodException
60 | */
61 | public static Method findMethod(Object instance, String name, Class... parameterTypes)
62 | throws NoSuchMethodException {
63 | Class clazz = instance.getClass();
64 | while (clazz != null) {
65 | try {
66 | Method method = clazz.getDeclaredMethod(name, parameterTypes);
67 | if (!method.isAccessible()) {
68 | method.setAccessible(true);
69 | }
70 | return method;
71 | } catch (NoSuchMethodException e) {
72 | //如果找不到往父类找
73 | clazz = clazz.getSuperclass();
74 | }
75 | }
76 | throw new NoSuchMethodException("Method " + name + " with parameters " + Arrays.asList
77 | (parameterTypes) + " not found in " + instance.getClass());
78 | }
79 | }
80 |
--------------------------------------------------------------------------------
/proxy_tools/src/main/java/com/example/proxy_tools/DexUtils.java:
--------------------------------------------------------------------------------
1 | package com.example.proxy_tools;
2 |
3 | import java.io.File;
4 | import java.io.RandomAccessFile;
5 | import java.lang.reflect.Field;
6 | import java.lang.reflect.Method;
7 | import java.util.Arrays;
8 |
9 |
10 | public class DexUtils {
11 |
12 | /**
13 | * 读取文件
14 | * @param file
15 | * @return
16 | * @throws Exception
17 | */
18 | public static byte[] getBytes(File file) throws Exception {
19 | RandomAccessFile r = new RandomAccessFile(file, "r");
20 | byte[] buffer = new byte[(int) r.length()];
21 | r.readFully(buffer);
22 | r.close();
23 | return buffer;
24 | }
25 |
26 | /**
27 | * 反射获得 指定对象(当前-》父类-》父类...)中的 成员属性
28 | * @param instance
29 | * @param name
30 | * @return
31 | * @throws NoSuchFieldException
32 | */
33 | public static Field findField(Object instance, String name) throws NoSuchFieldException {
34 | Class clazz = instance.getClass();
35 | //反射获得
36 | while (clazz != null) {
37 | try {
38 | Field field = clazz.getDeclaredField(name);
39 | //如果无法访问 设置为可访问
40 | if (!field.isAccessible()) {
41 | field.setAccessible(true);
42 | }
43 | return field;
44 | } catch (NoSuchFieldException e) {
45 | //如果找不到往父类找
46 | clazz = clazz.getSuperclass();
47 | }
48 | }
49 | throw new NoSuchFieldException("Field " + name + " not found in " + instance.getClass());
50 | }
51 |
52 |
53 | /**
54 | * 反射获得 指定对象(当前-》父类-》父类...)中的 函数
55 | * @param instance
56 | * @param name
57 | * @param parameterTypes
58 | * @return
59 | * @throws NoSuchMethodException
60 | */
61 | public static Method findMethod(Object instance, String name, Class... parameterTypes)
62 | throws NoSuchMethodException {
63 | Class clazz = instance.getClass();
64 | while (clazz != null) {
65 | try {
66 | Method method = clazz.getDeclaredMethod(name, parameterTypes);
67 | if (!method.isAccessible()) {
68 | method.setAccessible(true);
69 | }
70 | return method;
71 | } catch (NoSuchMethodException e) {
72 | //如果找不到往父类找
73 | clazz = clazz.getSuperclass();
74 | }
75 | }
76 | throw new NoSuchMethodException("Method " + name + " with parameters " + Arrays.asList
77 | (parameterTypes) + " not found in " + instance.getClass());
78 | }
79 | }
80 |
--------------------------------------------------------------------------------
/proxy_core/src/main/java/com/example/proxy_core/Zip.java:
--------------------------------------------------------------------------------
1 | package com.example.proxy_core;
2 |
3 | import java.io.File;
4 | import java.io.FileInputStream;
5 | import java.io.FileOutputStream;
6 | import java.io.InputStream;
7 | import java.util.Enumeration;
8 | import java.util.zip.CRC32;
9 | import java.util.zip.CheckedOutputStream;
10 | import java.util.zip.ZipEntry;
11 | import java.util.zip.ZipFile;
12 | import java.util.zip.ZipOutputStream;
13 |
14 |
15 | public class Zip {
16 |
17 | protected static void deleteFile(File file){
18 | if (file.isDirectory()){
19 | File[] files = file.listFiles();
20 | for (File f: files) {
21 | deleteFile(f);
22 | }
23 | }else{
24 | file.delete();
25 | }
26 | }
27 |
28 | /**
29 | * 解压zip文件至dir目录
30 | * @param zip
31 | * @param dir
32 | */
33 | public static void unZip(File zip, File dir) {
34 | try {
35 | deleteFile(dir);
36 | ZipFile zipFile = new ZipFile(zip);
37 | //zip文件中每一个条目
38 | Enumeration extends ZipEntry> entries = zipFile.entries();
39 | //遍历
40 | while (entries.hasMoreElements()) {
41 | ZipEntry zipEntry = entries.nextElement();
42 | //zip中 文件/目录名
43 | String name = zipEntry.getName();
44 | //原来的签名文件 不需要了
45 | if (name.equals("META-INF/CERT.RSA") || name.equals("META-INF/CERT.SF") || name
46 | .equals("META-INF/MANIFEST.MF")) {
47 | continue;
48 | }
49 | //空目录不管
50 | if (!zipEntry.isDirectory()) {
51 | File file = new File(dir, name);
52 | //创建目录
53 | if (!file.getParentFile().exists()) {
54 | file.getParentFile().mkdirs();
55 | }
56 | //写文件
57 | FileOutputStream fos = new FileOutputStream(file);
58 | InputStream is = zipFile.getInputStream(zipEntry);
59 | byte[] buffer = new byte[2048];
60 | int len;
61 | while ((len = is.read(buffer)) != -1) {
62 | fos.write(buffer, 0, len);
63 | }
64 | is.close();
65 | fos.close();
66 | }
67 | }
68 | zipFile.close();
69 | } catch (Exception e) {
70 | e.printStackTrace();
71 | }
72 | }
73 |
74 | /**
75 | * 压缩目录为zip
76 | * @param dir 待压缩目录
77 | * @param zip 输出的zip文件
78 | * @throws Exception
79 | */
80 | public static void zip(File dir, File zip) throws Exception {
81 | zip.delete();
82 | // 对输出文件做CRC32校验
83 | CheckedOutputStream cos = new CheckedOutputStream(new FileOutputStream(
84 | zip), new CRC32());
85 | ZipOutputStream zos = new ZipOutputStream(cos);
86 | //压缩
87 | compress(dir, zos, "");
88 | zos.flush();
89 | zos.close();
90 | }
91 |
92 | /**
93 | * 添加目录/文件 至zip中
94 | * @param srcFile 需要添加的目录/文件
95 | * @param zos zip输出流
96 | * @param basePath 递归子目录时的完整目录 如 lib/x86
97 | * @throws Exception
98 | */
99 | private static void compress(File srcFile, ZipOutputStream zos,
100 | String basePath) throws Exception {
101 | if (srcFile.isDirectory()) {
102 | File[] files = srcFile.listFiles();
103 | for (File file : files) {
104 | // zip 递归添加目录中的文件
105 | compress(file, zos, basePath + srcFile.getName() + "/");
106 | }
107 | } else {
108 | compressFile(srcFile, zos, basePath);
109 | }
110 | }
111 |
112 | private static void compressFile(File file, ZipOutputStream zos, String dir)
113 | throws Exception {
114 | // temp/lib/x86/libdn_ssl.so
115 | String fullName = dir + file.getName();
116 | // 需要去掉temp
117 | String[] fileNames = fullName.split("/");
118 | //正确的文件目录名 (去掉了temp)
119 | StringBuffer sb = new StringBuffer();
120 | if (fileNames.length > 1){
121 | for (int i = 1;i entries = zipFile.entries();
39 | //遍历
40 | while (entries.hasMoreElements()) {
41 | ZipEntry zipEntry = entries.nextElement();
42 | //zip中 文件/目录名
43 | String name = zipEntry.getName();
44 | //原来的签名文件 不需要了
45 | if (name.equals("META-INF/CERT.RSA") || name.equals("META-INF/CERT.SF") || name
46 | .equals("META-INF/MANIFEST.MF")) {
47 | continue;
48 | }
49 | //空目录不管
50 | if (!zipEntry.isDirectory()) {
51 | File file = new File(dir, name);
52 | //创建目录
53 | if (!file.getParentFile().exists()) {
54 | file.getParentFile().mkdirs();
55 | }
56 | //写文件
57 | FileOutputStream fos = new FileOutputStream(file);
58 | InputStream is = zipFile.getInputStream(zipEntry);
59 | byte[] buffer = new byte[2048];
60 | int len;
61 | while ((len = is.read(buffer)) != -1) {
62 | fos.write(buffer, 0, len);
63 | }
64 | is.close();
65 | fos.close();
66 | }
67 | }
68 | zipFile.close();
69 | } catch (Exception e) {
70 | e.printStackTrace();
71 | }
72 | }
73 |
74 | /**
75 | * 压缩目录为zip
76 | * @param dir 待压缩目录
77 | * @param zip 输出的zip文件
78 | * @throws Exception
79 | */
80 | public static void zip(File dir, File zip) throws Exception {
81 | zip.delete();
82 | // 对输出文件做CRC32校验
83 | CheckedOutputStream cos = new CheckedOutputStream(new FileOutputStream(
84 | zip), new CRC32());
85 | ZipOutputStream zos = new ZipOutputStream(cos);
86 | //压缩
87 | compress(dir, zos, "");
88 | zos.flush();
89 | zos.close();
90 | }
91 |
92 | /**
93 | * 添加目录/文件 至zip中
94 | * @param srcFile 需要添加的目录/文件
95 | * @param zos zip输出流
96 | * @param basePath 递归子目录时的完整目录 如 lib/x86
97 | * @throws Exception
98 | */
99 | private static void compress(File srcFile, ZipOutputStream zos,
100 | String basePath) throws Exception {
101 | if (srcFile.isDirectory()) {
102 | File[] files = srcFile.listFiles();
103 | for (File file : files) {
104 | // zip 递归添加目录中的文件
105 | compress(file, zos, basePath + srcFile.getName() + "/");
106 | }
107 | } else {
108 | compressFile(srcFile, zos, basePath);
109 | }
110 | }
111 |
112 | private static void compressFile(File file, ZipOutputStream zos, String dir)
113 | throws Exception {
114 | // temp/lib/x86/libdn_ssl.so
115 | String fullName = dir + file.getName();
116 | // 需要去掉temp
117 | String[] fileNames = fullName.split("/");
118 | //正确的文件目录名 (去掉了temp)
119 | StringBuffer sb = new StringBuffer();
120 | if (fileNames.length > 1){
121 | for (int i = 1;i \(.*\)$'`
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 |
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # This is a configuration file for ProGuard.
2 | # http://proguard.sourceforge.net/index.html#manual/usage.html
3 | #
4 | # Starting with version 2.2 of the Android plugin for Gradle, this file is distributed together with
5 | # the plugin and unpacked at build-time. The files in $ANDROID_HOME are no longer maintained and
6 | # will be ignored by new version of the Android plugin for Gradle.
7 |
8 | # Optimizations can be turned on and off in the 'postProcessing' DSL block.
9 | # The configuration below is applied if optimizations are enabled.
10 | # Adding optimization introduces certain risks, since for example not all optimizations performed by
11 | # ProGuard works on all versions of Dalvik. The following flags turn off various optimizations
12 | # known to have issues, but the list may not be complete or up to date. (The "arithmetic"
13 | # optimization can be used if you are only targeting Android 2.0 or later.) Make sure you test
14 | # thoroughly if you go this route.
15 | # --------------------------------------------基本指令区--------------------------------------------#
16 | # 指定代码的压缩级别(在0~7之间,默认为5)
17 | -optimizationpasses 5
18 | # 是否使用大小写混合(windows大小写不敏感,建议加入)
19 | -dontusemixedcaseclassnames
20 | # 是否混淆非公共的库的类
21 | -dontskipnonpubliclibraryclasses
22 | # 是否混淆非公共的库的类的成员
23 | -dontskipnonpubliclibraryclassmembers
24 | # 混淆时是否做预校验(Android不需要预校验,去掉可以加快混淆速度)
25 | -dontpreverify
26 | # 混淆时是否记录日志(混淆后会生成映射文件)
27 | -verbose
28 |
29 |
30 | # 混淆时所采用的算法(谷歌推荐算法)
31 | -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*,!code/allocation/variable
32 |
33 |
34 | # 将文件来源重命名为“SourceFile”字符串
35 | -renamesourcefileattribute SourceFile
36 |
37 | # 保持注解不被混淆
38 | -keepattributes *Annotation*
39 | -keep class * extends java.lang.annotation.Annotation {*;}
40 |
41 | # 保持泛型不被混淆
42 | -keepattributes Signature
43 | # 保持反射不被混淆
44 | -keepattributes EnclosingMethod
45 | # 保持异常不被混淆
46 | -keepattributes Exceptions
47 | # 保持内部类不被混淆
48 | -keepattributes Exceptions,InnerClasses
49 | # 抛出异常时保留代码行号
50 | -keepattributes SourceFile,LineNumberTable
51 |
52 | # --------------------------------------------默认保留区--------------------------------------------#
53 | # 保持基本组件不被混淆
54 | -keep public class * extends android.app.Fragment
55 | -keep public class * extends android.app.Activity
56 | -keep public class * extends android.app.Application
57 | -keep public class * extends android.app.Service
58 | -keep public class * extends android.content.BroadcastReceiver
59 | -keep public class * extends android.content.ContentProvider
60 | -keep public class * extends android.app.backup.BackupAgentHelper
61 | -keep public class * extends android.preference.Preference
62 |
63 | # 保持 Google 原生服务需要的类不被混淆
64 | -keep public class com.google.vending.licensing.ILicensingService
65 | -keep public class com.android.vending.licensing.ILicensingService
66 |
67 | # Support包规则
68 | -dontwarn android.support.**
69 | -keep public class * extends android.support.v4.**
70 | -keep public class * extends android.support.v7.**
71 | -keep public class * extends android.support.annotation.**
72 |
73 | # 保持 native 方法不被混淆
74 | -keepclasseswithmembernames class * {
75 | native ;
76 | }
77 |
78 | # 保留自定义控件(继承自View)不被混淆
79 | -keep public class * extends android.view.View {
80 | *** get*();
81 | void set*(***);
82 | public (android.content.Context);
83 | public (android.content.Context, android.util.AttributeSet);
84 | public (android.content.Context, android.util.AttributeSet, int);
85 | }
86 |
87 | # 保留指定格式的构造方法不被混淆
88 | -keepclasseswithmembers class * {
89 | public (android.content.Context, android.util.AttributeSet);
90 | public (android.content.Context, android.util.AttributeSet, int);
91 | }
92 |
93 | # 保留在 Activity 中的方法参数是view的方法(避免布局文件里面onClick被影响)
94 | -keepclassmembers class * extends android.app.Activity {
95 | public void *(android.view.View);
96 | }
97 |
98 | # 保持枚举 enum 类不被混淆
99 | -keepclassmembers enum * {
100 | public static **[] values();
101 | public static ** valueOf(java.lang.String);
102 | }
103 |
104 | # 保持R(资源)下的所有类及其方法不能被混淆
105 | -keep class **.R$* { *; }
106 |
107 | # 保持 Parcelable 序列化的类不被混淆(注:aidl文件不能去混淆)
108 | -keep class * implements android.os.Parcelable {
109 | public static final android.os.Parcelable$Creator *;
110 | }
111 |
112 | # 需要序列化和反序列化的类不能被混淆(注:Java反射用到的类也不能被混淆)
113 | -keepnames class * implements java.io.Serializable
114 |
115 | # 保持 Serializable 序列化的类成员不被混淆
116 | -keepclassmembers class * implements java.io.Serializable {
117 | static final long serialVersionUID;
118 | private static final java.io.ObjectStreamField[] serialPersistentFields;
119 | !static !transient ;
120 | !private ;
121 | !private ;
122 | private void writeObject(java.io.ObjectOutputStream);
123 | private void readObject(java.io.ObjectInputStream);
124 | java.lang.Object writeReplace();
125 | java.lang.Object readResolve();
126 | }
127 |
128 | # 保持 BaseAdapter 类不被混淆
129 | -keep public class * extends android.widget.BaseAdapter { *; }
130 | # 保持 CusorAdapter 类不被混淆
131 | -keep public class * extends android.widget.CusorAdapter{ *; }
132 |
133 | # --------------------------------------------webView区--------------------------------------------#
134 | # WebView处理,项目中没有使用到webView忽略即可
135 | # 保持Android与JavaScript进行交互的类不被混淆
136 | -keep class **.AndroidJavaScript { *; }
137 | -keepclassmembers class * extends android.webkit.WebViewClient {
138 | public void *(android.webkit.WebView,java.lang.String,android.graphics.Bitmap);
139 | public boolean *(android.webkit.WebView,java.lang.String);
140 | }
141 | -keepclassmembers class * extends android.webkit.WebChromeClient {
142 | public void *(android.webkit.WebView,java.lang.String);
143 | }
144 |
145 | # 网络请求相关
146 | -keep public class android.net.http.SslError
147 |
148 | # --------------------------------------------删除代码区--------------------------------------------#
149 | # 删除代码中Log相关的代码
150 | -assumenosideeffects class android.util.Log {
151 | public static boolean isLoggable(java.lang.String, int);
152 | public static int v(...);
153 | public static int i(...);
154 | public static int w(...);
155 | public static int d(...);
156 | public static int e(...);
157 | }
158 |
159 | # DateUtils 类不被混淆
160 | -keep public class com.yk.dexdeapplication.DateUtils{*;}
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
10 |
15 |
20 |
25 |
30 |
35 |
40 |
45 |
50 |
55 |
60 |
65 |
70 |
75 |
80 |
85 |
90 |
95 |
100 |
105 |
110 |
115 |
120 |
125 |
130 |
135 |
140 |
145 |
150 |
155 |
160 |
165 |
170 |
171 |
--------------------------------------------------------------------------------
/proxy_tools/src/main/java/com/example/proxy_tools/Main.java:
--------------------------------------------------------------------------------
1 | package com.example.proxy_tools;
2 |
3 | import java.io.File;
4 | import java.io.FileOutputStream;
5 | import java.io.FilenameFilter;
6 | import java.io.IOException;
7 |
8 | public class Main {
9 |
10 | public static void main(String[] args) throws Exception {
11 | System.out.println("start");
12 |
13 | /**
14 | * 1.制作只包含解密代码的dex文件
15 | */
16 | makeDecodeDex();
17 |
18 | /**
19 | * 2.加密APK中所有的dex文件
20 | */
21 | encryptApkAllDex();
22 |
23 | /**
24 | * 3.把dex放入apk解压目录,重新压成apk文件
25 | */
26 | makeApk();
27 |
28 |
29 | /**
30 | * 4.对齐
31 | */
32 | zipalign();
33 |
34 | /**
35 | * 5. 签名打包
36 | */
37 | jksToApk();
38 | }
39 |
40 |
41 | /**
42 | * 1.制作只包含解密代码的dex文件
43 | */
44 | public static void makeDecodeDex() throws IOException, InterruptedException {
45 | File aarFile = new File("proxy_core/build/outputs/aar/proxy_core-debug.aar");
46 | File aarTemp = new File("proxy_tools/temp");
47 | Zip.unZip(aarFile, aarTemp);
48 | File classesJar = new File(aarTemp, "classes.jar");
49 | File classesDex = new File(aarTemp, "classes.dex");
50 | //dx --dex --output out.dex in.jar
51 | //window
52 | //Process process = Runtime.getRuntime().exec("cmd /c dx --dex --output " + classesDex.getAbsolutePath()
53 | //Mac
54 | // Process process = Runtime.getRuntime().exec(" dx --dex --output " + classesDex.getAbsolutePath()
55 | // + " " + classesJar.getAbsolutePath());
56 |
57 |
58 | String dex = "E:/work/android-sdk-windows/build-tools/27.0.3/";
59 | String text = "cmd /c" + dex + "dx --dex --output " + classesDex.getAbsolutePath() + " " + classesJar.getAbsolutePath();
60 | Process process = Runtime.getRuntime().exec(text);
61 | process.waitFor();
62 | if (process.exitValue() != 0) {
63 | throw new RuntimeException("dex error");
64 | }
65 |
66 | System.out.println("makeDecodeDex--ok");
67 | }
68 |
69 | /**
70 | * 2.加密APK中所有的dex文件
71 | */
72 | public static void encryptApkAllDex() throws Exception {
73 | File apkFile = new File("app/build/outputs/apk/debug/app-debug.apk");
74 | File apkTemp = new File("app/build/outputs/apk/debug/temp");
75 | Zip.unZip(apkFile, apkTemp);
76 | //只要dex文件拿出来加密
77 | File[] dexFiles = apkTemp.listFiles(new FilenameFilter() {
78 | @Override
79 | public boolean accept(File file, String s) {
80 | return s.endsWith(".dex");
81 | }
82 | });
83 | //AES加密了
84 | for (File dexFile : dexFiles) {
85 | byte[] bytes = DexUtils.getBytes(dexFile);
86 | byte[] encrypt = EncryptUtil.encrypt(bytes, EncryptUtil.ivBytes);
87 | FileOutputStream fos = new FileOutputStream(new File(apkTemp,
88 | "secret-" + dexFile.getName()));
89 | fos.write(encrypt);
90 | fos.flush();
91 | fos.close();
92 | dexFile.delete();
93 |
94 | }
95 | System.out.println("encryptApkAllDex--ok");
96 | }
97 |
98 | /**
99 | * 3.把dex放入apk解压目录,重新压成apk文件
100 | */
101 | private static void makeApk() throws Exception {
102 | File apkTemp = new File("app/build/outputs/apk/debug/temp");
103 | File aarTemp = new File("proxy_tools/temp");
104 | File classesDex = new File(aarTemp, "classes.dex");
105 | classesDex.renameTo(new File(apkTemp, "classes.dex"));
106 | File unSignedApk = new File("app/build/outputs/apk/debug/app-unsigned.apk");
107 | Zip.zip(apkTemp, unSignedApk);
108 | System.out.println("makeApk--ok");
109 | }
110 |
111 | /**
112 | * 4. 对齐
113 | */
114 | private static void zipalign() throws IOException, InterruptedException {
115 | File unSignedApk = new File("app/build/outputs/apk/debug/app-unsigned.apk");
116 | // zipalign -v -p 4 my-app-unsigned.apk my-app-unsigned-aligned.apk
117 | File alignedApk = new File("app/build/outputs/apk/debug/app-unsigned-aligned.apk");
118 | if (alignedApk.exists()) {
119 | alignedApk.delete();
120 | }
121 | // Process process = Runtime.getRuntime().exec("cmd /c zipalign -v -p 4 " + unSignedApk.getAbsolutePath()
122 | // Process process = Runtime.getRuntime().exec(" zipalign -v -p 4 " + unSignedApk.getAbsolutePath()
123 |
124 |
125 | String dex = "E:/work/android-sdk-windows/build-tools/27.0.3/";
126 | String text = "cmd /c" + dex + "zipalign -f 4 " + unSignedApk.getAbsolutePath() + " " + alignedApk.getAbsolutePath();
127 | Process process = Runtime.getRuntime().exec(text);
128 | process.waitFor();
129 | //zipalign -v -p 4 D:\Downloads\android_space\DexDEApplication\app\build\outputs\apk\debug\app-unsigned.apk D:\Downloads\android_space\DexDEApplication\app\build\outputs\apk\debug\app-unsigned-aligned.apk
130 | System.out.println(process.waitFor() == 0 ? "zipalign---success" : "zipalign---failure");
131 | }
132 |
133 | /**
134 | * 签名 打包
135 | *
136 | * @throws IOException
137 | */
138 | public static void jksToApk() throws IOException, InterruptedException {
139 | // apksigner sign --ks my-release-key.jks --out my-app-release.apk my-app-unsigned-aligned.apk
140 | //apksigner sign --ks jks文件地址 --ks-key-alias 别名 --ks-pass pass:jsk密码 --key-pass pass:别名密码 --out out.apk in.apk
141 | File signedApk = new File("app/build/outputs/apk/debug/app-signed-aligned.apk");
142 | if (signedApk.exists()) {
143 | signedApk.delete();
144 | }
145 | File jks = new File("proxy_tools/dexjks.jks");
146 | File alignedApk = new File("app/build/outputs/apk/debug/app-unsigned-aligned.apk");
147 | //apksigner sign --ks D:\Downloads\android_space\DexDEApplication\proxy_tools\dexjks.jks --ks-key-alias yangkun --ks-pass pass:123123 --key-pass pass:123123 --out D:\Downloads\android_space\DexDEApplication\app\build\outputs\apk\debug\app-signed-aligned.apk D:\Downloads\android_space\DexDEApplication\app\build\outputs\apk\debug\app-unsigned-aligned.apk
148 | //apksigner sign --ks my-release-key.jks --out my-app-release.apk my-app-unsigned-aligned.apk
149 | // Process process = Runtime.getRuntime().exec("cmd /c apksigner sign --ks " + jks.getAbsolutePath()
150 | // Process process = Runtime.getRuntime().exec(" apksigner sign --ks " + jks.getAbsolutePath()
151 | // + " --ks-key-alias yangkun --ks-pass pass:123123 --key-pass pass:123123 --out "
152 | // + signedApk.getAbsolutePath() + " " + alignedApk.getAbsolutePath());
153 |
154 |
155 | String dex = "E:/work/android-sdk-windows/build-tools/27.0.3/";
156 | String text = "cmd /c" + dex + "apksigner sign --ks " + jks.getAbsolutePath() + " --ks-key-alias yangkun --ks-pass pass:123123 --key-pass pass:123123 --out " + signedApk.getAbsolutePath() + " " + alignedApk.getAbsolutePath();
157 | Process process = Runtime.getRuntime().exec(text);
158 |
159 | process.waitFor();
160 | if (process.exitValue() != 0) {
161 | throw new RuntimeException("dex error");
162 | }
163 | System.out.println("jksToApk----> ok");
164 | }
165 | }
166 |
--------------------------------------------------------------------------------
/proxy_core/src/main/java/com/example/proxy_core/CrashHandler.java:
--------------------------------------------------------------------------------
1 | package com.example.proxy_core;
2 |
3 | import android.content.Context;
4 | import android.content.pm.PackageInfo;
5 | import android.content.pm.PackageManager;
6 | import android.content.pm.PackageManager.NameNotFoundException;
7 | import android.os.Build;
8 | import android.os.Environment;
9 | import android.util.Log;
10 |
11 | import java.io.File;
12 | import java.io.FileOutputStream;
13 | import java.io.PrintWriter;
14 | import java.io.StringWriter;
15 | import java.io.Writer;
16 | import java.lang.Thread.UncaughtExceptionHandler;
17 | import java.lang.reflect.Field;
18 | import java.text.DateFormat;
19 | import java.text.SimpleDateFormat;
20 | import java.util.Date;
21 | import java.util.HashMap;
22 | import java.util.Map;
23 |
24 | /**
25 | * UncaughtException处理类,当程序发生Uncaught异常的时候,有该类来接管程序,并记录发送错误报告.
26 | *
27 | * @author user
28 | */
29 | public class CrashHandler implements UncaughtExceptionHandler {
30 |
31 | public static final String TAG = "CrashHandler";
32 |
33 | //系统默认的UncaughtException处理类
34 | private UncaughtExceptionHandler mDefaultHandler;
35 | //CrashHandler实例
36 | private static CrashHandler INSTANCE = new CrashHandler();
37 | //程序的Context对象
38 | private Context mContext;
39 | //用来存储设备信息和异常信息
40 | private Map infos = new HashMap();
41 |
42 | //用于格式化日期,作为日志文件名的一部分
43 | private DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
44 |
45 | // 日志地址
46 | private String logPath;
47 | private String dir;
48 | private ICrashHandlerListener iCrashHandlerListener;
49 |
50 | /**
51 | * 保证只有一个CrashHandler实例
52 | */
53 | private CrashHandler() {
54 | }
55 |
56 | /**
57 | * 获取CrashHandler实例 ,单例模式
58 | */
59 | public static CrashHandler getInstance() {
60 | return INSTANCE;
61 | }
62 |
63 | /**
64 | * 初始化
65 | *
66 | * @param context
67 | */
68 | public CrashHandler init(Context context) {
69 | mContext = context;
70 | //获取系统默认的UncaughtException处理器
71 | mDefaultHandler = Thread.getDefaultUncaughtExceptionHandler();
72 | //设置该CrashHandler为程序的默认处理器
73 | Thread.setDefaultUncaughtExceptionHandler(this);
74 | return this;
75 |
76 | }
77 |
78 | /**
79 | * 当UncaughtException发生时会转入该函数来处理
80 | */
81 | @Override
82 | public void uncaughtException(Thread thread, final Throwable ex) {
83 | if (!handleException(ex) && mDefaultHandler != null) {
84 | //如果用户没有处理则让系统默认的异常处理器来处理
85 | mDefaultHandler.uncaughtException(thread, ex);
86 | } else {
87 | /* try {
88 | ArmsUtils.obtainAppComponentFromContext(mContext).appManager().killAll();
89 | RestartAPPTool.restartAPP(mContext);
90 | } catch (Exception e) {
91 | e.printStackTrace();
92 | }
93 | //重启APP
94 | //打印日志地址
95 | LogUtils.debugInfo(TAG,ex.getMessage());
96 | Message message = new Message();
97 | message.what = AppManager.APP_EXIT;
98 | AppManager.post(message);
99 | *//**杀死整个进程**//*
100 | android.os.Process.killProcess(android.os.Process.myPid());*/
101 | }
102 | }
103 |
104 |
105 | private void sendMail(Throwable message) {
106 |
107 | }
108 |
109 | /**
110 | * 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成.
111 | *
112 | * @param ex
113 | * @return true:如果处理了该异常信息;否则返回false.
114 | */
115 | private boolean handleException(final Throwable ex) {
116 | if (ex == null) {
117 | return false;
118 | }
119 | new Thread(){
120 | @Override
121 | public void run() {
122 | try {
123 | Thread.sleep(2000);
124 | } catch (InterruptedException e) {
125 | e.printStackTrace();
126 | }
127 |
128 | }
129 | }.start();
130 |
131 | Log.e("异常是=============:", ex.getMessage());
132 | //收集设备参数信息
133 | collectDeviceInfo(mContext);
134 | //保存日志文件
135 | String s = saveCrashInfo2File(ex);
136 |
137 | return true;
138 | }
139 |
140 | /**
141 | * 收集设备参数信息
142 | *
143 | * @param ctx
144 | */
145 | public void collectDeviceInfo(Context ctx) {
146 | try {
147 | PackageManager pm = ctx.getPackageManager();
148 | PackageInfo pi = pm.getPackageInfo(ctx.getPackageName(), PackageManager.GET_ACTIVITIES);
149 | if (pi != null) {
150 | String versionName = pi.versionName == null ? "null" : pi.versionName;
151 | String versionCode = pi.versionCode + "";
152 | infos.put("versionName", versionName);
153 | infos.put("versionCode", versionCode);
154 | }
155 | } catch (NameNotFoundException e) {
156 | Log.e(TAG, "an error occured when collect package info", e);
157 | }
158 | Field[] fields = Build.class.getDeclaredFields();
159 | for (Field field : fields) {
160 | try {
161 | field.setAccessible(true);
162 | infos.put(field.getName(), field.get(null).toString());
163 | Log.d(TAG, field.getName() + " : " + field.get(null));
164 | } catch (Exception e) {
165 | Log.e(TAG, "an error occured when collect crash info", e);
166 | }
167 | }
168 | }
169 |
170 | /**
171 | * 保存错误信息到文件中
172 | *
173 | * @param ex
174 | * @return 返回文件名称, 便于将文件传送到服务器
175 | */
176 | private String saveCrashInfo2File(Throwable ex) {
177 | StringBuffer sb = new StringBuffer();
178 | for (Map.Entry entry : infos.entrySet()) {
179 | String key = entry.getKey();
180 | String value = entry.getValue();
181 | sb.append(key + "=" + value + "\n");
182 | }
183 |
184 | Writer writer = new StringWriter();
185 | PrintWriter printWriter = new PrintWriter(writer);
186 | ex.printStackTrace(printWriter);
187 | Throwable cause = ex.getCause();
188 | while (cause != null) {
189 | cause.printStackTrace(printWriter);
190 | cause = cause.getCause();
191 | }
192 | printWriter.close();
193 | String result = writer.toString();
194 | sb.append(result);
195 | Log.e(TAG+"错误日志----",sb.toString());
196 | try {
197 | long timestamp = System.currentTimeMillis();
198 | String time = formatter.format(new Date());
199 | String fileName = "BeiJing" + time + "-" + timestamp + ".txt";
200 | if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
201 | String path = Environment.getExternalStorageDirectory() + "/crash/";
202 | File dir = new File(path);
203 | if (!dir.exists()) {
204 | dir.mkdirs();
205 | }
206 | FileOutputStream fos = new FileOutputStream(path + fileName);
207 | logPath = path + fileName;
208 | fos.write(sb.toString().getBytes());
209 | fos.close();
210 | }
211 |
212 | if (iCrashHandlerListener != null)
213 | iCrashHandlerListener.onCrash(sb.toString());
214 |
215 | return fileName;
216 | } catch (Exception e) {
217 | Log.e(TAG, "an error occured while writing file...", e);
218 | }
219 | return null;
220 | }
221 |
222 |
223 | public interface ICrashHandlerListener{
224 | void onCrash(String crash);
225 | }
226 |
227 | public void setCrashHandlerListener(ICrashHandlerListener iCrashHandlerListener){
228 | this.iCrashHandlerListener = iCrashHandlerListener;
229 | }
230 | }
--------------------------------------------------------------------------------
/proxy_core/src/main/java/com/example/proxy_core/EncryptUtil.java:
--------------------------------------------------------------------------------
1 | package com.example.proxy_core;
2 |
3 |
4 | import java.io.UnsupportedEncodingException;
5 | import java.security.InvalidKeyException;
6 | import java.security.NoSuchAlgorithmException;
7 |
8 | import javax.crypto.BadPaddingException;
9 | import javax.crypto.Cipher;
10 | import javax.crypto.IllegalBlockSizeException;
11 | import javax.crypto.NoSuchPaddingException;
12 | import javax.crypto.spec.SecretKeySpec;
13 |
14 | /**
15 | * @Description: AES算法封装
16 | */
17 | public class EncryptUtil {
18 |
19 | /**
20 | * 加密算法
21 | */
22 | private static final String ENCRY_ALGORITHM = "AES";
23 |
24 |
25 |
26 | /**
27 | * 加密算法/加密模式/填充类型
28 | * 本例采用AES加密,ECB加密模式,PKCS5Padding填充
29 | */
30 | private static final String CIPHER_MODE = "AES/ECB/PKCS5Padding";
31 |
32 | public static final byte[] ivBytes = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
33 |
34 | /**
35 | * 设置iv偏移量
36 | * 本例采用ECB加密模式,不需要设置iv偏移量
37 | */
38 | private static final String IV_ = null;
39 |
40 | /**
41 | * 设置加密字符集
42 | * 本例采用 UTF-8 字符集
43 | */
44 | private static final String CHARACTER = "UTF-8";
45 |
46 | /**
47 | * 设置加密密码处理长度。
48 | * 不足此长度补0;
49 | */
50 | private static final int PWD_SIZE = 16;
51 |
52 | /**
53 | * 密码处理方法
54 | * 如果加解密出问题,
55 | * 请先查看本方法,排除密码长度不足补"0",导致密码不一致
56 | * @param password 待处理的密码
57 | * @return
58 | * @throws UnsupportedEncodingException
59 | */
60 | private static byte[] pwdHandler(String password) throws UnsupportedEncodingException {
61 | byte[] data = null;
62 | if (password == null) {
63 | password = "";
64 | }
65 | StringBuffer sb = new StringBuffer(PWD_SIZE);
66 | sb.append(password);
67 | while (sb.length() < PWD_SIZE) {
68 | sb.append("0");
69 | }
70 | if (sb.length() > PWD_SIZE) {
71 | sb.setLength(PWD_SIZE);
72 | }
73 |
74 | data = sb.toString().getBytes("UTF-8");
75 |
76 | return data;
77 | }
78 |
79 | //======================>原始加密<======================
80 |
81 | /**
82 | * 原始加密
83 | * @param clearTextBytes 明文字节数组,待加密的字节数组
84 | * @param pwdBytes 加密密码字节数组
85 | * @return 返回加密后的密文字节数组,加密错误返回null
86 | */
87 | public static byte[] encrypt(byte[] clearTextBytes, byte[] pwdBytes) {
88 | try {
89 | // 1 获取加密密钥
90 | SecretKeySpec keySpec = new SecretKeySpec(pwdBytes, ENCRY_ALGORITHM);
91 |
92 | // 2 获取Cipher实例
93 | Cipher cipher = Cipher.getInstance(CIPHER_MODE);
94 |
95 | // 查看数据块位数 默认为16(byte) * 8 =128 bit
96 | // System.out.println("数据块位数(byte):" + cipher.getBlockSize());
97 |
98 | // 3 初始化Cipher实例。设置执行模式以及加密密钥
99 | cipher.init(Cipher.ENCRYPT_MODE, keySpec);
100 |
101 | // 4 执行
102 | byte[] cipherTextBytes = cipher.doFinal(clearTextBytes);
103 |
104 | // 5 返回密文字符集
105 | return cipherTextBytes;
106 |
107 | } catch (NoSuchPaddingException e) {
108 | e.printStackTrace();
109 | } catch (NoSuchAlgorithmException e) {
110 | e.printStackTrace();
111 | } catch (BadPaddingException e) {
112 | e.printStackTrace();
113 | } catch (IllegalBlockSizeException e) {
114 | e.printStackTrace();
115 | } catch (InvalidKeyException e) {
116 | e.printStackTrace();
117 | } catch (Exception e) {
118 | e.printStackTrace();
119 | }
120 | return null;
121 | }
122 |
123 | /**
124 | * 原始解密
125 | * @param cipherTextBytes 密文字节数组,待解密的字节数组
126 | * @param pwdBytes 解密密码字节数组
127 | * @return 返回解密后的明文字节数组,解密错误返回null
128 | */
129 | public static byte[] decrypt(byte[] cipherTextBytes, byte[] pwdBytes) {
130 |
131 | try {
132 | // 1 获取解密密钥
133 | SecretKeySpec keySpec = new SecretKeySpec(pwdBytes, ENCRY_ALGORITHM);
134 |
135 | // 2 获取Cipher实例
136 | Cipher cipher = Cipher.getInstance(CIPHER_MODE);
137 |
138 | // 查看数据块位数 默认为16(byte) * 8 =128 bit
139 | // System.out.println("数据块位数(byte):" + cipher.getBlockSize());
140 |
141 | // 3 初始化Cipher实例。设置执行模式以及加密密钥
142 | cipher.init(Cipher.DECRYPT_MODE, keySpec);
143 |
144 | // 4 执行
145 | byte[] clearTextBytes = cipher.doFinal(cipherTextBytes);
146 |
147 | // 5 返回明文字符集
148 | return clearTextBytes;
149 |
150 | } catch (NoSuchAlgorithmException e) {
151 | e.printStackTrace();
152 | } catch (InvalidKeyException e) {
153 | e.printStackTrace();
154 | } catch (NoSuchPaddingException e) {
155 | e.printStackTrace();
156 | } catch (BadPaddingException e) {
157 | e.printStackTrace();
158 | } catch (IllegalBlockSizeException e) {
159 | e.printStackTrace();
160 | } catch (Exception e) {
161 | e.printStackTrace();
162 | }
163 | // 解密错误 返回null
164 | return null;
165 | }
166 |
167 |
168 | //======================>HEX<======================
169 |
170 | /**
171 | * HEX加密
172 | * @param clearText 明文,待加密的内容
173 | * @param password 密码,加密的密码
174 | * @return 返回密文,加密后得到的内容。加密错误返回null
175 | */
176 | public static String encryptHex(String clearText, String password) {
177 | try {
178 | // 1 获取加密密文字节数组
179 | byte[] cipherTextBytes = encrypt(clearText.getBytes(CHARACTER), pwdHandler(password));
180 |
181 | // 2 对密文字节数组进行 转换为 HEX输出密文
182 | String cipherText = byte2hex(cipherTextBytes);
183 |
184 | // 3 返回 HEX输出密文
185 | return cipherText;
186 | } catch (UnsupportedEncodingException e) {
187 | e.printStackTrace();
188 | } catch (Exception e) {
189 | e.printStackTrace();
190 | }
191 | // 加密错误返回null
192 | return null;
193 | }
194 |
195 | /**
196 | * HEX解密
197 | * @param cipherText 密文,带解密的内容
198 | * @param password 密码,解密的密码
199 | * @return 返回明文,解密后得到的内容。解密错误返回null
200 | */
201 | public static String decryptHex(String cipherText, String password) {
202 | try {
203 | // 1 将HEX输出密文 转为密文字节数组
204 | byte[] cipherTextBytes = hex2byte(cipherText);
205 |
206 | // 2 将密文字节数组进行解密 得到明文字节数组
207 | byte[] clearTextBytes = decrypt(cipherTextBytes, pwdHandler(password));
208 |
209 | // 3 根据 CHARACTER 转码,返回明文字符串
210 | return new String(clearTextBytes, CHARACTER);
211 | } catch (UnsupportedEncodingException e) {
212 | e.printStackTrace();
213 | } catch (Exception e) {
214 | e.printStackTrace();
215 | }
216 | // 解密错误返回null
217 | return null;
218 | }
219 |
220 | /*字节数组转成16进制字符串 */
221 | public static String byte2hex(byte[] bytes) { // 一个字节的数,
222 | StringBuffer sb = new StringBuffer(bytes.length * 2);
223 | String tmp = "";
224 | for (int n = 0; n < bytes.length; n++) {
225 | // 整数转成十六进制表示
226 | tmp = (Integer.toHexString(bytes[n] & 0XFF));
227 | if (tmp.length() == 1) {
228 | sb.append("0");
229 | }
230 | sb.append(tmp);
231 | }
232 | return sb.toString().toUpperCase(); // 转成大写
233 | }
234 |
235 | /*将hex字符串转换成字节数组 */
236 | private static byte[] hex2byte(String str) {
237 | if (str == null || str.length() < 2) {
238 | return new byte[0];
239 | }
240 | str = str.toLowerCase();
241 | int l = str.length() / 2;
242 | byte[] result = new byte[l];
243 | for (int i = 0; i < l; ++i) {
244 | String tmp = str.substring(2 * i, 2 * i + 2);
245 | result[i] = (byte) (Integer.parseInt(tmp, 16) & 0xFF);
246 | }
247 | return result;
248 | }
249 |
250 | public static void main(String[] args) {
251 | String test = encryptHex("test", "1234567800000000");
252 | System.out.println(test);
253 |
254 | System.out.println(decryptHex(test, "1234567800000000"));
255 | }
256 | }
--------------------------------------------------------------------------------
/proxy_tools/src/main/java/com/example/proxy_tools/EncryptUtil.java:
--------------------------------------------------------------------------------
1 | package com.example.proxy_tools;
2 |
3 |
4 | import java.io.UnsupportedEncodingException;
5 | import java.security.InvalidKeyException;
6 | import java.security.NoSuchAlgorithmException;
7 |
8 | import javax.crypto.BadPaddingException;
9 | import javax.crypto.Cipher;
10 | import javax.crypto.IllegalBlockSizeException;
11 | import javax.crypto.NoSuchPaddingException;
12 | import javax.crypto.spec.SecretKeySpec;
13 |
14 | /**
15 | * @Description: AES算法封装
16 | */
17 | public class EncryptUtil{
18 |
19 | /**
20 | * 加密算法
21 | */
22 | private static final String ENCRY_ALGORITHM = "AES";
23 |
24 |
25 |
26 | /**
27 | * 加密算法/加密模式/填充类型
28 | * 本例采用AES加密,ECB加密模式,PKCS5Padding填充
29 | */
30 | private static final String CIPHER_MODE = "AES/ECB/PKCS5Padding";
31 |
32 | public static final byte[] ivBytes = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
33 |
34 | /**
35 | * 设置iv偏移量
36 | * 本例采用ECB加密模式,不需要设置iv偏移量
37 | */
38 | private static final String IV_ = null;
39 |
40 | /**
41 | * 设置加密字符集
42 | * 本例采用 UTF-8 字符集
43 | */
44 | private static final String CHARACTER = "UTF-8";
45 |
46 | /**
47 | * 设置加密密码处理长度。
48 | * 不足此长度补0;
49 | */
50 | private static final int PWD_SIZE = 16;
51 |
52 | /**
53 | * 密码处理方法
54 | * 如果加解密出问题,
55 | * 请先查看本方法,排除密码长度不足补"0",导致密码不一致
56 | * @param password 待处理的密码
57 | * @return
58 | * @throws UnsupportedEncodingException
59 | */
60 | private static byte[] pwdHandler(String password) throws UnsupportedEncodingException {
61 | byte[] data = null;
62 | if (password == null) {
63 | password = "";
64 | }
65 | StringBuffer sb = new StringBuffer(PWD_SIZE);
66 | sb.append(password);
67 | while (sb.length() < PWD_SIZE) {
68 | sb.append("0");
69 | }
70 | if (sb.length() > PWD_SIZE) {
71 | sb.setLength(PWD_SIZE);
72 | }
73 |
74 | data = sb.toString().getBytes("UTF-8");
75 |
76 | return data;
77 | }
78 |
79 | //======================>原始加密<======================
80 |
81 | /**
82 | * 原始加密
83 | * @param clearTextBytes 明文字节数组,待加密的字节数组
84 | * @param pwdBytes 加密密码字节数组
85 | * @return 返回加密后的密文字节数组,加密错误返回null
86 | */
87 | public static byte[] encrypt(byte[] clearTextBytes, byte[] pwdBytes) {
88 | try {
89 | // 1 获取加密密钥
90 | SecretKeySpec keySpec = new SecretKeySpec(pwdBytes, ENCRY_ALGORITHM);
91 |
92 | // 2 获取Cipher实例
93 | Cipher cipher = Cipher.getInstance(CIPHER_MODE);
94 |
95 | // 查看数据块位数 默认为16(byte) * 8 =128 bit
96 | // System.out.println("数据块位数(byte):" + cipher.getBlockSize());
97 |
98 | // 3 初始化Cipher实例。设置执行模式以及加密密钥
99 | cipher.init(Cipher.ENCRYPT_MODE, keySpec);
100 |
101 | // 4 执行
102 | byte[] cipherTextBytes = cipher.doFinal(clearTextBytes);
103 |
104 | // 5 返回密文字符集
105 | return cipherTextBytes;
106 |
107 | } catch (NoSuchPaddingException e) {
108 | e.printStackTrace();
109 | } catch (NoSuchAlgorithmException e) {
110 | e.printStackTrace();
111 | } catch (BadPaddingException e) {
112 | e.printStackTrace();
113 | } catch (IllegalBlockSizeException e) {
114 | e.printStackTrace();
115 | } catch (InvalidKeyException e) {
116 | e.printStackTrace();
117 | } catch (Exception e) {
118 | e.printStackTrace();
119 | }
120 | return null;
121 | }
122 |
123 | /**
124 | * 原始解密
125 | * @param cipherTextBytes 密文字节数组,待解密的字节数组
126 | * @param pwdBytes 解密密码字节数组
127 | * @return 返回解密后的明文字节数组,解密错误返回null
128 | */
129 | public static byte[] decrypt(byte[] cipherTextBytes, byte[] pwdBytes) {
130 |
131 | try {
132 | // 1 获取解密密钥
133 | SecretKeySpec keySpec = new SecretKeySpec(pwdBytes, ENCRY_ALGORITHM);
134 |
135 | // 2 获取Cipher实例
136 | Cipher cipher = Cipher.getInstance(CIPHER_MODE);
137 |
138 | // 查看数据块位数 默认为16(byte) * 8 =128 bit
139 | // System.out.println("数据块位数(byte):" + cipher.getBlockSize());
140 |
141 | // 3 初始化Cipher实例。设置执行模式以及加密密钥
142 | cipher.init(Cipher.DECRYPT_MODE, keySpec);
143 |
144 | // 4 执行
145 | byte[] clearTextBytes = cipher.doFinal(cipherTextBytes);
146 |
147 | // 5 返回明文字符集
148 | return clearTextBytes;
149 |
150 | } catch (NoSuchAlgorithmException e) {
151 | e.printStackTrace();
152 | } catch (InvalidKeyException e) {
153 | e.printStackTrace();
154 | } catch (NoSuchPaddingException e) {
155 | e.printStackTrace();
156 | } catch (BadPaddingException e) {
157 | e.printStackTrace();
158 | } catch (IllegalBlockSizeException e) {
159 | e.printStackTrace();
160 | } catch (Exception e) {
161 | e.printStackTrace();
162 | }
163 | // 解密错误 返回null
164 | return null;
165 | }
166 |
167 |
168 | //======================>HEX<======================
169 |
170 | /**
171 | * HEX加密
172 | * @param clearText 明文,待加密的内容
173 | * @param password 密码,加密的密码
174 | * @return 返回密文,加密后得到的内容。加密错误返回null
175 | */
176 | public static String encryptHex(String clearText, String password) {
177 | try {
178 | // 1 获取加密密文字节数组
179 | byte[] cipherTextBytes = encrypt(clearText.getBytes(CHARACTER), pwdHandler(password));
180 |
181 | // 2 对密文字节数组进行 转换为 HEX输出密文
182 | String cipherText = byte2hex(cipherTextBytes);
183 |
184 | // 3 返回 HEX输出密文
185 | return cipherText;
186 | } catch (UnsupportedEncodingException e) {
187 | e.printStackTrace();
188 | } catch (Exception e) {
189 | e.printStackTrace();
190 | }
191 | // 加密错误返回null
192 | return null;
193 | }
194 |
195 | /**
196 | * HEX解密
197 | * @param cipherText 密文,带解密的内容
198 | * @param password 密码,解密的密码
199 | * @return 返回明文,解密后得到的内容。解密错误返回null
200 | */
201 | public static String decryptHex(String cipherText, String password) {
202 | try {
203 | // 1 将HEX输出密文 转为密文字节数组
204 | byte[] cipherTextBytes = hex2byte(cipherText);
205 |
206 | // 2 将密文字节数组进行解密 得到明文字节数组
207 | byte[] clearTextBytes = decrypt(cipherTextBytes, pwdHandler(password));
208 |
209 | // 3 根据 CHARACTER 转码,返回明文字符串
210 | return new String(clearTextBytes, CHARACTER);
211 | } catch (UnsupportedEncodingException e) {
212 | e.printStackTrace();
213 | } catch (Exception e) {
214 | e.printStackTrace();
215 | }
216 | // 解密错误返回null
217 | return null;
218 | }
219 |
220 | /*字节数组转成16进制字符串 */
221 | public static String byte2hex(byte[] bytes) { // 一个字节的数,
222 | StringBuffer sb = new StringBuffer(bytes.length * 2);
223 | String tmp = "";
224 | for (int n = 0; n < bytes.length; n++) {
225 | // 整数转成十六进制表示
226 | tmp = (java.lang.Integer.toHexString(bytes[n] & 0XFF));
227 | if (tmp.length() == 1) {
228 | sb.append("0");
229 | }
230 | sb.append(tmp);
231 | }
232 | return sb.toString().toUpperCase(); // 转成大写
233 | }
234 |
235 | /*将hex字符串转换成字节数组 */
236 | private static byte[] hex2byte(String str) {
237 | if (str == null || str.length() < 2) {
238 | return new byte[0];
239 | }
240 | str = str.toLowerCase();
241 | int l = str.length() / 2;
242 | byte[] result = new byte[l];
243 | for (int i = 0; i < l; ++i) {
244 | String tmp = str.substring(2 * i, 2 * i + 2);
245 | result[i] = (byte) (Integer.parseInt(tmp, 16) & 0xFF);
246 | }
247 | return result;
248 | }
249 |
250 | public static void main(String[] args) {
251 | String test = encryptHex("test", "1234567800000000");
252 | System.out.println(test);
253 |
254 | System.out.println(decryptHex(test, "1234567800000000"));
255 | }
256 | }
--------------------------------------------------------------------------------
/proxy_core/src/main/java/com/example/proxy_core/ProxyApplication.java:
--------------------------------------------------------------------------------
1 | package com.example.proxy_core;
2 |
3 | import android.app.Application;
4 | import android.content.Context;
5 | import android.content.pm.ApplicationInfo;
6 | import android.content.pm.PackageManager;
7 | import android.os.Bundle;
8 | import android.os.Debug;
9 | import android.os.Environment;
10 | import android.text.TextUtils;
11 | import android.util.Log;
12 |
13 | import java.io.File;
14 | import java.io.FileOutputStream;
15 | import java.io.IOException;
16 | import java.lang.reflect.Array;
17 | import java.lang.reflect.Field;
18 | import java.lang.reflect.Method;
19 | import java.util.ArrayList;
20 | import java.util.List;
21 |
22 | public class ProxyApplication extends Application {
23 |
24 | //定义好解密后的文件的存放路径
25 | private String app_name;
26 | private String app_version;
27 |
28 | private String TAG = this.getClass().getSimpleName();
29 |
30 | /**
31 | * ActivityThread创建Application之后调用的第一个方法
32 | * 可以在这个方法中进行解密,同时把dex交给android去加载
33 | */
34 | @Override
35 | protected void attachBaseContext(Context base) {
36 | super.attachBaseContext(base);
37 | CrashHandler.getInstance().init(base);
38 | //获取用户填入的metadata
39 | getMetaData();
40 |
41 | //得到当前加密了的APK文件
42 | // File apkFile=new File(Environment.getExternalStorageDirectory()+"/app-signed-aligned.apk");
43 | File apkFile = new File(getApplicationInfo().sourceDir);
44 |
45 | //把apk解压 app_name+"_"+app_version目录中的内容需要boot权限才能用
46 | String dexDirName = "dexDir";
47 | File appDir = getDir("sg", Context.MODE_PRIVATE);
48 | File dexDir = getDir(dexDirName, Context.MODE_PRIVATE);
49 | Log.e(TAG, "attachBaseContext: apkFile=" + apkFile.getAbsolutePath());
50 | Log.e(TAG, "attachBaseContext: appDir=" + appDir.getAbsolutePath());
51 | Log.e(TAG, "attachBaseContext: dexDir=" + dexDir.getAbsolutePath());
52 |
53 | //得到我们需要加载的Dex文件
54 | List dexFiles = new ArrayList<>();
55 | //进行解密(最好做MD5文件校验)
56 | if (!dexDir.exists() || dexDir.list().length == 0) {
57 | //把apk解压到appDir
58 | Zip.unZip(apkFile, appDir);
59 | //获取目录下所有的文件
60 | File[] files = appDir.listFiles();
61 | for (File file : files) {
62 | String name = file.getName();
63 | if (name.endsWith(".dex") && !TextUtils.equals(name, "classes.dex")) {
64 | try {
65 | //读取文件内容
66 | byte[] bytes = ProxyUtils.getBytes(file);
67 | //解密
68 | byte[] decrypt = EncryptUtil.decrypt(bytes, EncryptUtil.ivBytes);
69 | //写到指定的目录
70 | File file1 = new File(getDir(dexDirName, Context.MODE_PRIVATE).
71 | getAbsolutePath() + File.separator + name);
72 | if (file1.exists()) {
73 | file1.delete();
74 | }
75 | FileOutputStream fos = new FileOutputStream(file1);
76 | fos.write(decrypt);
77 | fos.flush();
78 | fos.close();
79 | dexFiles.add(file1);
80 | file.delete();
81 | } catch (Exception e) {
82 | e.printStackTrace();
83 | }
84 | }
85 | }
86 | } else {
87 | for (File file : dexDir.listFiles()) {
88 | dexFiles.add(file);
89 | }
90 | }
91 |
92 | try {
93 | //2.把解密后的文件加载到系统
94 | loadDex(dexFiles, appDir);
95 | } catch (Exception e) {
96 | e.printStackTrace();
97 | }
98 |
99 |
100 | }
101 |
102 | private void loadDex(List dexFiles, File versionDir) throws Exception {
103 | //1.获取pathlist
104 | Field pathListField = ProxyUtils.findField(getClassLoader(), "pathList");
105 | Object pathList = pathListField.get(getClassLoader());
106 | //2.获取数组dexElements
107 | Field dexElementsField = ProxyUtils.findField(pathList, "dexElements");
108 | Object[] dexElements = (Object[]) dexElementsField.get(pathList);
109 |
110 | //3.反射到初始化dexElements的方法
111 | Method makeDexElements = ProxyUtils.findMethod(pathList, "makePathElements", List.class, File.class, List.class);
112 |
113 | ArrayList suppressedExceptions = new ArrayList();
114 | Object[] addElements = (Object[]) makeDexElements.invoke(pathList, dexFiles, versionDir, suppressedExceptions);
115 | //合并数组
116 | Object[] newElements = (Object[]) Array.newInstance(dexElements.getClass().getComponentType(), dexElements.length + addElements.length);
117 | System.arraycopy(dexElements, 0, newElements, 0, dexElements.length);
118 | System.arraycopy(addElements, 0, newElements, dexElements.length, addElements.length);
119 |
120 | //替换classloader中的element数组
121 | dexElementsField.set(pathList, newElements);
122 | }
123 |
124 | private void getMetaData() {
125 | try {
126 | ApplicationInfo applicationInfo = getPackageManager().getApplicationInfo(
127 | getPackageName(), PackageManager.GET_META_DATA);
128 | Bundle metaData = applicationInfo.metaData;
129 | if (null != metaData) {
130 | if (metaData.containsKey("app_name")) {
131 | app_name = metaData.getString("app_name");
132 | }
133 | if (metaData.containsKey("app_version")) {
134 | app_version = metaData.getString("app_version");
135 | }
136 | }
137 | } catch (Exception e) {
138 | e.printStackTrace();
139 | }
140 | }
141 |
142 | /**
143 | * 开始替换application
144 | */
145 | @Override
146 | public void onCreate() {
147 | super.onCreate();
148 | try {
149 | bindRealApplicatin();
150 | } catch (Exception e) {
151 | e.printStackTrace();
152 | }
153 | }
154 |
155 |
156 | boolean isBindReal;
157 | Application delegate;
158 |
159 | private void bindRealApplicatin() throws Exception {
160 | if (isBindReal) {
161 | return;
162 | }
163 | if (TextUtils.isEmpty(app_name)) {
164 | return;
165 | }
166 | //得到attachBaseContext(context) 传入的上下文 ContextImpl
167 | Context baseContext = getBaseContext();
168 | //创建用户真实的application (MyApplication)
169 | Class> delegateClass = Class.forName(app_name);
170 | delegate = (Application) delegateClass.newInstance();
171 | //得到attach()方法
172 | Method attach = Application.class.getDeclaredMethod("attach", Context.class);
173 | attach.setAccessible(true);
174 | attach.invoke(delegate, baseContext);
175 |
176 |
177 | // ContextImpl---->mOuterContext(app) 通过Application的attachBaseContext回调参数获取
178 | Class> contextImplClass = Class.forName("android.app.ContextImpl");
179 | //获取mOuterContext属性
180 | Field mOuterContextField = contextImplClass.getDeclaredField("mOuterContext");
181 | mOuterContextField.setAccessible(true);
182 | mOuterContextField.set(baseContext, delegate);
183 |
184 | // ActivityThread--->mAllApplications(ArrayList) ContextImpl的mMainThread属性
185 | Field mMainThreadField = contextImplClass.getDeclaredField("mMainThread");
186 | mMainThreadField.setAccessible(true);
187 | Object mMainThread = mMainThreadField.get(baseContext);
188 |
189 | // ActivityThread--->>mInitialApplication
190 | Class> activityThreadClass = Class.forName("android.app.ActivityThread");
191 | Field mInitialApplicationField = activityThreadClass.getDeclaredField("mInitialApplication");
192 | mInitialApplicationField.setAccessible(true);
193 | mInitialApplicationField.set(mMainThread, delegate);
194 | // ActivityThread--->mAllApplications(ArrayList) ContextImpl的mMainThread属性
195 | Field mAllApplicationsField = activityThreadClass.getDeclaredField("mAllApplications");
196 | mAllApplicationsField.setAccessible(true);
197 | ArrayList mAllApplications = (ArrayList) mAllApplicationsField.get(mMainThread);
198 | mAllApplications.remove(this);
199 | mAllApplications.add(delegate);
200 |
201 | // LoadedApk------->mApplication ContextImpl的mPackageInfo属性
202 | Field mPackageInfoField = contextImplClass.getDeclaredField("mPackageInfo");
203 | mPackageInfoField.setAccessible(true);
204 | Object mPackageInfo = mPackageInfoField.get(baseContext);
205 |
206 | Class> loadedApkClass = Class.forName("android.app.LoadedApk");
207 | Field mApplicationField = loadedApkClass.getDeclaredField("mApplication");
208 | mApplicationField.setAccessible(true);
209 | mApplicationField.set(mPackageInfo, delegate);
210 |
211 | //修改ApplicationInfo className LooadedApk
212 | Field mApplicationInfoField = loadedApkClass.getDeclaredField("mApplicationInfo");
213 | mApplicationInfoField.setAccessible(true);
214 | ApplicationInfo mApplicationInfo = (ApplicationInfo) mApplicationInfoField.get(mPackageInfo);
215 | mApplicationInfo.className = app_name;
216 |
217 | delegate.onCreate();
218 | isBindReal = true;
219 | }
220 |
221 | /**
222 | * 让代码走入if中的第三段中
223 | *
224 | * @return
225 | */
226 | @Override
227 | public String getPackageName() {
228 | if (!TextUtils.isEmpty(app_name)) {
229 | return "";
230 | }
231 | return super.getPackageName();
232 | }
233 |
234 | @Override
235 | public Context createPackageContext(String packageName, int flags) throws PackageManager.NameNotFoundException {
236 | if (TextUtils.isEmpty(app_name)) {
237 | return super.createPackageContext(packageName, flags);
238 | }
239 | try {
240 | bindRealApplicatin();
241 | } catch (Exception e) {
242 | e.printStackTrace();
243 | }
244 | return delegate;
245 |
246 | }
247 | }
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## 简介
2 |
3 | 现在随意在应用市场下载一个 APK 文件然后反编译,95% 以上基本上都是经过混淆,加密,或第三方加固(第三方加固也是这个原理),那么今天我们就对 Dex 来进行加密解密。让反编译无法正常阅读项目源码。
4 |
5 | **加密后的结构**
6 |
7 | **APK 分析**
8 |
9 | 
10 |
11 | **反编译效果**
12 |
13 | 
14 |
15 | ## 想要对 Dex 加密 ,先来了解什么是 64 K 问题
16 |
17 | 想要详细了解 64 k 的问题可以参考[官网]()
18 |
19 | 随着 Android 平台的持续成长,Android 应用的大小也在增加。当您的应用及其引用的库达到特定大小时,您会遇到构建错误,指明您的应用已达到 Android 应用构建架构的极限。早期版本的构建系统按如下方式报告这一错误:
20 |
21 | ```java
22 | Conversion to Dalvik format failed:
23 | Unable to execute dex: method ID not in [0, 0xffff]: 65536
24 | ```
25 |
26 | 较新版本的 Android 构建系统虽然显示的错误不同,但指示的是同一问题:
27 |
28 | ```java
29 | trouble writing output:
30 | Too many field references: 131000; max is 65536.
31 | You may try using --multi-dex option.
32 | ```
33 |
34 | 这些错误状况都会显示下面这个数字:65,536。这个数字很重要,因为它代表的是单个 Dalvik Executable (DEX) 字节码文件内的代码可调用的引用总数。本节介绍如何通过启用被称为 *Dalvik 可执行文件分包*的应用配置来越过这一限制,使您的应用能够构建并读取 Dalvik 可执行文件分包 DEX 文件。
35 |
36 | ### 关于 64K 引用限制
37 |
38 | #### Android 5.0 之前版本的 Dalvik 可执行文件分包支持
39 |
40 | Android 5.0(API 级别 21)之前的平台版本使用 Dalvik 运行时来执行应用代码。默认情况下,Dalvik 限制应用的每个 APK 只能使用单个 `classes.dex` 字节码文件。要想绕过这一限制,您可以使用 [Dalvik 可执行文件分包支持库](https://developer.android.com/tools/support-library/features.html?hl=zh-cn#multidex),它会成为您的应用主要 DEX 文件的一部分,然后管理对其他 DEX 文件及其所包含代码的访问。
41 |
42 | #### Android 5.0 及更高版本的 Dalvik 可执行文件分包支持
43 |
44 | Android 5.0(API 级别 21)及更高版本使用名为 ART 的运行时,后者原生支持从 APK 文件加载多个 DEX 文件。ART 在应用安装时执行预编译,扫描 `classesN.dex` 文件,并将它们编译成单个 `.oat` 文件,供 Android 设备执行。因此,如果您的 `minSdkVersion` 为 21 或更高值,则不需要 Dalvik 可执行文件分包支持库。
45 |
46 | ### 解决 64K 限制
47 |
48 | 1. 如果您的 `minSdkVersion` 设置为 21 或更高值,您只需在模块级 `build.gradle` 文件中将 `multiDexEnabled` 设置为 `true`,如此处所示:
49 |
50 | ```java
51 | android {
52 | defaultConfig {
53 | ...
54 | minSdkVersion 21
55 | targetSdkVersion 28
56 | multiDexEnabled true
57 | }
58 | ...
59 | }
60 | ```
61 |
62 | 但是,如果您的 `minSdkVersion` 设置为 20 或更低值,则您必须按如下方式使用 [Dalvik 可执行文件分包支持库](https://developer.android.com/tools/support-library/features.html?hl=zh-cn#multidex):
63 |
64 | - 修改模块级 `build.gradle` 文件以启用 Dalvik 可执行文件分包,并将 Dalvik 可执行文件分包库添加为依赖项,如此处所示
65 |
66 | ```java
67 | android {
68 | defaultConfig {
69 | ...
70 | minSdkVersion 15
71 | targetSdkVersion 28
72 | multiDexEnabled true
73 | }
74 | ...
75 | }
76 |
77 | dependencies {
78 | compile 'com.android.support:multidex:1.0.3'
79 | }
80 | ```
81 |
82 | - 当前 Application extends MultiDexApplication {...} 或者 MultiDex.install(this);
83 |
84 | 2. 通过混淆 开启 ProGuard 移除未使用的代码,构建代码压缩。
85 |
86 | 3. 减少第三方库的直接依赖,尽可能下载源码,需要什么就用什么没必要依赖整个项目。
87 |
88 | ## Dex 加密与解密
89 |
90 | 
91 |
92 | **流程:**
93 |
94 | 1. 拿到 APK 解压得到所有的 dex 文件。
95 | 2. 通过 Tools 来进行加密,并把加密后的 dex 和代理应用 class.dex 合并,然后重新签名,对齐,打包。
96 | 3. 当用户安装 APK 打开进入代理解密的 Application 时,反射得到 dexElements 并将解密后的 dex 替换 DexPathList 中的 dexElements .
97 |
98 | ### Dex 文件加载过程
99 |
100 | 既然要查 Dex 加载过程,那么得先知道从哪个源码 class 入手,既然不知道那么我们就先打印下 ClassLoader ;
101 |
102 | 
103 |
104 | 下面就以一个流程图来详细了解下 Dex 加载过程吧
105 |
106 | 
107 |
108 | 最后我们得知在 **findClass(String name,List sup)** 遍历 **dexElements** 找到 Class 并交给 Android 加载。
109 |
110 | ### Dex 解密
111 |
112 | 现在我们知道 dex 加载流程了 , 那么我们怎么进行来对 dex 解密勒,刚刚我们得知需要遍历 dexElements 来找到 Class 那么我们是不是可以在遍历之前 ,初始化 dexElements 的时候。反射得到 dexElements 将我们解密后的 dex 交给 dexElements 。下面我们就通过代码来进行解密 dex 并替换 DexPathList 中的 dexElements;
113 |
114 | 1. 得到当前加密了的 APK 文件 并解压
115 |
116 | ```java
117 | //得到当前加密了的APK文件
118 | File apkFile=new File(getApplicationInfo().sourceDir);
119 | //把apk解压 app_name+"_"+app_version目录中的内容需要boot权限才能用
120 | File versionDir = getDir(app_name+"_"+app_version,MODE_PRIVATE);
121 | File appDir=new File(versionDir,"app");
122 | File dexDir=new File(appDir,"dexDir");
123 | ```
124 |
125 | 2. 得到我们需要加载的 Dex 文件
126 |
127 | ```java
128 | //把apk解压到appDir
129 | Zip.unZip(apkFile,appDir);
130 | //获取目录下所有的文件
131 | File[] files=appDir.listFiles();
132 | for (File file : files) {
133 | String name=file.getName();
134 | if(name.endsWith(".dex") && !TextUtils.equals(name,"classes.dex")){
135 | try{
136 | AES.init(AES.DEFAULT_PWD);
137 | //读取文件内容
138 | byte[] bytes=Utils.getBytes(file);
139 | //解密
140 | byte[] decrypt=AES.decrypt(bytes);
141 | //写到指定的目录
142 | FileOutputStream fos=new FileOutputStream(file);
143 | fos.write(decrypt);
144 | fos.flush();
145 | fos.close();
146 | dexFiles.add(file);
147 |
148 | }catch (Exception e){
149 | e.printStackTrace();
150 | }
151 | }
152 | }
153 | ```
154 |
155 | 3. 把解密后的 dex 加载到系统
156 |
157 | ```java
158 | private void loadDex(List dexFiles, File versionDir) throws Exception{
159 | //1.获取pathlist
160 | Field pathListField = Utils.findField(getClassLoader(), "pathList");
161 | Object pathList = pathListField.get(getClassLoader());
162 | //2.获取数组dexElements
163 | Field dexElementsField=Utils.findField(pathList,"dexElements");
164 | Object[] dexElements=(Object[])dexElementsField.get(pathList);
165 | //3.反射到初始化dexElements的方法
166 | Method makeDexElements=Utils.findMethod(pathList,"makePathElements",List.class,File.class,List.class);
167 |
168 | ArrayList suppressedExceptions = new ArrayList();
169 | Object[] addElements=(Object[])makeDexElements.invoke(pathList,dexFiles,versionDir,suppressedExceptions);
170 |
171 | //合并数组
172 | Object[] newElements= (Object[])Array.newInstance(dexElements.getClass().getComponentType(),dexElements.length+addElements.length);
173 | System.arraycopy(dexElements,0,newElements,0,dexElements.length);
174 | System.arraycopy(addElements,0,newElements,dexElements.length,addElements.length);
175 |
176 | //替换 DexPathList 中的 element 数组
177 | dexElementsField.set(pathList,newElements);
178 | }
179 | ```
180 |
181 | 解密已经完成了,下面来看看加密吧,这里为什么先说解密勒,因为 加密涉及到 签名,打包,对齐。所以留到最后讲。
182 |
183 | ### Dex 加密
184 |
185 | 1. 制作只包含解密代码的 dex
186 |
187 | ```java
188 | 1. sdk\build-tools 中执行下面命令 会得到包含 dex 的 jar
189 | dx --dex --output out.dex in.jar
190 | 2. 通过 exec 执行
191 | File aarFile=new File("proxy_core/build/outputs/aar/proxy_core-debug.aar");
192 | File aarTemp=new File("proxy_tools/temp");
193 | Zip.unZip(aarFile,aarTemp);
194 | File classesJar=new File(aarTemp,"classes.jar");
195 | File classesDex=new File(aarTemp,"classes.dex");
196 | String absolutePath = classesDex.getAbsolutePath();
197 | String absolutePath1 = classesJar.getAbsolutePath();
198 | //dx --dex --output out.dex in.jar
199 | //dx --dex --output //D:\Downloads\android_space\DexDEApplication\proxy_tools\temp\classes.dex //D:\Downloads\android_space\DexDEApplication\proxy_tools\temp\classes.jar
200 | Process process=Runtime.getRuntime().exec("cmd /c dx --dex --output "+classesDex.getAbsolutePath()
201 | +" "+classesJar.getAbsolutePath());
202 | process.waitFor();
203 | if(process.exitValue()!=0){
204 | throw new RuntimeException("dex error");
205 | }
206 | ```
207 |
208 | 2. 加密 apk 中的 dex 文件
209 |
210 | ```java
211 | File apkFile=new File("app/build/outputs/apk/debug/app-debug.apk");
212 | File apkTemp=new File("app/build/outputs/apk/debug/temp");
213 | Zip.unZip(apkFile,apkTemp);
214 | //只要dex文件拿出来加密
215 | File[] dexFiles=apkTemp.listFiles(new FilenameFilter() {
216 | @Override
217 | public boolean accept(File file, String s) {
218 | return s.endsWith(".dex");
219 | }
220 | });
221 | //AES加密了
222 | AES.init(AES.DEFAULT_PWD);
223 | for (File dexFile : dexFiles) {
224 | byte[] bytes = Utils.getBytes(dexFile);
225 | byte[] encrypt = AES.encrypt(bytes);
226 | FileOutputStream fos=new FileOutputStream(new File(apkTemp,
227 | "secret-"+dexFile.getName()));
228 | fos.write(encrypt);
229 | fos.flush();
230 | fos.close();
231 | dexFile.delete();
232 | }
233 | ```
234 |
235 | 3. 把 dex 放入 apk 加压目录,重新压成 apk 文件
236 |
237 | ```java
238 | File apkTemp=new File("app/build/outputs/apk/debug/temp");
239 | File aarTemp=new File("proxy_tools/temp");
240 | File classesDex=new File(aarTemp,"classes.dex");
241 | classesDex.renameTo(new File(apkTemp,"classes.dex"));
242 | File unSignedApk=new File("app/build/outputs/apk/debug/app-unsigned.apk");
243 | Zip.zip(apkTemp,unSignedApk);
244 | ```
245 |
246 | **现在可以看下加密后的文件,和未加密的文件**
247 |
248 | 未加密 apk:
249 |
250 | 
251 |
252 | 加密后的 apk (现在只能看见代理 Application )
253 |
254 | 
255 |
256 | ### 打包
257 |
258 | #### [对齐](https://developer.android.google.cn/studio/command-line/zipalign.html)
259 |
260 | ```java
261 | //apk整理对齐工具 未压缩的数据开头均相对于文件开头部分执行特定的字节对齐,减少应用运行内存。
262 | zipalign -f 4 in.apk out.apk
263 |
264 | //比对 apk 是否对齐
265 | zipalign -c -v 4 output.apk
266 |
267 | //最后提示 Verification succesful 说明对齐成功了
268 | 236829 res/mipmap-xxxhdpi-v4/ic_launcher.png (OK - compressed)
269 | 245810 res/mipmap-xxxhdpi-v4/ic_launcher_round.png (OK - compressed)
270 | 260956 resources.arsc (OK - compressed)
271 | 317875 secret-classes.dex (OK - compressed)
272 | 2306140 secret-classes2.dex (OK - compressed)
273 | 2477544 secret-classes3.dex (OK - compressed)
274 | Verification succesful
275 | ```
276 |
277 | #### 签名打包 apksigner
278 |
279 | ```java
280 | //sdk\build-tools\24.0.3 以上,apk签名工具
281 | apksigner sign --ks jks文件地址 --ks-key-alias 别名 --ks-pass pass:jsk密码 --key-pass pass:别名密码 --out out.apk in.apk
282 | ```
283 |
284 | ## 总结
285 |
286 | 其实原理就是把主要代码通过命令 *dx* 生成 dex 文件,然后把加密后的 dex 合并在代理 class.dex 中。这样虽然还是能看见代理中的代码,但是主要代码已经没有暴露出来了,就已经实现了我们想要的效果。如果封装的好的话(JNI 中实现主要解密代码),基本上就哈也看不见了。ClassLoader 还是很重要的,热修复跟热加载都是这原理。学到这里 DEX 加解密已经学习完了,如果想看自己试一试可以参考我的代码
287 |
288 |
289 |
290 |
291 |
292 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "[]"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright [yyyy] [name of copyright owner]
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/proxy_tools/temp/R.txt:
--------------------------------------------------------------------------------
1 | int anim abc_fade_in 0x7f010001
2 | int anim abc_fade_out 0x7f010002
3 | int anim abc_grow_fade_in_from_bottom 0x7f010003
4 | int anim abc_popup_enter 0x7f010004
5 | int anim abc_popup_exit 0x7f010005
6 | int anim abc_shrink_fade_out_from_bottom 0x7f010006
7 | int anim abc_slide_in_bottom 0x7f010007
8 | int anim abc_slide_in_top 0x7f010008
9 | int anim abc_slide_out_bottom 0x7f010009
10 | int anim abc_slide_out_top 0x7f01000a
11 | int anim abc_tooltip_enter 0x7f01000b
12 | int anim abc_tooltip_exit 0x7f01000c
13 | int attr actionBarDivider 0x7f040001
14 | int attr actionBarItemBackground 0x7f040002
15 | int attr actionBarPopupTheme 0x7f040003
16 | int attr actionBarSize 0x7f040004
17 | int attr actionBarSplitStyle 0x7f040005
18 | int attr actionBarStyle 0x7f040006
19 | int attr actionBarTabBarStyle 0x7f040007
20 | int attr actionBarTabStyle 0x7f040008
21 | int attr actionBarTabTextStyle 0x7f040009
22 | int attr actionBarTheme 0x7f04000a
23 | int attr actionBarWidgetTheme 0x7f04000b
24 | int attr actionButtonStyle 0x7f04000c
25 | int attr actionDropDownStyle 0x7f04000d
26 | int attr actionLayout 0x7f04000e
27 | int attr actionMenuTextAppearance 0x7f04000f
28 | int attr actionMenuTextColor 0x7f040010
29 | int attr actionModeBackground 0x7f040011
30 | int attr actionModeCloseButtonStyle 0x7f040012
31 | int attr actionModeCloseDrawable 0x7f040013
32 | int attr actionModeCopyDrawable 0x7f040014
33 | int attr actionModeCutDrawable 0x7f040015
34 | int attr actionModeFindDrawable 0x7f040016
35 | int attr actionModePasteDrawable 0x7f040017
36 | int attr actionModePopupWindowStyle 0x7f040018
37 | int attr actionModeSelectAllDrawable 0x7f040019
38 | int attr actionModeShareDrawable 0x7f04001a
39 | int attr actionModeSplitBackground 0x7f04001b
40 | int attr actionModeStyle 0x7f04001c
41 | int attr actionModeWebSearchDrawable 0x7f04001d
42 | int attr actionOverflowButtonStyle 0x7f04001e
43 | int attr actionOverflowMenuStyle 0x7f04001f
44 | int attr actionProviderClass 0x7f040020
45 | int attr actionViewClass 0x7f040021
46 | int attr activityChooserViewStyle 0x7f040022
47 | int attr alertDialogButtonGroupStyle 0x7f040023
48 | int attr alertDialogCenterButtons 0x7f040024
49 | int attr alertDialogStyle 0x7f040025
50 | int attr alertDialogTheme 0x7f040026
51 | int attr allowStacking 0x7f040027
52 | int attr alpha 0x7f040028
53 | int attr alphabeticModifiers 0x7f040029
54 | int attr arrowHeadLength 0x7f04002a
55 | int attr arrowShaftLength 0x7f04002b
56 | int attr autoCompleteTextViewStyle 0x7f04002c
57 | int attr autoSizeMaxTextSize 0x7f04002d
58 | int attr autoSizeMinTextSize 0x7f04002e
59 | int attr autoSizePresetSizes 0x7f04002f
60 | int attr autoSizeStepGranularity 0x7f040030
61 | int attr autoSizeTextType 0x7f040031
62 | int attr background 0x7f040032
63 | int attr backgroundSplit 0x7f040033
64 | int attr backgroundStacked 0x7f040034
65 | int attr backgroundTint 0x7f040035
66 | int attr backgroundTintMode 0x7f040036
67 | int attr barLength 0x7f040037
68 | int attr borderlessButtonStyle 0x7f040038
69 | int attr buttonBarButtonStyle 0x7f040039
70 | int attr buttonBarNegativeButtonStyle 0x7f04003a
71 | int attr buttonBarNeutralButtonStyle 0x7f04003b
72 | int attr buttonBarPositiveButtonStyle 0x7f04003c
73 | int attr buttonBarStyle 0x7f04003d
74 | int attr buttonGravity 0x7f04003e
75 | int attr buttonIconDimen 0x7f04003f
76 | int attr buttonPanelSideLayout 0x7f040040
77 | int attr buttonStyle 0x7f040041
78 | int attr buttonStyleSmall 0x7f040042
79 | int attr buttonTint 0x7f040043
80 | int attr buttonTintMode 0x7f040044
81 | int attr checkboxStyle 0x7f040045
82 | int attr checkedTextViewStyle 0x7f040046
83 | int attr closeIcon 0x7f040047
84 | int attr closeItemLayout 0x7f040048
85 | int attr collapseContentDescription 0x7f040049
86 | int attr collapseIcon 0x7f04004a
87 | int attr color 0x7f04004b
88 | int attr colorAccent 0x7f04004c
89 | int attr colorBackgroundFloating 0x7f04004d
90 | int attr colorButtonNormal 0x7f04004e
91 | int attr colorControlActivated 0x7f04004f
92 | int attr colorControlHighlight 0x7f040050
93 | int attr colorControlNormal 0x7f040051
94 | int attr colorError 0x7f040052
95 | int attr colorPrimary 0x7f040053
96 | int attr colorPrimaryDark 0x7f040054
97 | int attr colorSwitchThumbNormal 0x7f040055
98 | int attr commitIcon 0x7f040056
99 | int attr contentDescription 0x7f040057
100 | int attr contentInsetEnd 0x7f040058
101 | int attr contentInsetEndWithActions 0x7f040059
102 | int attr contentInsetLeft 0x7f04005a
103 | int attr contentInsetRight 0x7f04005b
104 | int attr contentInsetStart 0x7f04005c
105 | int attr contentInsetStartWithNavigation 0x7f04005d
106 | int attr controlBackground 0x7f04005e
107 | int attr coordinatorLayoutStyle 0x7f04005f
108 | int attr customNavigationLayout 0x7f040060
109 | int attr defaultQueryHint 0x7f040061
110 | int attr dialogCornerRadius 0x7f040062
111 | int attr dialogPreferredPadding 0x7f040063
112 | int attr dialogTheme 0x7f040064
113 | int attr displayOptions 0x7f040065
114 | int attr divider 0x7f040066
115 | int attr dividerHorizontal 0x7f040067
116 | int attr dividerPadding 0x7f040068
117 | int attr dividerVertical 0x7f040069
118 | int attr drawableSize 0x7f04006a
119 | int attr drawerArrowStyle 0x7f04006b
120 | int attr dropDownListViewStyle 0x7f04006c
121 | int attr dropdownListPreferredItemHeight 0x7f04006d
122 | int attr editTextBackground 0x7f04006e
123 | int attr editTextColor 0x7f04006f
124 | int attr editTextStyle 0x7f040070
125 | int attr elevation 0x7f040071
126 | int attr expandActivityOverflowButtonDrawable 0x7f040072
127 | int attr firstBaselineToTopHeight 0x7f040073
128 | int attr font 0x7f040074
129 | int attr fontFamily 0x7f040075
130 | int attr fontProviderAuthority 0x7f040076
131 | int attr fontProviderCerts 0x7f040077
132 | int attr fontProviderFetchStrategy 0x7f040078
133 | int attr fontProviderFetchTimeout 0x7f040079
134 | int attr fontProviderPackage 0x7f04007a
135 | int attr fontProviderQuery 0x7f04007b
136 | int attr fontStyle 0x7f04007c
137 | int attr fontVariationSettings 0x7f04007d
138 | int attr fontWeight 0x7f04007e
139 | int attr gapBetweenBars 0x7f04007f
140 | int attr goIcon 0x7f040080
141 | int attr height 0x7f040081
142 | int attr hideOnContentScroll 0x7f040082
143 | int attr homeAsUpIndicator 0x7f040083
144 | int attr homeLayout 0x7f040084
145 | int attr icon 0x7f040085
146 | int attr iconTint 0x7f040086
147 | int attr iconTintMode 0x7f040087
148 | int attr iconifiedByDefault 0x7f040088
149 | int attr imageButtonStyle 0x7f040089
150 | int attr indeterminateProgressStyle 0x7f04008a
151 | int attr initialActivityCount 0x7f04008b
152 | int attr isLightTheme 0x7f04008c
153 | int attr itemPadding 0x7f04008d
154 | int attr keylines 0x7f04008e
155 | int attr lastBaselineToBottomHeight 0x7f04008f
156 | int attr layout 0x7f040090
157 | int attr layout_anchor 0x7f040091
158 | int attr layout_anchorGravity 0x7f040092
159 | int attr layout_behavior 0x7f040093
160 | int attr layout_dodgeInsetEdges 0x7f040094
161 | int attr layout_insetEdge 0x7f040095
162 | int attr layout_keyline 0x7f040096
163 | int attr lineHeight 0x7f040097
164 | int attr listChoiceBackgroundIndicator 0x7f040098
165 | int attr listDividerAlertDialog 0x7f040099
166 | int attr listItemLayout 0x7f04009a
167 | int attr listLayout 0x7f04009b
168 | int attr listMenuViewStyle 0x7f04009c
169 | int attr listPopupWindowStyle 0x7f04009d
170 | int attr listPreferredItemHeight 0x7f04009e
171 | int attr listPreferredItemHeightLarge 0x7f04009f
172 | int attr listPreferredItemHeightSmall 0x7f0400a0
173 | int attr listPreferredItemPaddingLeft 0x7f0400a1
174 | int attr listPreferredItemPaddingRight 0x7f0400a2
175 | int attr logo 0x7f0400a3
176 | int attr logoDescription 0x7f0400a4
177 | int attr maxButtonHeight 0x7f0400a5
178 | int attr measureWithLargestChild 0x7f0400a6
179 | int attr multiChoiceItemLayout 0x7f0400a7
180 | int attr navigationContentDescription 0x7f0400a8
181 | int attr navigationIcon 0x7f0400a9
182 | int attr navigationMode 0x7f0400aa
183 | int attr numericModifiers 0x7f0400ab
184 | int attr overlapAnchor 0x7f0400ac
185 | int attr paddingBottomNoButtons 0x7f0400ad
186 | int attr paddingEnd 0x7f0400ae
187 | int attr paddingStart 0x7f0400af
188 | int attr paddingTopNoTitle 0x7f0400b0
189 | int attr panelBackground 0x7f0400b1
190 | int attr panelMenuListTheme 0x7f0400b2
191 | int attr panelMenuListWidth 0x7f0400b3
192 | int attr popupMenuStyle 0x7f0400b4
193 | int attr popupTheme 0x7f0400b5
194 | int attr popupWindowStyle 0x7f0400b6
195 | int attr preserveIconSpacing 0x7f0400b7
196 | int attr progressBarPadding 0x7f0400b8
197 | int attr progressBarStyle 0x7f0400b9
198 | int attr queryBackground 0x7f0400ba
199 | int attr queryHint 0x7f0400bb
200 | int attr radioButtonStyle 0x7f0400bc
201 | int attr ratingBarStyle 0x7f0400bd
202 | int attr ratingBarStyleIndicator 0x7f0400be
203 | int attr ratingBarStyleSmall 0x7f0400bf
204 | int attr searchHintIcon 0x7f0400c0
205 | int attr searchIcon 0x7f0400c1
206 | int attr searchViewStyle 0x7f0400c2
207 | int attr seekBarStyle 0x7f0400c3
208 | int attr selectableItemBackground 0x7f0400c4
209 | int attr selectableItemBackgroundBorderless 0x7f0400c5
210 | int attr showAsAction 0x7f0400c6
211 | int attr showDividers 0x7f0400c7
212 | int attr showText 0x7f0400c8
213 | int attr showTitle 0x7f0400c9
214 | int attr singleChoiceItemLayout 0x7f0400ca
215 | int attr spinBars 0x7f0400cb
216 | int attr spinnerDropDownItemStyle 0x7f0400cc
217 | int attr spinnerStyle 0x7f0400cd
218 | int attr splitTrack 0x7f0400ce
219 | int attr srcCompat 0x7f0400cf
220 | int attr state_above_anchor 0x7f0400d0
221 | int attr statusBarBackground 0x7f0400d1
222 | int attr subMenuArrow 0x7f0400d2
223 | int attr submitBackground 0x7f0400d3
224 | int attr subtitle 0x7f0400d4
225 | int attr subtitleTextAppearance 0x7f0400d5
226 | int attr subtitleTextColor 0x7f0400d6
227 | int attr subtitleTextStyle 0x7f0400d7
228 | int attr suggestionRowLayout 0x7f0400d8
229 | int attr switchMinWidth 0x7f0400d9
230 | int attr switchPadding 0x7f0400da
231 | int attr switchStyle 0x7f0400db
232 | int attr switchTextAppearance 0x7f0400dc
233 | int attr textAllCaps 0x7f0400dd
234 | int attr textAppearanceLargePopupMenu 0x7f0400de
235 | int attr textAppearanceListItem 0x7f0400df
236 | int attr textAppearanceListItemSecondary 0x7f0400e0
237 | int attr textAppearanceListItemSmall 0x7f0400e1
238 | int attr textAppearancePopupMenuHeader 0x7f0400e2
239 | int attr textAppearanceSearchResultSubtitle 0x7f0400e3
240 | int attr textAppearanceSearchResultTitle 0x7f0400e4
241 | int attr textAppearanceSmallPopupMenu 0x7f0400e5
242 | int attr textColorAlertDialogListItem 0x7f0400e6
243 | int attr textColorSearchUrl 0x7f0400e7
244 | int attr theme 0x7f0400e8
245 | int attr thickness 0x7f0400e9
246 | int attr thumbTextPadding 0x7f0400ea
247 | int attr thumbTint 0x7f0400eb
248 | int attr thumbTintMode 0x7f0400ec
249 | int attr tickMark 0x7f0400ed
250 | int attr tickMarkTint 0x7f0400ee
251 | int attr tickMarkTintMode 0x7f0400ef
252 | int attr tint 0x7f0400f0
253 | int attr tintMode 0x7f0400f1
254 | int attr title 0x7f0400f2
255 | int attr titleMargin 0x7f0400f3
256 | int attr titleMarginBottom 0x7f0400f4
257 | int attr titleMarginEnd 0x7f0400f5
258 | int attr titleMarginStart 0x7f0400f6
259 | int attr titleMarginTop 0x7f0400f7
260 | int attr titleMargins 0x7f0400f8
261 | int attr titleTextAppearance 0x7f0400f9
262 | int attr titleTextColor 0x7f0400fa
263 | int attr titleTextStyle 0x7f0400fb
264 | int attr toolbarNavigationButtonStyle 0x7f0400fc
265 | int attr toolbarStyle 0x7f0400fd
266 | int attr tooltipForegroundColor 0x7f0400fe
267 | int attr tooltipFrameBackground 0x7f0400ff
268 | int attr tooltipText 0x7f040100
269 | int attr track 0x7f040101
270 | int attr trackTint 0x7f040102
271 | int attr trackTintMode 0x7f040103
272 | int attr ttcIndex 0x7f040104
273 | int attr viewInflaterClass 0x7f040105
274 | int attr voiceIcon 0x7f040106
275 | int attr windowActionBar 0x7f040107
276 | int attr windowActionBarOverlay 0x7f040108
277 | int attr windowActionModeOverlay 0x7f040109
278 | int attr windowFixedHeightMajor 0x7f04010a
279 | int attr windowFixedHeightMinor 0x7f04010b
280 | int attr windowFixedWidthMajor 0x7f04010c
281 | int attr windowFixedWidthMinor 0x7f04010d
282 | int attr windowMinWidthMajor 0x7f04010e
283 | int attr windowMinWidthMinor 0x7f04010f
284 | int attr windowNoTitle 0x7f040110
285 | int bool abc_action_bar_embed_tabs 0x7f050001
286 | int bool abc_allow_stacked_button_bar 0x7f050002
287 | int bool abc_config_actionMenuItemAllCaps 0x7f050003
288 | int color abc_background_cache_hint_selector_material_dark 0x7f060001
289 | int color abc_background_cache_hint_selector_material_light 0x7f060002
290 | int color abc_btn_colored_borderless_text_material 0x7f060003
291 | int color abc_btn_colored_text_material 0x7f060004
292 | int color abc_color_highlight_material 0x7f060005
293 | int color abc_hint_foreground_material_dark 0x7f060006
294 | int color abc_hint_foreground_material_light 0x7f060007
295 | int color abc_input_method_navigation_guard 0x7f060008
296 | int color abc_primary_text_disable_only_material_dark 0x7f060009
297 | int color abc_primary_text_disable_only_material_light 0x7f06000a
298 | int color abc_primary_text_material_dark 0x7f06000b
299 | int color abc_primary_text_material_light 0x7f06000c
300 | int color abc_search_url_text 0x7f06000d
301 | int color abc_search_url_text_normal 0x7f06000e
302 | int color abc_search_url_text_pressed 0x7f06000f
303 | int color abc_search_url_text_selected 0x7f060010
304 | int color abc_secondary_text_material_dark 0x7f060011
305 | int color abc_secondary_text_material_light 0x7f060012
306 | int color abc_tint_btn_checkable 0x7f060013
307 | int color abc_tint_default 0x7f060014
308 | int color abc_tint_edittext 0x7f060015
309 | int color abc_tint_seek_thumb 0x7f060016
310 | int color abc_tint_spinner 0x7f060017
311 | int color abc_tint_switch_track 0x7f060018
312 | int color accent_material_dark 0x7f060019
313 | int color accent_material_light 0x7f06001a
314 | int color background_floating_material_dark 0x7f06001b
315 | int color background_floating_material_light 0x7f06001c
316 | int color background_material_dark 0x7f06001d
317 | int color background_material_light 0x7f06001e
318 | int color bright_foreground_disabled_material_dark 0x7f06001f
319 | int color bright_foreground_disabled_material_light 0x7f060020
320 | int color bright_foreground_inverse_material_dark 0x7f060021
321 | int color bright_foreground_inverse_material_light 0x7f060022
322 | int color bright_foreground_material_dark 0x7f060023
323 | int color bright_foreground_material_light 0x7f060024
324 | int color button_material_dark 0x7f060025
325 | int color button_material_light 0x7f060026
326 | int color dim_foreground_disabled_material_dark 0x7f060027
327 | int color dim_foreground_disabled_material_light 0x7f060028
328 | int color dim_foreground_material_dark 0x7f060029
329 | int color dim_foreground_material_light 0x7f06002a
330 | int color error_color_material_dark 0x7f06002b
331 | int color error_color_material_light 0x7f06002c
332 | int color foreground_material_dark 0x7f06002d
333 | int color foreground_material_light 0x7f06002e
334 | int color highlighted_text_material_dark 0x7f06002f
335 | int color highlighted_text_material_light 0x7f060030
336 | int color material_blue_grey_800 0x7f060031
337 | int color material_blue_grey_900 0x7f060032
338 | int color material_blue_grey_950 0x7f060033
339 | int color material_deep_teal_200 0x7f060034
340 | int color material_deep_teal_500 0x7f060035
341 | int color material_grey_100 0x7f060036
342 | int color material_grey_300 0x7f060037
343 | int color material_grey_50 0x7f060038
344 | int color material_grey_600 0x7f060039
345 | int color material_grey_800 0x7f06003a
346 | int color material_grey_850 0x7f06003b
347 | int color material_grey_900 0x7f06003c
348 | int color notification_action_color_filter 0x7f06003d
349 | int color notification_icon_bg_color 0x7f06003e
350 | int color primary_dark_material_dark 0x7f06003f
351 | int color primary_dark_material_light 0x7f060040
352 | int color primary_material_dark 0x7f060041
353 | int color primary_material_light 0x7f060042
354 | int color primary_text_default_material_dark 0x7f060043
355 | int color primary_text_default_material_light 0x7f060044
356 | int color primary_text_disabled_material_dark 0x7f060045
357 | int color primary_text_disabled_material_light 0x7f060046
358 | int color ripple_material_dark 0x7f060047
359 | int color ripple_material_light 0x7f060048
360 | int color secondary_text_default_material_dark 0x7f060049
361 | int color secondary_text_default_material_light 0x7f06004a
362 | int color secondary_text_disabled_material_dark 0x7f06004b
363 | int color secondary_text_disabled_material_light 0x7f06004c
364 | int color switch_thumb_disabled_material_dark 0x7f06004d
365 | int color switch_thumb_disabled_material_light 0x7f06004e
366 | int color switch_thumb_material_dark 0x7f06004f
367 | int color switch_thumb_material_light 0x7f060050
368 | int color switch_thumb_normal_material_dark 0x7f060051
369 | int color switch_thumb_normal_material_light 0x7f060052
370 | int color tooltip_background_dark 0x7f060053
371 | int color tooltip_background_light 0x7f060054
372 | int dimen abc_action_bar_content_inset_material 0x7f070001
373 | int dimen abc_action_bar_content_inset_with_nav 0x7f070002
374 | int dimen abc_action_bar_default_height_material 0x7f070003
375 | int dimen abc_action_bar_default_padding_end_material 0x7f070004
376 | int dimen abc_action_bar_default_padding_start_material 0x7f070005
377 | int dimen abc_action_bar_elevation_material 0x7f070006
378 | int dimen abc_action_bar_icon_vertical_padding_material 0x7f070007
379 | int dimen abc_action_bar_overflow_padding_end_material 0x7f070008
380 | int dimen abc_action_bar_overflow_padding_start_material 0x7f070009
381 | int dimen abc_action_bar_stacked_max_height 0x7f07000a
382 | int dimen abc_action_bar_stacked_tab_max_width 0x7f07000b
383 | int dimen abc_action_bar_subtitle_bottom_margin_material 0x7f07000c
384 | int dimen abc_action_bar_subtitle_top_margin_material 0x7f07000d
385 | int dimen abc_action_button_min_height_material 0x7f07000e
386 | int dimen abc_action_button_min_width_material 0x7f07000f
387 | int dimen abc_action_button_min_width_overflow_material 0x7f070010
388 | int dimen abc_alert_dialog_button_bar_height 0x7f070011
389 | int dimen abc_alert_dialog_button_dimen 0x7f070012
390 | int dimen abc_button_inset_horizontal_material 0x7f070013
391 | int dimen abc_button_inset_vertical_material 0x7f070014
392 | int dimen abc_button_padding_horizontal_material 0x7f070015
393 | int dimen abc_button_padding_vertical_material 0x7f070016
394 | int dimen abc_cascading_menus_min_smallest_width 0x7f070017
395 | int dimen abc_config_prefDialogWidth 0x7f070018
396 | int dimen abc_control_corner_material 0x7f070019
397 | int dimen abc_control_inset_material 0x7f07001a
398 | int dimen abc_control_padding_material 0x7f07001b
399 | int dimen abc_dialog_corner_radius_material 0x7f07001c
400 | int dimen abc_dialog_fixed_height_major 0x7f07001d
401 | int dimen abc_dialog_fixed_height_minor 0x7f07001e
402 | int dimen abc_dialog_fixed_width_major 0x7f07001f
403 | int dimen abc_dialog_fixed_width_minor 0x7f070020
404 | int dimen abc_dialog_list_padding_bottom_no_buttons 0x7f070021
405 | int dimen abc_dialog_list_padding_top_no_title 0x7f070022
406 | int dimen abc_dialog_min_width_major 0x7f070023
407 | int dimen abc_dialog_min_width_minor 0x7f070024
408 | int dimen abc_dialog_padding_material 0x7f070025
409 | int dimen abc_dialog_padding_top_material 0x7f070026
410 | int dimen abc_dialog_title_divider_material 0x7f070027
411 | int dimen abc_disabled_alpha_material_dark 0x7f070028
412 | int dimen abc_disabled_alpha_material_light 0x7f070029
413 | int dimen abc_dropdownitem_icon_width 0x7f07002a
414 | int dimen abc_dropdownitem_text_padding_left 0x7f07002b
415 | int dimen abc_dropdownitem_text_padding_right 0x7f07002c
416 | int dimen abc_edit_text_inset_bottom_material 0x7f07002d
417 | int dimen abc_edit_text_inset_horizontal_material 0x7f07002e
418 | int dimen abc_edit_text_inset_top_material 0x7f07002f
419 | int dimen abc_floating_window_z 0x7f070030
420 | int dimen abc_list_item_padding_horizontal_material 0x7f070031
421 | int dimen abc_panel_menu_list_width 0x7f070032
422 | int dimen abc_progress_bar_height_material 0x7f070033
423 | int dimen abc_search_view_preferred_height 0x7f070034
424 | int dimen abc_search_view_preferred_width 0x7f070035
425 | int dimen abc_seekbar_track_background_height_material 0x7f070036
426 | int dimen abc_seekbar_track_progress_height_material 0x7f070037
427 | int dimen abc_select_dialog_padding_start_material 0x7f070038
428 | int dimen abc_switch_padding 0x7f070039
429 | int dimen abc_text_size_body_1_material 0x7f07003a
430 | int dimen abc_text_size_body_2_material 0x7f07003b
431 | int dimen abc_text_size_button_material 0x7f07003c
432 | int dimen abc_text_size_caption_material 0x7f07003d
433 | int dimen abc_text_size_display_1_material 0x7f07003e
434 | int dimen abc_text_size_display_2_material 0x7f07003f
435 | int dimen abc_text_size_display_3_material 0x7f070040
436 | int dimen abc_text_size_display_4_material 0x7f070041
437 | int dimen abc_text_size_headline_material 0x7f070042
438 | int dimen abc_text_size_large_material 0x7f070043
439 | int dimen abc_text_size_medium_material 0x7f070044
440 | int dimen abc_text_size_menu_header_material 0x7f070045
441 | int dimen abc_text_size_menu_material 0x7f070046
442 | int dimen abc_text_size_small_material 0x7f070047
443 | int dimen abc_text_size_subhead_material 0x7f070048
444 | int dimen abc_text_size_subtitle_material_toolbar 0x7f070049
445 | int dimen abc_text_size_title_material 0x7f07004a
446 | int dimen abc_text_size_title_material_toolbar 0x7f07004b
447 | int dimen compat_button_inset_horizontal_material 0x7f07004c
448 | int dimen compat_button_inset_vertical_material 0x7f07004d
449 | int dimen compat_button_padding_horizontal_material 0x7f07004e
450 | int dimen compat_button_padding_vertical_material 0x7f07004f
451 | int dimen compat_control_corner_material 0x7f070050
452 | int dimen compat_notification_large_icon_max_height 0x7f070051
453 | int dimen compat_notification_large_icon_max_width 0x7f070052
454 | int dimen disabled_alpha_material_dark 0x7f070053
455 | int dimen disabled_alpha_material_light 0x7f070054
456 | int dimen highlight_alpha_material_colored 0x7f070055
457 | int dimen highlight_alpha_material_dark 0x7f070056
458 | int dimen highlight_alpha_material_light 0x7f070057
459 | int dimen hint_alpha_material_dark 0x7f070058
460 | int dimen hint_alpha_material_light 0x7f070059
461 | int dimen hint_pressed_alpha_material_dark 0x7f07005a
462 | int dimen hint_pressed_alpha_material_light 0x7f07005b
463 | int dimen notification_action_icon_size 0x7f07005c
464 | int dimen notification_action_text_size 0x7f07005d
465 | int dimen notification_big_circle_margin 0x7f07005e
466 | int dimen notification_content_margin_start 0x7f07005f
467 | int dimen notification_large_icon_height 0x7f070060
468 | int dimen notification_large_icon_width 0x7f070061
469 | int dimen notification_main_column_padding_top 0x7f070062
470 | int dimen notification_media_narrow_margin 0x7f070063
471 | int dimen notification_right_icon_size 0x7f070064
472 | int dimen notification_right_side_padding_top 0x7f070065
473 | int dimen notification_small_icon_background_padding 0x7f070066
474 | int dimen notification_small_icon_size_as_large 0x7f070067
475 | int dimen notification_subtext_size 0x7f070068
476 | int dimen notification_top_pad 0x7f070069
477 | int dimen notification_top_pad_large_text 0x7f07006a
478 | int dimen tooltip_corner_radius 0x7f07006b
479 | int dimen tooltip_horizontal_padding 0x7f07006c
480 | int dimen tooltip_margin 0x7f07006d
481 | int dimen tooltip_precise_anchor_extra_offset 0x7f07006e
482 | int dimen tooltip_precise_anchor_threshold 0x7f07006f
483 | int dimen tooltip_vertical_padding 0x7f070070
484 | int dimen tooltip_y_offset_non_touch 0x7f070071
485 | int dimen tooltip_y_offset_touch 0x7f070072
486 | int drawable abc_ab_share_pack_mtrl_alpha 0x7f080001
487 | int drawable abc_action_bar_item_background_material 0x7f080002
488 | int drawable abc_btn_borderless_material 0x7f080003
489 | int drawable abc_btn_check_material 0x7f080004
490 | int drawable abc_btn_check_to_on_mtrl_000 0x7f080005
491 | int drawable abc_btn_check_to_on_mtrl_015 0x7f080006
492 | int drawable abc_btn_colored_material 0x7f080007
493 | int drawable abc_btn_default_mtrl_shape 0x7f080008
494 | int drawable abc_btn_radio_material 0x7f080009
495 | int drawable abc_btn_radio_to_on_mtrl_000 0x7f08000a
496 | int drawable abc_btn_radio_to_on_mtrl_015 0x7f08000b
497 | int drawable abc_btn_switch_to_on_mtrl_00001 0x7f08000c
498 | int drawable abc_btn_switch_to_on_mtrl_00012 0x7f08000d
499 | int drawable abc_cab_background_internal_bg 0x7f08000e
500 | int drawable abc_cab_background_top_material 0x7f08000f
501 | int drawable abc_cab_background_top_mtrl_alpha 0x7f080010
502 | int drawable abc_control_background_material 0x7f080011
503 | int drawable abc_dialog_material_background 0x7f080012
504 | int drawable abc_edit_text_material 0x7f080013
505 | int drawable abc_ic_ab_back_material 0x7f080014
506 | int drawable abc_ic_arrow_drop_right_black_24dp 0x7f080015
507 | int drawable abc_ic_clear_material 0x7f080016
508 | int drawable abc_ic_commit_search_api_mtrl_alpha 0x7f080017
509 | int drawable abc_ic_go_search_api_material 0x7f080018
510 | int drawable abc_ic_menu_copy_mtrl_am_alpha 0x7f080019
511 | int drawable abc_ic_menu_cut_mtrl_alpha 0x7f08001a
512 | int drawable abc_ic_menu_overflow_material 0x7f08001b
513 | int drawable abc_ic_menu_paste_mtrl_am_alpha 0x7f08001c
514 | int drawable abc_ic_menu_selectall_mtrl_alpha 0x7f08001d
515 | int drawable abc_ic_menu_share_mtrl_alpha 0x7f08001e
516 | int drawable abc_ic_search_api_material 0x7f08001f
517 | int drawable abc_ic_star_black_16dp 0x7f080020
518 | int drawable abc_ic_star_black_36dp 0x7f080021
519 | int drawable abc_ic_star_black_48dp 0x7f080022
520 | int drawable abc_ic_star_half_black_16dp 0x7f080023
521 | int drawable abc_ic_star_half_black_36dp 0x7f080024
522 | int drawable abc_ic_star_half_black_48dp 0x7f080025
523 | int drawable abc_ic_voice_search_api_material 0x7f080026
524 | int drawable abc_item_background_holo_dark 0x7f080027
525 | int drawable abc_item_background_holo_light 0x7f080028
526 | int drawable abc_list_divider_material 0x7f080029
527 | int drawable abc_list_divider_mtrl_alpha 0x7f08002a
528 | int drawable abc_list_focused_holo 0x7f08002b
529 | int drawable abc_list_longpressed_holo 0x7f08002c
530 | int drawable abc_list_pressed_holo_dark 0x7f08002d
531 | int drawable abc_list_pressed_holo_light 0x7f08002e
532 | int drawable abc_list_selector_background_transition_holo_dark 0x7f08002f
533 | int drawable abc_list_selector_background_transition_holo_light 0x7f080030
534 | int drawable abc_list_selector_disabled_holo_dark 0x7f080031
535 | int drawable abc_list_selector_disabled_holo_light 0x7f080032
536 | int drawable abc_list_selector_holo_dark 0x7f080033
537 | int drawable abc_list_selector_holo_light 0x7f080034
538 | int drawable abc_menu_hardkey_panel_mtrl_mult 0x7f080035
539 | int drawable abc_popup_background_mtrl_mult 0x7f080036
540 | int drawable abc_ratingbar_indicator_material 0x7f080037
541 | int drawable abc_ratingbar_material 0x7f080038
542 | int drawable abc_ratingbar_small_material 0x7f080039
543 | int drawable abc_scrubber_control_off_mtrl_alpha 0x7f08003a
544 | int drawable abc_scrubber_control_to_pressed_mtrl_000 0x7f08003b
545 | int drawable abc_scrubber_control_to_pressed_mtrl_005 0x7f08003c
546 | int drawable abc_scrubber_primary_mtrl_alpha 0x7f08003d
547 | int drawable abc_scrubber_track_mtrl_alpha 0x7f08003e
548 | int drawable abc_seekbar_thumb_material 0x7f08003f
549 | int drawable abc_seekbar_tick_mark_material 0x7f080040
550 | int drawable abc_seekbar_track_material 0x7f080041
551 | int drawable abc_spinner_mtrl_am_alpha 0x7f080042
552 | int drawable abc_spinner_textfield_background_material 0x7f080043
553 | int drawable abc_switch_thumb_material 0x7f080044
554 | int drawable abc_switch_track_mtrl_alpha 0x7f080045
555 | int drawable abc_tab_indicator_material 0x7f080046
556 | int drawable abc_tab_indicator_mtrl_alpha 0x7f080047
557 | int drawable abc_text_cursor_material 0x7f080048
558 | int drawable abc_text_select_handle_left_mtrl_dark 0x7f080049
559 | int drawable abc_text_select_handle_left_mtrl_light 0x7f08004a
560 | int drawable abc_text_select_handle_middle_mtrl_dark 0x7f08004b
561 | int drawable abc_text_select_handle_middle_mtrl_light 0x7f08004c
562 | int drawable abc_text_select_handle_right_mtrl_dark 0x7f08004d
563 | int drawable abc_text_select_handle_right_mtrl_light 0x7f08004e
564 | int drawable abc_textfield_activated_mtrl_alpha 0x7f08004f
565 | int drawable abc_textfield_default_mtrl_alpha 0x7f080050
566 | int drawable abc_textfield_search_activated_mtrl_alpha 0x7f080051
567 | int drawable abc_textfield_search_default_mtrl_alpha 0x7f080052
568 | int drawable abc_textfield_search_material 0x7f080053
569 | int drawable abc_vector_test 0x7f080054
570 | int drawable notification_action_background 0x7f080055
571 | int drawable notification_bg 0x7f080056
572 | int drawable notification_bg_low 0x7f080057
573 | int drawable notification_bg_low_normal 0x7f080058
574 | int drawable notification_bg_low_pressed 0x7f080059
575 | int drawable notification_bg_normal 0x7f08005a
576 | int drawable notification_bg_normal_pressed 0x7f08005b
577 | int drawable notification_icon_background 0x7f08005c
578 | int drawable notification_template_icon_bg 0x7f08005d
579 | int drawable notification_template_icon_low_bg 0x7f08005e
580 | int drawable notification_tile_bg 0x7f08005f
581 | int drawable notify_panel_notification_icon_bg 0x7f080060
582 | int drawable tooltip_frame_dark 0x7f080061
583 | int drawable tooltip_frame_light 0x7f080062
584 | int id action_bar 0x7f0b0001
585 | int id action_bar_activity_content 0x7f0b0002
586 | int id action_bar_container 0x7f0b0003
587 | int id action_bar_root 0x7f0b0004
588 | int id action_bar_spinner 0x7f0b0005
589 | int id action_bar_subtitle 0x7f0b0006
590 | int id action_bar_title 0x7f0b0007
591 | int id action_container 0x7f0b0008
592 | int id action_context_bar 0x7f0b0009
593 | int id action_divider 0x7f0b000a
594 | int id action_image 0x7f0b000b
595 | int id action_menu_divider 0x7f0b000c
596 | int id action_menu_presenter 0x7f0b000d
597 | int id action_mode_bar 0x7f0b000e
598 | int id action_mode_bar_stub 0x7f0b000f
599 | int id action_mode_close_button 0x7f0b0010
600 | int id action_text 0x7f0b0011
601 | int id actions 0x7f0b0012
602 | int id activity_chooser_view_content 0x7f0b0013
603 | int id add 0x7f0b0014
604 | int id alertTitle 0x7f0b0015
605 | int id async 0x7f0b0016
606 | int id blocking 0x7f0b0017
607 | int id bottom 0x7f0b0018
608 | int id buttonPanel 0x7f0b0019
609 | int id checkbox 0x7f0b001a
610 | int id chronometer 0x7f0b001b
611 | int id content 0x7f0b001c
612 | int id contentPanel 0x7f0b001d
613 | int id custom 0x7f0b001e
614 | int id customPanel 0x7f0b001f
615 | int id decor_content_parent 0x7f0b0020
616 | int id default_activity_button 0x7f0b0021
617 | int id edit_query 0x7f0b0022
618 | int id end 0x7f0b0023
619 | int id expand_activities_button 0x7f0b0024
620 | int id expanded_menu 0x7f0b0025
621 | int id forever 0x7f0b0026
622 | int id group_divider 0x7f0b0027
623 | int id home 0x7f0b0028
624 | int id icon 0x7f0b0029
625 | int id icon_group 0x7f0b002a
626 | int id image 0x7f0b002b
627 | int id info 0x7f0b002c
628 | int id italic 0x7f0b002d
629 | int id left 0x7f0b002e
630 | int id line1 0x7f0b002f
631 | int id line3 0x7f0b0030
632 | int id listMode 0x7f0b0031
633 | int id list_item 0x7f0b0032
634 | int id message 0x7f0b0033
635 | int id multiply 0x7f0b0034
636 | int id none 0x7f0b0035
637 | int id normal 0x7f0b0036
638 | int id notification_background 0x7f0b0037
639 | int id notification_main_column 0x7f0b0038
640 | int id notification_main_column_container 0x7f0b0039
641 | int id parentPanel 0x7f0b003a
642 | int id progress_circular 0x7f0b003b
643 | int id progress_horizontal 0x7f0b003c
644 | int id radio 0x7f0b003d
645 | int id right 0x7f0b003e
646 | int id right_icon 0x7f0b003f
647 | int id right_side 0x7f0b0040
648 | int id screen 0x7f0b0041
649 | int id scrollIndicatorDown 0x7f0b0042
650 | int id scrollIndicatorUp 0x7f0b0043
651 | int id scrollView 0x7f0b0044
652 | int id search_badge 0x7f0b0045
653 | int id search_bar 0x7f0b0046
654 | int id search_button 0x7f0b0047
655 | int id search_close_btn 0x7f0b0048
656 | int id search_edit_frame 0x7f0b0049
657 | int id search_go_btn 0x7f0b004a
658 | int id search_mag_icon 0x7f0b004b
659 | int id search_plate 0x7f0b004c
660 | int id search_src_text 0x7f0b004d
661 | int id search_voice_btn 0x7f0b004e
662 | int id select_dialog_listview 0x7f0b004f
663 | int id shortcut 0x7f0b0050
664 | int id spacer 0x7f0b0051
665 | int id split_action_bar 0x7f0b0052
666 | int id src_atop 0x7f0b0053
667 | int id src_in 0x7f0b0054
668 | int id src_over 0x7f0b0055
669 | int id start 0x7f0b0056
670 | int id submenuarrow 0x7f0b0057
671 | int id submit_area 0x7f0b0058
672 | int id tabMode 0x7f0b0059
673 | int id tag_transition_group 0x7f0b005a
674 | int id tag_unhandled_key_event_manager 0x7f0b005b
675 | int id tag_unhandled_key_listeners 0x7f0b005c
676 | int id text 0x7f0b005d
677 | int id text2 0x7f0b005e
678 | int id textSpacerNoButtons 0x7f0b005f
679 | int id textSpacerNoTitle 0x7f0b0060
680 | int id time 0x7f0b0061
681 | int id title 0x7f0b0062
682 | int id titleDividerNoCustom 0x7f0b0063
683 | int id title_template 0x7f0b0064
684 | int id top 0x7f0b0065
685 | int id topPanel 0x7f0b0066
686 | int id uniform 0x7f0b0067
687 | int id up 0x7f0b0068
688 | int id wrap_content 0x7f0b0069
689 | int integer abc_config_activityDefaultDur 0x7f0c0001
690 | int integer abc_config_activityShortDur 0x7f0c0002
691 | int integer cancel_button_image_alpha 0x7f0c0003
692 | int integer config_tooltipAnimTime 0x7f0c0004
693 | int integer status_bar_notification_info_maxnum 0x7f0c0005
694 | int layout abc_action_bar_title_item 0x7f0e0001
695 | int layout abc_action_bar_up_container 0x7f0e0002
696 | int layout abc_action_menu_item_layout 0x7f0e0003
697 | int layout abc_action_menu_layout 0x7f0e0004
698 | int layout abc_action_mode_bar 0x7f0e0005
699 | int layout abc_action_mode_close_item_material 0x7f0e0006
700 | int layout abc_activity_chooser_view 0x7f0e0007
701 | int layout abc_activity_chooser_view_list_item 0x7f0e0008
702 | int layout abc_alert_dialog_button_bar_material 0x7f0e0009
703 | int layout abc_alert_dialog_material 0x7f0e000a
704 | int layout abc_alert_dialog_title_material 0x7f0e000b
705 | int layout abc_cascading_menu_item_layout 0x7f0e000c
706 | int layout abc_dialog_title_material 0x7f0e000d
707 | int layout abc_expanded_menu_layout 0x7f0e000e
708 | int layout abc_list_menu_item_checkbox 0x7f0e000f
709 | int layout abc_list_menu_item_icon 0x7f0e0010
710 | int layout abc_list_menu_item_layout 0x7f0e0011
711 | int layout abc_list_menu_item_radio 0x7f0e0012
712 | int layout abc_popup_menu_header_item_layout 0x7f0e0013
713 | int layout abc_popup_menu_item_layout 0x7f0e0014
714 | int layout abc_screen_content_include 0x7f0e0015
715 | int layout abc_screen_simple 0x7f0e0016
716 | int layout abc_screen_simple_overlay_action_mode 0x7f0e0017
717 | int layout abc_screen_toolbar 0x7f0e0018
718 | int layout abc_search_dropdown_item_icons_2line 0x7f0e0019
719 | int layout abc_search_view 0x7f0e001a
720 | int layout abc_select_dialog_material 0x7f0e001b
721 | int layout abc_tooltip 0x7f0e001c
722 | int layout notification_action 0x7f0e001d
723 | int layout notification_action_tombstone 0x7f0e001e
724 | int layout notification_template_custom_big 0x7f0e001f
725 | int layout notification_template_icon_group 0x7f0e0020
726 | int layout notification_template_part_chronometer 0x7f0e0021
727 | int layout notification_template_part_time 0x7f0e0022
728 | int layout select_dialog_item_material 0x7f0e0023
729 | int layout select_dialog_multichoice_material 0x7f0e0024
730 | int layout select_dialog_singlechoice_material 0x7f0e0025
731 | int layout support_simple_spinner_dropdown_item 0x7f0e0026
732 | int string abc_action_bar_home_description 0x7f140001
733 | int string abc_action_bar_up_description 0x7f140002
734 | int string abc_action_menu_overflow_description 0x7f140003
735 | int string abc_action_mode_done 0x7f140004
736 | int string abc_activity_chooser_view_see_all 0x7f140005
737 | int string abc_activitychooserview_choose_application 0x7f140006
738 | int string abc_capital_off 0x7f140007
739 | int string abc_capital_on 0x7f140008
740 | int string abc_font_family_body_1_material 0x7f140009
741 | int string abc_font_family_body_2_material 0x7f14000a
742 | int string abc_font_family_button_material 0x7f14000b
743 | int string abc_font_family_caption_material 0x7f14000c
744 | int string abc_font_family_display_1_material 0x7f14000d
745 | int string abc_font_family_display_2_material 0x7f14000e
746 | int string abc_font_family_display_3_material 0x7f14000f
747 | int string abc_font_family_display_4_material 0x7f140010
748 | int string abc_font_family_headline_material 0x7f140011
749 | int string abc_font_family_menu_material 0x7f140012
750 | int string abc_font_family_subhead_material 0x7f140013
751 | int string abc_font_family_title_material 0x7f140014
752 | int string abc_menu_alt_shortcut_label 0x7f140015
753 | int string abc_menu_ctrl_shortcut_label 0x7f140016
754 | int string abc_menu_delete_shortcut_label 0x7f140017
755 | int string abc_menu_enter_shortcut_label 0x7f140018
756 | int string abc_menu_function_shortcut_label 0x7f140019
757 | int string abc_menu_meta_shortcut_label 0x7f14001a
758 | int string abc_menu_shift_shortcut_label 0x7f14001b
759 | int string abc_menu_space_shortcut_label 0x7f14001c
760 | int string abc_menu_sym_shortcut_label 0x7f14001d
761 | int string abc_prepend_shortcut_label 0x7f14001e
762 | int string abc_search_hint 0x7f14001f
763 | int string abc_searchview_description_clear 0x7f140020
764 | int string abc_searchview_description_query 0x7f140021
765 | int string abc_searchview_description_search 0x7f140022
766 | int string abc_searchview_description_submit 0x7f140023
767 | int string abc_searchview_description_voice 0x7f140024
768 | int string abc_shareactionprovider_share_with 0x7f140025
769 | int string abc_shareactionprovider_share_with_application 0x7f140026
770 | int string abc_toolbar_collapse_description 0x7f140027
771 | int string app_name 0x7f140028
772 | int string search_menu_title 0x7f140029
773 | int string status_bar_notification_info_overflow 0x7f14002a
774 | int style AlertDialog_AppCompat 0x7f150001
775 | int style AlertDialog_AppCompat_Light 0x7f150002
776 | int style Animation_AppCompat_Dialog 0x7f150003
777 | int style Animation_AppCompat_DropDownUp 0x7f150004
778 | int style Animation_AppCompat_Tooltip 0x7f150005
779 | int style Base_AlertDialog_AppCompat 0x7f150006
780 | int style Base_AlertDialog_AppCompat_Light 0x7f150007
781 | int style Base_Animation_AppCompat_Dialog 0x7f150008
782 | int style Base_Animation_AppCompat_DropDownUp 0x7f150009
783 | int style Base_Animation_AppCompat_Tooltip 0x7f15000a
784 | int style Base_DialogWindowTitleBackground_AppCompat 0x7f15000b
785 | int style Base_DialogWindowTitle_AppCompat 0x7f15000c
786 | int style Base_TextAppearance_AppCompat 0x7f15000d
787 | int style Base_TextAppearance_AppCompat_Body1 0x7f15000e
788 | int style Base_TextAppearance_AppCompat_Body2 0x7f15000f
789 | int style Base_TextAppearance_AppCompat_Button 0x7f150010
790 | int style Base_TextAppearance_AppCompat_Caption 0x7f150011
791 | int style Base_TextAppearance_AppCompat_Display1 0x7f150012
792 | int style Base_TextAppearance_AppCompat_Display2 0x7f150013
793 | int style Base_TextAppearance_AppCompat_Display3 0x7f150014
794 | int style Base_TextAppearance_AppCompat_Display4 0x7f150015
795 | int style Base_TextAppearance_AppCompat_Headline 0x7f150016
796 | int style Base_TextAppearance_AppCompat_Inverse 0x7f150017
797 | int style Base_TextAppearance_AppCompat_Large 0x7f150018
798 | int style Base_TextAppearance_AppCompat_Large_Inverse 0x7f150019
799 | int style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large 0x7f15001a
800 | int style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small 0x7f15001b
801 | int style Base_TextAppearance_AppCompat_Medium 0x7f15001c
802 | int style Base_TextAppearance_AppCompat_Medium_Inverse 0x7f15001d
803 | int style Base_TextAppearance_AppCompat_Menu 0x7f15001e
804 | int style Base_TextAppearance_AppCompat_SearchResult 0x7f15001f
805 | int style Base_TextAppearance_AppCompat_SearchResult_Subtitle 0x7f150020
806 | int style Base_TextAppearance_AppCompat_SearchResult_Title 0x7f150021
807 | int style Base_TextAppearance_AppCompat_Small 0x7f150022
808 | int style Base_TextAppearance_AppCompat_Small_Inverse 0x7f150023
809 | int style Base_TextAppearance_AppCompat_Subhead 0x7f150024
810 | int style Base_TextAppearance_AppCompat_Subhead_Inverse 0x7f150025
811 | int style Base_TextAppearance_AppCompat_Title 0x7f150026
812 | int style Base_TextAppearance_AppCompat_Title_Inverse 0x7f150027
813 | int style Base_TextAppearance_AppCompat_Tooltip 0x7f150028
814 | int style Base_TextAppearance_AppCompat_Widget_ActionBar_Menu 0x7f150029
815 | int style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle 0x7f15002a
816 | int style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse 0x7f15002b
817 | int style Base_TextAppearance_AppCompat_Widget_ActionBar_Title 0x7f15002c
818 | int style Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse 0x7f15002d
819 | int style Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle 0x7f15002e
820 | int style Base_TextAppearance_AppCompat_Widget_ActionMode_Title 0x7f15002f
821 | int style Base_TextAppearance_AppCompat_Widget_Button 0x7f150030
822 | int style Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored 0x7f150031
823 | int style Base_TextAppearance_AppCompat_Widget_Button_Colored 0x7f150032
824 | int style Base_TextAppearance_AppCompat_Widget_Button_Inverse 0x7f150033
825 | int style Base_TextAppearance_AppCompat_Widget_DropDownItem 0x7f150034
826 | int style Base_TextAppearance_AppCompat_Widget_PopupMenu_Header 0x7f150035
827 | int style Base_TextAppearance_AppCompat_Widget_PopupMenu_Large 0x7f150036
828 | int style Base_TextAppearance_AppCompat_Widget_PopupMenu_Small 0x7f150037
829 | int style Base_TextAppearance_AppCompat_Widget_Switch 0x7f150038
830 | int style Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem 0x7f150039
831 | int style Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item 0x7f15003a
832 | int style Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle 0x7f15003b
833 | int style Base_TextAppearance_Widget_AppCompat_Toolbar_Title 0x7f15003c
834 | int style Base_ThemeOverlay_AppCompat 0x7f15003d
835 | int style Base_ThemeOverlay_AppCompat_ActionBar 0x7f15003e
836 | int style Base_ThemeOverlay_AppCompat_Dark 0x7f15003f
837 | int style Base_ThemeOverlay_AppCompat_Dark_ActionBar 0x7f150040
838 | int style Base_ThemeOverlay_AppCompat_Dialog 0x7f150041
839 | int style Base_ThemeOverlay_AppCompat_Dialog_Alert 0x7f150042
840 | int style Base_ThemeOverlay_AppCompat_Light 0x7f150043
841 | int style Base_Theme_AppCompat 0x7f150044
842 | int style Base_Theme_AppCompat_CompactMenu 0x7f150045
843 | int style Base_Theme_AppCompat_Dialog 0x7f150046
844 | int style Base_Theme_AppCompat_DialogWhenLarge 0x7f150047
845 | int style Base_Theme_AppCompat_Dialog_Alert 0x7f150048
846 | int style Base_Theme_AppCompat_Dialog_FixedSize 0x7f150049
847 | int style Base_Theme_AppCompat_Dialog_MinWidth 0x7f15004a
848 | int style Base_Theme_AppCompat_Light 0x7f15004b
849 | int style Base_Theme_AppCompat_Light_DarkActionBar 0x7f15004c
850 | int style Base_Theme_AppCompat_Light_Dialog 0x7f15004d
851 | int style Base_Theme_AppCompat_Light_DialogWhenLarge 0x7f15004e
852 | int style Base_Theme_AppCompat_Light_Dialog_Alert 0x7f15004f
853 | int style Base_Theme_AppCompat_Light_Dialog_FixedSize 0x7f150050
854 | int style Base_Theme_AppCompat_Light_Dialog_MinWidth 0x7f150051
855 | int style Base_V21_ThemeOverlay_AppCompat_Dialog 0x7f150052
856 | int style Base_V21_Theme_AppCompat 0x7f150053
857 | int style Base_V21_Theme_AppCompat_Dialog 0x7f150054
858 | int style Base_V21_Theme_AppCompat_Light 0x7f150055
859 | int style Base_V21_Theme_AppCompat_Light_Dialog 0x7f150056
860 | int style Base_V22_Theme_AppCompat 0x7f150057
861 | int style Base_V22_Theme_AppCompat_Light 0x7f150058
862 | int style Base_V23_Theme_AppCompat 0x7f150059
863 | int style Base_V23_Theme_AppCompat_Light 0x7f15005a
864 | int style Base_V26_Theme_AppCompat 0x7f15005b
865 | int style Base_V26_Theme_AppCompat_Light 0x7f15005c
866 | int style Base_V26_Widget_AppCompat_Toolbar 0x7f15005d
867 | int style Base_V28_Theme_AppCompat 0x7f15005e
868 | int style Base_V28_Theme_AppCompat_Light 0x7f15005f
869 | int style Base_V7_ThemeOverlay_AppCompat_Dialog 0x7f150060
870 | int style Base_V7_Theme_AppCompat 0x7f150061
871 | int style Base_V7_Theme_AppCompat_Dialog 0x7f150062
872 | int style Base_V7_Theme_AppCompat_Light 0x7f150063
873 | int style Base_V7_Theme_AppCompat_Light_Dialog 0x7f150064
874 | int style Base_V7_Widget_AppCompat_AutoCompleteTextView 0x7f150065
875 | int style Base_V7_Widget_AppCompat_EditText 0x7f150066
876 | int style Base_V7_Widget_AppCompat_Toolbar 0x7f150067
877 | int style Base_Widget_AppCompat_ActionBar 0x7f150068
878 | int style Base_Widget_AppCompat_ActionBar_Solid 0x7f150069
879 | int style Base_Widget_AppCompat_ActionBar_TabBar 0x7f15006a
880 | int style Base_Widget_AppCompat_ActionBar_TabText 0x7f15006b
881 | int style Base_Widget_AppCompat_ActionBar_TabView 0x7f15006c
882 | int style Base_Widget_AppCompat_ActionButton 0x7f15006d
883 | int style Base_Widget_AppCompat_ActionButton_CloseMode 0x7f15006e
884 | int style Base_Widget_AppCompat_ActionButton_Overflow 0x7f15006f
885 | int style Base_Widget_AppCompat_ActionMode 0x7f150070
886 | int style Base_Widget_AppCompat_ActivityChooserView 0x7f150071
887 | int style Base_Widget_AppCompat_AutoCompleteTextView 0x7f150072
888 | int style Base_Widget_AppCompat_Button 0x7f150073
889 | int style Base_Widget_AppCompat_ButtonBar 0x7f150074
890 | int style Base_Widget_AppCompat_ButtonBar_AlertDialog 0x7f150075
891 | int style Base_Widget_AppCompat_Button_Borderless 0x7f150076
892 | int style Base_Widget_AppCompat_Button_Borderless_Colored 0x7f150077
893 | int style Base_Widget_AppCompat_Button_ButtonBar_AlertDialog 0x7f150078
894 | int style Base_Widget_AppCompat_Button_Colored 0x7f150079
895 | int style Base_Widget_AppCompat_Button_Small 0x7f15007a
896 | int style Base_Widget_AppCompat_CompoundButton_CheckBox 0x7f15007b
897 | int style Base_Widget_AppCompat_CompoundButton_RadioButton 0x7f15007c
898 | int style Base_Widget_AppCompat_CompoundButton_Switch 0x7f15007d
899 | int style Base_Widget_AppCompat_DrawerArrowToggle 0x7f15007e
900 | int style Base_Widget_AppCompat_DrawerArrowToggle_Common 0x7f15007f
901 | int style Base_Widget_AppCompat_DropDownItem_Spinner 0x7f150080
902 | int style Base_Widget_AppCompat_EditText 0x7f150081
903 | int style Base_Widget_AppCompat_ImageButton 0x7f150082
904 | int style Base_Widget_AppCompat_Light_ActionBar 0x7f150083
905 | int style Base_Widget_AppCompat_Light_ActionBar_Solid 0x7f150084
906 | int style Base_Widget_AppCompat_Light_ActionBar_TabBar 0x7f150085
907 | int style Base_Widget_AppCompat_Light_ActionBar_TabText 0x7f150086
908 | int style Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse 0x7f150087
909 | int style Base_Widget_AppCompat_Light_ActionBar_TabView 0x7f150088
910 | int style Base_Widget_AppCompat_Light_PopupMenu 0x7f150089
911 | int style Base_Widget_AppCompat_Light_PopupMenu_Overflow 0x7f15008a
912 | int style Base_Widget_AppCompat_ListMenuView 0x7f15008b
913 | int style Base_Widget_AppCompat_ListPopupWindow 0x7f15008c
914 | int style Base_Widget_AppCompat_ListView 0x7f15008d
915 | int style Base_Widget_AppCompat_ListView_DropDown 0x7f15008e
916 | int style Base_Widget_AppCompat_ListView_Menu 0x7f15008f
917 | int style Base_Widget_AppCompat_PopupMenu 0x7f150090
918 | int style Base_Widget_AppCompat_PopupMenu_Overflow 0x7f150091
919 | int style Base_Widget_AppCompat_PopupWindow 0x7f150092
920 | int style Base_Widget_AppCompat_ProgressBar 0x7f150093
921 | int style Base_Widget_AppCompat_ProgressBar_Horizontal 0x7f150094
922 | int style Base_Widget_AppCompat_RatingBar 0x7f150095
923 | int style Base_Widget_AppCompat_RatingBar_Indicator 0x7f150096
924 | int style Base_Widget_AppCompat_RatingBar_Small 0x7f150097
925 | int style Base_Widget_AppCompat_SearchView 0x7f150098
926 | int style Base_Widget_AppCompat_SearchView_ActionBar 0x7f150099
927 | int style Base_Widget_AppCompat_SeekBar 0x7f15009a
928 | int style Base_Widget_AppCompat_SeekBar_Discrete 0x7f15009b
929 | int style Base_Widget_AppCompat_Spinner 0x7f15009c
930 | int style Base_Widget_AppCompat_Spinner_Underlined 0x7f15009d
931 | int style Base_Widget_AppCompat_TextView_SpinnerItem 0x7f15009e
932 | int style Base_Widget_AppCompat_Toolbar 0x7f15009f
933 | int style Base_Widget_AppCompat_Toolbar_Button_Navigation 0x7f1500a0
934 | int style Platform_AppCompat 0x7f1500a1
935 | int style Platform_AppCompat_Light 0x7f1500a2
936 | int style Platform_ThemeOverlay_AppCompat 0x7f1500a3
937 | int style Platform_ThemeOverlay_AppCompat_Dark 0x7f1500a4
938 | int style Platform_ThemeOverlay_AppCompat_Light 0x7f1500a5
939 | int style Platform_V21_AppCompat 0x7f1500a6
940 | int style Platform_V21_AppCompat_Light 0x7f1500a7
941 | int style Platform_V25_AppCompat 0x7f1500a8
942 | int style Platform_V25_AppCompat_Light 0x7f1500a9
943 | int style Platform_Widget_AppCompat_Spinner 0x7f1500aa
944 | int style RtlOverlay_DialogWindowTitle_AppCompat 0x7f1500ab
945 | int style RtlOverlay_Widget_AppCompat_ActionBar_TitleItem 0x7f1500ac
946 | int style RtlOverlay_Widget_AppCompat_DialogTitle_Icon 0x7f1500ad
947 | int style RtlOverlay_Widget_AppCompat_PopupMenuItem 0x7f1500ae
948 | int style RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup 0x7f1500af
949 | int style RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut 0x7f1500b0
950 | int style RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow 0x7f1500b1
951 | int style RtlOverlay_Widget_AppCompat_PopupMenuItem_Text 0x7f1500b2
952 | int style RtlOverlay_Widget_AppCompat_PopupMenuItem_Title 0x7f1500b3
953 | int style RtlOverlay_Widget_AppCompat_SearchView_MagIcon 0x7f1500b4
954 | int style RtlOverlay_Widget_AppCompat_Search_DropDown 0x7f1500b5
955 | int style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1 0x7f1500b6
956 | int style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2 0x7f1500b7
957 | int style RtlOverlay_Widget_AppCompat_Search_DropDown_Query 0x7f1500b8
958 | int style RtlOverlay_Widget_AppCompat_Search_DropDown_Text 0x7f1500b9
959 | int style RtlUnderlay_Widget_AppCompat_ActionButton 0x7f1500ba
960 | int style RtlUnderlay_Widget_AppCompat_ActionButton_Overflow 0x7f1500bb
961 | int style TextAppearance_AppCompat 0x7f1500bc
962 | int style TextAppearance_AppCompat_Body1 0x7f1500bd
963 | int style TextAppearance_AppCompat_Body2 0x7f1500be
964 | int style TextAppearance_AppCompat_Button 0x7f1500bf
965 | int style TextAppearance_AppCompat_Caption 0x7f1500c0
966 | int style TextAppearance_AppCompat_Display1 0x7f1500c1
967 | int style TextAppearance_AppCompat_Display2 0x7f1500c2
968 | int style TextAppearance_AppCompat_Display3 0x7f1500c3
969 | int style TextAppearance_AppCompat_Display4 0x7f1500c4
970 | int style TextAppearance_AppCompat_Headline 0x7f1500c5
971 | int style TextAppearance_AppCompat_Inverse 0x7f1500c6
972 | int style TextAppearance_AppCompat_Large 0x7f1500c7
973 | int style TextAppearance_AppCompat_Large_Inverse 0x7f1500c8
974 | int style TextAppearance_AppCompat_Light_SearchResult_Subtitle 0x7f1500c9
975 | int style TextAppearance_AppCompat_Light_SearchResult_Title 0x7f1500ca
976 | int style TextAppearance_AppCompat_Light_Widget_PopupMenu_Large 0x7f1500cb
977 | int style TextAppearance_AppCompat_Light_Widget_PopupMenu_Small 0x7f1500cc
978 | int style TextAppearance_AppCompat_Medium 0x7f1500cd
979 | int style TextAppearance_AppCompat_Medium_Inverse 0x7f1500ce
980 | int style TextAppearance_AppCompat_Menu 0x7f1500cf
981 | int style TextAppearance_AppCompat_SearchResult_Subtitle 0x7f1500d0
982 | int style TextAppearance_AppCompat_SearchResult_Title 0x7f1500d1
983 | int style TextAppearance_AppCompat_Small 0x7f1500d2
984 | int style TextAppearance_AppCompat_Small_Inverse 0x7f1500d3
985 | int style TextAppearance_AppCompat_Subhead 0x7f1500d4
986 | int style TextAppearance_AppCompat_Subhead_Inverse 0x7f1500d5
987 | int style TextAppearance_AppCompat_Title 0x7f1500d6
988 | int style TextAppearance_AppCompat_Title_Inverse 0x7f1500d7
989 | int style TextAppearance_AppCompat_Tooltip 0x7f1500d8
990 | int style TextAppearance_AppCompat_Widget_ActionBar_Menu 0x7f1500d9
991 | int style TextAppearance_AppCompat_Widget_ActionBar_Subtitle 0x7f1500da
992 | int style TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse 0x7f1500db
993 | int style TextAppearance_AppCompat_Widget_ActionBar_Title 0x7f1500dc
994 | int style TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse 0x7f1500dd
995 | int style TextAppearance_AppCompat_Widget_ActionMode_Subtitle 0x7f1500de
996 | int style TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse 0x7f1500df
997 | int style TextAppearance_AppCompat_Widget_ActionMode_Title 0x7f1500e0
998 | int style TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse 0x7f1500e1
999 | int style TextAppearance_AppCompat_Widget_Button 0x7f1500e2
1000 | int style TextAppearance_AppCompat_Widget_Button_Borderless_Colored 0x7f1500e3
1001 | int style TextAppearance_AppCompat_Widget_Button_Colored 0x7f1500e4
1002 | int style TextAppearance_AppCompat_Widget_Button_Inverse 0x7f1500e5
1003 | int style TextAppearance_AppCompat_Widget_DropDownItem 0x7f1500e6
1004 | int style TextAppearance_AppCompat_Widget_PopupMenu_Header 0x7f1500e7
1005 | int style TextAppearance_AppCompat_Widget_PopupMenu_Large 0x7f1500e8
1006 | int style TextAppearance_AppCompat_Widget_PopupMenu_Small 0x7f1500e9
1007 | int style TextAppearance_AppCompat_Widget_Switch 0x7f1500ea
1008 | int style TextAppearance_AppCompat_Widget_TextView_SpinnerItem 0x7f1500eb
1009 | int style TextAppearance_Compat_Notification 0x7f1500ec
1010 | int style TextAppearance_Compat_Notification_Info 0x7f1500ed
1011 | int style TextAppearance_Compat_Notification_Line2 0x7f1500ee
1012 | int style TextAppearance_Compat_Notification_Time 0x7f1500ef
1013 | int style TextAppearance_Compat_Notification_Title 0x7f1500f0
1014 | int style TextAppearance_Widget_AppCompat_ExpandedMenu_Item 0x7f1500f1
1015 | int style TextAppearance_Widget_AppCompat_Toolbar_Subtitle 0x7f1500f2
1016 | int style TextAppearance_Widget_AppCompat_Toolbar_Title 0x7f1500f3
1017 | int style ThemeOverlay_AppCompat 0x7f1500f4
1018 | int style ThemeOverlay_AppCompat_ActionBar 0x7f1500f5
1019 | int style ThemeOverlay_AppCompat_Dark 0x7f1500f6
1020 | int style ThemeOverlay_AppCompat_Dark_ActionBar 0x7f1500f7
1021 | int style ThemeOverlay_AppCompat_Dialog 0x7f1500f8
1022 | int style ThemeOverlay_AppCompat_Dialog_Alert 0x7f1500f9
1023 | int style ThemeOverlay_AppCompat_Light 0x7f1500fa
1024 | int style Theme_AppCompat 0x7f1500fb
1025 | int style Theme_AppCompat_CompactMenu 0x7f1500fc
1026 | int style Theme_AppCompat_DayNight 0x7f1500fd
1027 | int style Theme_AppCompat_DayNight_DarkActionBar 0x7f1500fe
1028 | int style Theme_AppCompat_DayNight_Dialog 0x7f1500ff
1029 | int style Theme_AppCompat_DayNight_DialogWhenLarge 0x7f150100
1030 | int style Theme_AppCompat_DayNight_Dialog_Alert 0x7f150101
1031 | int style Theme_AppCompat_DayNight_Dialog_MinWidth 0x7f150102
1032 | int style Theme_AppCompat_DayNight_NoActionBar 0x7f150103
1033 | int style Theme_AppCompat_Dialog 0x7f150104
1034 | int style Theme_AppCompat_DialogWhenLarge 0x7f150105
1035 | int style Theme_AppCompat_Dialog_Alert 0x7f150106
1036 | int style Theme_AppCompat_Dialog_MinWidth 0x7f150107
1037 | int style Theme_AppCompat_Light 0x7f150108
1038 | int style Theme_AppCompat_Light_DarkActionBar 0x7f150109
1039 | int style Theme_AppCompat_Light_Dialog 0x7f15010a
1040 | int style Theme_AppCompat_Light_DialogWhenLarge 0x7f15010b
1041 | int style Theme_AppCompat_Light_Dialog_Alert 0x7f15010c
1042 | int style Theme_AppCompat_Light_Dialog_MinWidth 0x7f15010d
1043 | int style Theme_AppCompat_Light_NoActionBar 0x7f15010e
1044 | int style Theme_AppCompat_NoActionBar 0x7f15010f
1045 | int style Widget_AppCompat_ActionBar 0x7f150110
1046 | int style Widget_AppCompat_ActionBar_Solid 0x7f150111
1047 | int style Widget_AppCompat_ActionBar_TabBar 0x7f150112
1048 | int style Widget_AppCompat_ActionBar_TabText 0x7f150113
1049 | int style Widget_AppCompat_ActionBar_TabView 0x7f150114
1050 | int style Widget_AppCompat_ActionButton 0x7f150115
1051 | int style Widget_AppCompat_ActionButton_CloseMode 0x7f150116
1052 | int style Widget_AppCompat_ActionButton_Overflow 0x7f150117
1053 | int style Widget_AppCompat_ActionMode 0x7f150118
1054 | int style Widget_AppCompat_ActivityChooserView 0x7f150119
1055 | int style Widget_AppCompat_AutoCompleteTextView 0x7f15011a
1056 | int style Widget_AppCompat_Button 0x7f15011b
1057 | int style Widget_AppCompat_ButtonBar 0x7f15011c
1058 | int style Widget_AppCompat_ButtonBar_AlertDialog 0x7f15011d
1059 | int style Widget_AppCompat_Button_Borderless 0x7f15011e
1060 | int style Widget_AppCompat_Button_Borderless_Colored 0x7f15011f
1061 | int style Widget_AppCompat_Button_ButtonBar_AlertDialog 0x7f150120
1062 | int style Widget_AppCompat_Button_Colored 0x7f150121
1063 | int style Widget_AppCompat_Button_Small 0x7f150122
1064 | int style Widget_AppCompat_CompoundButton_CheckBox 0x7f150123
1065 | int style Widget_AppCompat_CompoundButton_RadioButton 0x7f150124
1066 | int style Widget_AppCompat_CompoundButton_Switch 0x7f150125
1067 | int style Widget_AppCompat_DrawerArrowToggle 0x7f150126
1068 | int style Widget_AppCompat_DropDownItem_Spinner 0x7f150127
1069 | int style Widget_AppCompat_EditText 0x7f150128
1070 | int style Widget_AppCompat_ImageButton 0x7f150129
1071 | int style Widget_AppCompat_Light_ActionBar 0x7f15012a
1072 | int style Widget_AppCompat_Light_ActionBar_Solid 0x7f15012b
1073 | int style Widget_AppCompat_Light_ActionBar_Solid_Inverse 0x7f15012c
1074 | int style Widget_AppCompat_Light_ActionBar_TabBar 0x7f15012d
1075 | int style Widget_AppCompat_Light_ActionBar_TabBar_Inverse 0x7f15012e
1076 | int style Widget_AppCompat_Light_ActionBar_TabText 0x7f15012f
1077 | int style Widget_AppCompat_Light_ActionBar_TabText_Inverse 0x7f150130
1078 | int style Widget_AppCompat_Light_ActionBar_TabView 0x7f150131
1079 | int style Widget_AppCompat_Light_ActionBar_TabView_Inverse 0x7f150132
1080 | int style Widget_AppCompat_Light_ActionButton 0x7f150133
1081 | int style Widget_AppCompat_Light_ActionButton_CloseMode 0x7f150134
1082 | int style Widget_AppCompat_Light_ActionButton_Overflow 0x7f150135
1083 | int style Widget_AppCompat_Light_ActionMode_Inverse 0x7f150136
1084 | int style Widget_AppCompat_Light_ActivityChooserView 0x7f150137
1085 | int style Widget_AppCompat_Light_AutoCompleteTextView 0x7f150138
1086 | int style Widget_AppCompat_Light_DropDownItem_Spinner 0x7f150139
1087 | int style Widget_AppCompat_Light_ListPopupWindow 0x7f15013a
1088 | int style Widget_AppCompat_Light_ListView_DropDown 0x7f15013b
1089 | int style Widget_AppCompat_Light_PopupMenu 0x7f15013c
1090 | int style Widget_AppCompat_Light_PopupMenu_Overflow 0x7f15013d
1091 | int style Widget_AppCompat_Light_SearchView 0x7f15013e
1092 | int style Widget_AppCompat_Light_Spinner_DropDown_ActionBar 0x7f15013f
1093 | int style Widget_AppCompat_ListMenuView 0x7f150140
1094 | int style Widget_AppCompat_ListPopupWindow 0x7f150141
1095 | int style Widget_AppCompat_ListView 0x7f150142
1096 | int style Widget_AppCompat_ListView_DropDown 0x7f150143
1097 | int style Widget_AppCompat_ListView_Menu 0x7f150144
1098 | int style Widget_AppCompat_PopupMenu 0x7f150145
1099 | int style Widget_AppCompat_PopupMenu_Overflow 0x7f150146
1100 | int style Widget_AppCompat_PopupWindow 0x7f150147
1101 | int style Widget_AppCompat_ProgressBar 0x7f150148
1102 | int style Widget_AppCompat_ProgressBar_Horizontal 0x7f150149
1103 | int style Widget_AppCompat_RatingBar 0x7f15014a
1104 | int style Widget_AppCompat_RatingBar_Indicator 0x7f15014b
1105 | int style Widget_AppCompat_RatingBar_Small 0x7f15014c
1106 | int style Widget_AppCompat_SearchView 0x7f15014d
1107 | int style Widget_AppCompat_SearchView_ActionBar 0x7f15014e
1108 | int style Widget_AppCompat_SeekBar 0x7f15014f
1109 | int style Widget_AppCompat_SeekBar_Discrete 0x7f150150
1110 | int style Widget_AppCompat_Spinner 0x7f150151
1111 | int style Widget_AppCompat_Spinner_DropDown 0x7f150152
1112 | int style Widget_AppCompat_Spinner_DropDown_ActionBar 0x7f150153
1113 | int style Widget_AppCompat_Spinner_Underlined 0x7f150154
1114 | int style Widget_AppCompat_TextView_SpinnerItem 0x7f150155
1115 | int style Widget_AppCompat_Toolbar 0x7f150156
1116 | int style Widget_AppCompat_Toolbar_Button_Navigation 0x7f150157
1117 | int style Widget_Compat_NotificationActionContainer 0x7f150158
1118 | int style Widget_Compat_NotificationActionText 0x7f150159
1119 | int style Widget_Support_CoordinatorLayout 0x7f15015a
1120 | int[] styleable ActionBar { 0x7f040032, 0x7f040033, 0x7f040034, 0x7f040058, 0x7f040059, 0x7f04005a, 0x7f04005b, 0x7f04005c, 0x7f04005d, 0x7f040060, 0x7f040065, 0x7f040066, 0x7f040071, 0x7f040081, 0x7f040082, 0x7f040083, 0x7f040084, 0x7f040085, 0x7f04008a, 0x7f04008d, 0x7f0400a3, 0x7f0400aa, 0x7f0400b5, 0x7f0400b8, 0x7f0400b9, 0x7f0400d4, 0x7f0400d7, 0x7f0400f2, 0x7f0400fb }
1121 | int styleable ActionBar_background 0
1122 | int styleable ActionBar_backgroundSplit 1
1123 | int styleable ActionBar_backgroundStacked 2
1124 | int styleable ActionBar_contentInsetEnd 3
1125 | int styleable ActionBar_contentInsetEndWithActions 4
1126 | int styleable ActionBar_contentInsetLeft 5
1127 | int styleable ActionBar_contentInsetRight 6
1128 | int styleable ActionBar_contentInsetStart 7
1129 | int styleable ActionBar_contentInsetStartWithNavigation 8
1130 | int styleable ActionBar_customNavigationLayout 9
1131 | int styleable ActionBar_displayOptions 10
1132 | int styleable ActionBar_divider 11
1133 | int styleable ActionBar_elevation 12
1134 | int styleable ActionBar_height 13
1135 | int styleable ActionBar_hideOnContentScroll 14
1136 | int styleable ActionBar_homeAsUpIndicator 15
1137 | int styleable ActionBar_homeLayout 16
1138 | int styleable ActionBar_icon 17
1139 | int styleable ActionBar_indeterminateProgressStyle 18
1140 | int styleable ActionBar_itemPadding 19
1141 | int styleable ActionBar_logo 20
1142 | int styleable ActionBar_navigationMode 21
1143 | int styleable ActionBar_popupTheme 22
1144 | int styleable ActionBar_progressBarPadding 23
1145 | int styleable ActionBar_progressBarStyle 24
1146 | int styleable ActionBar_subtitle 25
1147 | int styleable ActionBar_subtitleTextStyle 26
1148 | int styleable ActionBar_title 27
1149 | int styleable ActionBar_titleTextStyle 28
1150 | int[] styleable ActionBarLayout { 0x10100b3 }
1151 | int styleable ActionBarLayout_android_layout_gravity 0
1152 | int[] styleable ActionMenuItemView { 0x101013f }
1153 | int styleable ActionMenuItemView_android_minWidth 0
1154 | int[] styleable ActionMenuView { }
1155 | int[] styleable ActionMode { 0x7f040032, 0x7f040033, 0x7f040048, 0x7f040081, 0x7f0400d7, 0x7f0400fb }
1156 | int styleable ActionMode_background 0
1157 | int styleable ActionMode_backgroundSplit 1
1158 | int styleable ActionMode_closeItemLayout 2
1159 | int styleable ActionMode_height 3
1160 | int styleable ActionMode_subtitleTextStyle 4
1161 | int styleable ActionMode_titleTextStyle 5
1162 | int[] styleable ActivityChooserView { 0x7f040072, 0x7f04008b }
1163 | int styleable ActivityChooserView_expandActivityOverflowButtonDrawable 0
1164 | int styleable ActivityChooserView_initialActivityCount 1
1165 | int[] styleable AlertDialog { 0x10100f2, 0x7f04003f, 0x7f040040, 0x7f04009a, 0x7f04009b, 0x7f0400a7, 0x7f0400c9, 0x7f0400ca }
1166 | int styleable AlertDialog_android_layout 0
1167 | int styleable AlertDialog_buttonIconDimen 1
1168 | int styleable AlertDialog_buttonPanelSideLayout 2
1169 | int styleable AlertDialog_listItemLayout 3
1170 | int styleable AlertDialog_listLayout 4
1171 | int styleable AlertDialog_multiChoiceItemLayout 5
1172 | int styleable AlertDialog_showTitle 6
1173 | int styleable AlertDialog_singleChoiceItemLayout 7
1174 | int[] styleable AnimatedStateListDrawableCompat { 0x1010196, 0x101011c, 0x101030c, 0x101030d, 0x1010195, 0x1010194 }
1175 | int styleable AnimatedStateListDrawableCompat_android_constantSize 0
1176 | int styleable AnimatedStateListDrawableCompat_android_dither 1
1177 | int styleable AnimatedStateListDrawableCompat_android_enterFadeDuration 2
1178 | int styleable AnimatedStateListDrawableCompat_android_exitFadeDuration 3
1179 | int styleable AnimatedStateListDrawableCompat_android_variablePadding 4
1180 | int styleable AnimatedStateListDrawableCompat_android_visible 5
1181 | int[] styleable AnimatedStateListDrawableItem { 0x1010199, 0x10100d0 }
1182 | int styleable AnimatedStateListDrawableItem_android_drawable 0
1183 | int styleable AnimatedStateListDrawableItem_android_id 1
1184 | int[] styleable AnimatedStateListDrawableTransition { 0x1010199, 0x101044a, 0x101044b, 0x1010449 }
1185 | int styleable AnimatedStateListDrawableTransition_android_drawable 0
1186 | int styleable AnimatedStateListDrawableTransition_android_fromId 1
1187 | int styleable AnimatedStateListDrawableTransition_android_reversible 2
1188 | int styleable AnimatedStateListDrawableTransition_android_toId 3
1189 | int[] styleable AppCompatImageView { 0x1010119, 0x7f0400cf, 0x7f0400f0, 0x7f0400f1 }
1190 | int styleable AppCompatImageView_android_src 0
1191 | int styleable AppCompatImageView_srcCompat 1
1192 | int styleable AppCompatImageView_tint 2
1193 | int styleable AppCompatImageView_tintMode 3
1194 | int[] styleable AppCompatSeekBar { 0x1010142, 0x7f0400ed, 0x7f0400ee, 0x7f0400ef }
1195 | int styleable AppCompatSeekBar_android_thumb 0
1196 | int styleable AppCompatSeekBar_tickMark 1
1197 | int styleable AppCompatSeekBar_tickMarkTint 2
1198 | int styleable AppCompatSeekBar_tickMarkTintMode 3
1199 | int[] styleable AppCompatTextHelper { 0x101016e, 0x1010393, 0x101016f, 0x1010170, 0x1010392, 0x101016d, 0x1010034 }
1200 | int styleable AppCompatTextHelper_android_drawableBottom 0
1201 | int styleable AppCompatTextHelper_android_drawableEnd 1
1202 | int styleable AppCompatTextHelper_android_drawableLeft 2
1203 | int styleable AppCompatTextHelper_android_drawableRight 3
1204 | int styleable AppCompatTextHelper_android_drawableStart 4
1205 | int styleable AppCompatTextHelper_android_drawableTop 5
1206 | int styleable AppCompatTextHelper_android_textAppearance 6
1207 | int[] styleable AppCompatTextView { 0x1010034, 0x7f04002d, 0x7f04002e, 0x7f04002f, 0x7f040030, 0x7f040031, 0x7f040073, 0x7f040075, 0x7f04008f, 0x7f040097, 0x7f0400dd }
1208 | int styleable AppCompatTextView_android_textAppearance 0
1209 | int styleable AppCompatTextView_autoSizeMaxTextSize 1
1210 | int styleable AppCompatTextView_autoSizeMinTextSize 2
1211 | int styleable AppCompatTextView_autoSizePresetSizes 3
1212 | int styleable AppCompatTextView_autoSizeStepGranularity 4
1213 | int styleable AppCompatTextView_autoSizeTextType 5
1214 | int styleable AppCompatTextView_firstBaselineToTopHeight 6
1215 | int styleable AppCompatTextView_fontFamily 7
1216 | int styleable AppCompatTextView_lastBaselineToBottomHeight 8
1217 | int styleable AppCompatTextView_lineHeight 9
1218 | int styleable AppCompatTextView_textAllCaps 10
1219 | int[] styleable AppCompatTheme { 0x7f040001, 0x7f040002, 0x7f040003, 0x7f040004, 0x7f040005, 0x7f040006, 0x7f040007, 0x7f040008, 0x7f040009, 0x7f04000a, 0x7f04000b, 0x7f04000c, 0x7f04000d, 0x7f04000f, 0x7f040010, 0x7f040011, 0x7f040012, 0x7f040013, 0x7f040014, 0x7f040015, 0x7f040016, 0x7f040017, 0x7f040018, 0x7f040019, 0x7f04001a, 0x7f04001b, 0x7f04001c, 0x7f04001d, 0x7f04001e, 0x7f04001f, 0x7f040022, 0x7f040023, 0x7f040024, 0x7f040025, 0x7f040026, 0x10100ae, 0x1010057, 0x7f04002c, 0x7f040038, 0x7f040039, 0x7f04003a, 0x7f04003b, 0x7f04003c, 0x7f04003d, 0x7f040041, 0x7f040042, 0x7f040045, 0x7f040046, 0x7f04004c, 0x7f04004d, 0x7f04004e, 0x7f04004f, 0x7f040050, 0x7f040051, 0x7f040052, 0x7f040053, 0x7f040054, 0x7f040055, 0x7f04005e, 0x7f040062, 0x7f040063, 0x7f040064, 0x7f040067, 0x7f040069, 0x7f04006c, 0x7f04006d, 0x7f04006e, 0x7f04006f, 0x7f040070, 0x7f040083, 0x7f040089, 0x7f040098, 0x7f040099, 0x7f04009c, 0x7f04009d, 0x7f04009e, 0x7f04009f, 0x7f0400a0, 0x7f0400a1, 0x7f0400a2, 0x7f0400b1, 0x7f0400b2, 0x7f0400b3, 0x7f0400b4, 0x7f0400b6, 0x7f0400bc, 0x7f0400bd, 0x7f0400be, 0x7f0400bf, 0x7f0400c2, 0x7f0400c3, 0x7f0400c4, 0x7f0400c5, 0x7f0400cc, 0x7f0400cd, 0x7f0400db, 0x7f0400de, 0x7f0400df, 0x7f0400e0, 0x7f0400e1, 0x7f0400e2, 0x7f0400e3, 0x7f0400e4, 0x7f0400e5, 0x7f0400e6, 0x7f0400e7, 0x7f0400fc, 0x7f0400fd, 0x7f0400fe, 0x7f0400ff, 0x7f040105, 0x7f040107, 0x7f040108, 0x7f040109, 0x7f04010a, 0x7f04010b, 0x7f04010c, 0x7f04010d, 0x7f04010e, 0x7f04010f, 0x7f040110 }
1220 | int styleable AppCompatTheme_actionBarDivider 0
1221 | int styleable AppCompatTheme_actionBarItemBackground 1
1222 | int styleable AppCompatTheme_actionBarPopupTheme 2
1223 | int styleable AppCompatTheme_actionBarSize 3
1224 | int styleable AppCompatTheme_actionBarSplitStyle 4
1225 | int styleable AppCompatTheme_actionBarStyle 5
1226 | int styleable AppCompatTheme_actionBarTabBarStyle 6
1227 | int styleable AppCompatTheme_actionBarTabStyle 7
1228 | int styleable AppCompatTheme_actionBarTabTextStyle 8
1229 | int styleable AppCompatTheme_actionBarTheme 9
1230 | int styleable AppCompatTheme_actionBarWidgetTheme 10
1231 | int styleable AppCompatTheme_actionButtonStyle 11
1232 | int styleable AppCompatTheme_actionDropDownStyle 12
1233 | int styleable AppCompatTheme_actionMenuTextAppearance 13
1234 | int styleable AppCompatTheme_actionMenuTextColor 14
1235 | int styleable AppCompatTheme_actionModeBackground 15
1236 | int styleable AppCompatTheme_actionModeCloseButtonStyle 16
1237 | int styleable AppCompatTheme_actionModeCloseDrawable 17
1238 | int styleable AppCompatTheme_actionModeCopyDrawable 18
1239 | int styleable AppCompatTheme_actionModeCutDrawable 19
1240 | int styleable AppCompatTheme_actionModeFindDrawable 20
1241 | int styleable AppCompatTheme_actionModePasteDrawable 21
1242 | int styleable AppCompatTheme_actionModePopupWindowStyle 22
1243 | int styleable AppCompatTheme_actionModeSelectAllDrawable 23
1244 | int styleable AppCompatTheme_actionModeShareDrawable 24
1245 | int styleable AppCompatTheme_actionModeSplitBackground 25
1246 | int styleable AppCompatTheme_actionModeStyle 26
1247 | int styleable AppCompatTheme_actionModeWebSearchDrawable 27
1248 | int styleable AppCompatTheme_actionOverflowButtonStyle 28
1249 | int styleable AppCompatTheme_actionOverflowMenuStyle 29
1250 | int styleable AppCompatTheme_activityChooserViewStyle 30
1251 | int styleable AppCompatTheme_alertDialogButtonGroupStyle 31
1252 | int styleable AppCompatTheme_alertDialogCenterButtons 32
1253 | int styleable AppCompatTheme_alertDialogStyle 33
1254 | int styleable AppCompatTheme_alertDialogTheme 34
1255 | int styleable AppCompatTheme_android_windowAnimationStyle 35
1256 | int styleable AppCompatTheme_android_windowIsFloating 36
1257 | int styleable AppCompatTheme_autoCompleteTextViewStyle 37
1258 | int styleable AppCompatTheme_borderlessButtonStyle 38
1259 | int styleable AppCompatTheme_buttonBarButtonStyle 39
1260 | int styleable AppCompatTheme_buttonBarNegativeButtonStyle 40
1261 | int styleable AppCompatTheme_buttonBarNeutralButtonStyle 41
1262 | int styleable AppCompatTheme_buttonBarPositiveButtonStyle 42
1263 | int styleable AppCompatTheme_buttonBarStyle 43
1264 | int styleable AppCompatTheme_buttonStyle 44
1265 | int styleable AppCompatTheme_buttonStyleSmall 45
1266 | int styleable AppCompatTheme_checkboxStyle 46
1267 | int styleable AppCompatTheme_checkedTextViewStyle 47
1268 | int styleable AppCompatTheme_colorAccent 48
1269 | int styleable AppCompatTheme_colorBackgroundFloating 49
1270 | int styleable AppCompatTheme_colorButtonNormal 50
1271 | int styleable AppCompatTheme_colorControlActivated 51
1272 | int styleable AppCompatTheme_colorControlHighlight 52
1273 | int styleable AppCompatTheme_colorControlNormal 53
1274 | int styleable AppCompatTheme_colorError 54
1275 | int styleable AppCompatTheme_colorPrimary 55
1276 | int styleable AppCompatTheme_colorPrimaryDark 56
1277 | int styleable AppCompatTheme_colorSwitchThumbNormal 57
1278 | int styleable AppCompatTheme_controlBackground 58
1279 | int styleable AppCompatTheme_dialogCornerRadius 59
1280 | int styleable AppCompatTheme_dialogPreferredPadding 60
1281 | int styleable AppCompatTheme_dialogTheme 61
1282 | int styleable AppCompatTheme_dividerHorizontal 62
1283 | int styleable AppCompatTheme_dividerVertical 63
1284 | int styleable AppCompatTheme_dropDownListViewStyle 64
1285 | int styleable AppCompatTheme_dropdownListPreferredItemHeight 65
1286 | int styleable AppCompatTheme_editTextBackground 66
1287 | int styleable AppCompatTheme_editTextColor 67
1288 | int styleable AppCompatTheme_editTextStyle 68
1289 | int styleable AppCompatTheme_homeAsUpIndicator 69
1290 | int styleable AppCompatTheme_imageButtonStyle 70
1291 | int styleable AppCompatTheme_listChoiceBackgroundIndicator 71
1292 | int styleable AppCompatTheme_listDividerAlertDialog 72
1293 | int styleable AppCompatTheme_listMenuViewStyle 73
1294 | int styleable AppCompatTheme_listPopupWindowStyle 74
1295 | int styleable AppCompatTheme_listPreferredItemHeight 75
1296 | int styleable AppCompatTheme_listPreferredItemHeightLarge 76
1297 | int styleable AppCompatTheme_listPreferredItemHeightSmall 77
1298 | int styleable AppCompatTheme_listPreferredItemPaddingLeft 78
1299 | int styleable AppCompatTheme_listPreferredItemPaddingRight 79
1300 | int styleable AppCompatTheme_panelBackground 80
1301 | int styleable AppCompatTheme_panelMenuListTheme 81
1302 | int styleable AppCompatTheme_panelMenuListWidth 82
1303 | int styleable AppCompatTheme_popupMenuStyle 83
1304 | int styleable AppCompatTheme_popupWindowStyle 84
1305 | int styleable AppCompatTheme_radioButtonStyle 85
1306 | int styleable AppCompatTheme_ratingBarStyle 86
1307 | int styleable AppCompatTheme_ratingBarStyleIndicator 87
1308 | int styleable AppCompatTheme_ratingBarStyleSmall 88
1309 | int styleable AppCompatTheme_searchViewStyle 89
1310 | int styleable AppCompatTheme_seekBarStyle 90
1311 | int styleable AppCompatTheme_selectableItemBackground 91
1312 | int styleable AppCompatTheme_selectableItemBackgroundBorderless 92
1313 | int styleable AppCompatTheme_spinnerDropDownItemStyle 93
1314 | int styleable AppCompatTheme_spinnerStyle 94
1315 | int styleable AppCompatTheme_switchStyle 95
1316 | int styleable AppCompatTheme_textAppearanceLargePopupMenu 96
1317 | int styleable AppCompatTheme_textAppearanceListItem 97
1318 | int styleable AppCompatTheme_textAppearanceListItemSecondary 98
1319 | int styleable AppCompatTheme_textAppearanceListItemSmall 99
1320 | int styleable AppCompatTheme_textAppearancePopupMenuHeader 100
1321 | int styleable AppCompatTheme_textAppearanceSearchResultSubtitle 101
1322 | int styleable AppCompatTheme_textAppearanceSearchResultTitle 102
1323 | int styleable AppCompatTheme_textAppearanceSmallPopupMenu 103
1324 | int styleable AppCompatTheme_textColorAlertDialogListItem 104
1325 | int styleable AppCompatTheme_textColorSearchUrl 105
1326 | int styleable AppCompatTheme_toolbarNavigationButtonStyle 106
1327 | int styleable AppCompatTheme_toolbarStyle 107
1328 | int styleable AppCompatTheme_tooltipForegroundColor 108
1329 | int styleable AppCompatTheme_tooltipFrameBackground 109
1330 | int styleable AppCompatTheme_viewInflaterClass 110
1331 | int styleable AppCompatTheme_windowActionBar 111
1332 | int styleable AppCompatTheme_windowActionBarOverlay 112
1333 | int styleable AppCompatTheme_windowActionModeOverlay 113
1334 | int styleable AppCompatTheme_windowFixedHeightMajor 114
1335 | int styleable AppCompatTheme_windowFixedHeightMinor 115
1336 | int styleable AppCompatTheme_windowFixedWidthMajor 116
1337 | int styleable AppCompatTheme_windowFixedWidthMinor 117
1338 | int styleable AppCompatTheme_windowMinWidthMajor 118
1339 | int styleable AppCompatTheme_windowMinWidthMinor 119
1340 | int styleable AppCompatTheme_windowNoTitle 120
1341 | int[] styleable ButtonBarLayout { 0x7f040027 }
1342 | int styleable ButtonBarLayout_allowStacking 0
1343 | int[] styleable ColorStateListItem { 0x7f040028, 0x101031f, 0x10101a5 }
1344 | int styleable ColorStateListItem_alpha 0
1345 | int styleable ColorStateListItem_android_alpha 1
1346 | int styleable ColorStateListItem_android_color 2
1347 | int[] styleable CompoundButton { 0x1010107, 0x7f040043, 0x7f040044 }
1348 | int styleable CompoundButton_android_button 0
1349 | int styleable CompoundButton_buttonTint 1
1350 | int styleable CompoundButton_buttonTintMode 2
1351 | int[] styleable CoordinatorLayout { 0x7f04008e, 0x7f0400d1 }
1352 | int styleable CoordinatorLayout_keylines 0
1353 | int styleable CoordinatorLayout_statusBarBackground 1
1354 | int[] styleable CoordinatorLayout_Layout { 0x10100b3, 0x7f040091, 0x7f040092, 0x7f040093, 0x7f040094, 0x7f040095, 0x7f040096 }
1355 | int styleable CoordinatorLayout_Layout_android_layout_gravity 0
1356 | int styleable CoordinatorLayout_Layout_layout_anchor 1
1357 | int styleable CoordinatorLayout_Layout_layout_anchorGravity 2
1358 | int styleable CoordinatorLayout_Layout_layout_behavior 3
1359 | int styleable CoordinatorLayout_Layout_layout_dodgeInsetEdges 4
1360 | int styleable CoordinatorLayout_Layout_layout_insetEdge 5
1361 | int styleable CoordinatorLayout_Layout_layout_keyline 6
1362 | int[] styleable DrawerArrowToggle { 0x7f04002a, 0x7f04002b, 0x7f040037, 0x7f04004b, 0x7f04006a, 0x7f04007f, 0x7f0400cb, 0x7f0400e9 }
1363 | int styleable DrawerArrowToggle_arrowHeadLength 0
1364 | int styleable DrawerArrowToggle_arrowShaftLength 1
1365 | int styleable DrawerArrowToggle_barLength 2
1366 | int styleable DrawerArrowToggle_color 3
1367 | int styleable DrawerArrowToggle_drawableSize 4
1368 | int styleable DrawerArrowToggle_gapBetweenBars 5
1369 | int styleable DrawerArrowToggle_spinBars 6
1370 | int styleable DrawerArrowToggle_thickness 7
1371 | int[] styleable FontFamily { 0x7f040076, 0x7f040077, 0x7f040078, 0x7f040079, 0x7f04007a, 0x7f04007b }
1372 | int styleable FontFamily_fontProviderAuthority 0
1373 | int styleable FontFamily_fontProviderCerts 1
1374 | int styleable FontFamily_fontProviderFetchStrategy 2
1375 | int styleable FontFamily_fontProviderFetchTimeout 3
1376 | int styleable FontFamily_fontProviderPackage 4
1377 | int styleable FontFamily_fontProviderQuery 5
1378 | int[] styleable FontFamilyFont { 0x1010532, 0x101053f, 0x1010570, 0x1010533, 0x101056f, 0x7f040074, 0x7f04007c, 0x7f04007d, 0x7f04007e, 0x7f040104 }
1379 | int styleable FontFamilyFont_android_font 0
1380 | int styleable FontFamilyFont_android_fontStyle 1
1381 | int styleable FontFamilyFont_android_fontVariationSettings 2
1382 | int styleable FontFamilyFont_android_fontWeight 3
1383 | int styleable FontFamilyFont_android_ttcIndex 4
1384 | int styleable FontFamilyFont_font 5
1385 | int styleable FontFamilyFont_fontStyle 6
1386 | int styleable FontFamilyFont_fontVariationSettings 7
1387 | int styleable FontFamilyFont_fontWeight 8
1388 | int styleable FontFamilyFont_ttcIndex 9
1389 | int[] styleable GradientColor { 0x101020b, 0x10101a2, 0x10101a3, 0x101019e, 0x1010512, 0x1010513, 0x10101a4, 0x101019d, 0x1010510, 0x1010511, 0x1010201, 0x10101a1 }
1390 | int styleable GradientColor_android_centerColor 0
1391 | int styleable GradientColor_android_centerX 1
1392 | int styleable GradientColor_android_centerY 2
1393 | int styleable GradientColor_android_endColor 3
1394 | int styleable GradientColor_android_endX 4
1395 | int styleable GradientColor_android_endY 5
1396 | int styleable GradientColor_android_gradientRadius 6
1397 | int styleable GradientColor_android_startColor 7
1398 | int styleable GradientColor_android_startX 8
1399 | int styleable GradientColor_android_startY 9
1400 | int styleable GradientColor_android_tileMode 10
1401 | int styleable GradientColor_android_type 11
1402 | int[] styleable GradientColorItem { 0x10101a5, 0x1010514 }
1403 | int styleable GradientColorItem_android_color 0
1404 | int styleable GradientColorItem_android_offset 1
1405 | int[] styleable LinearLayoutCompat { 0x1010126, 0x1010127, 0x10100af, 0x10100c4, 0x1010128, 0x7f040066, 0x7f040068, 0x7f0400a6, 0x7f0400c7 }
1406 | int styleable LinearLayoutCompat_android_baselineAligned 0
1407 | int styleable LinearLayoutCompat_android_baselineAlignedChildIndex 1
1408 | int styleable LinearLayoutCompat_android_gravity 2
1409 | int styleable LinearLayoutCompat_android_orientation 3
1410 | int styleable LinearLayoutCompat_android_weightSum 4
1411 | int styleable LinearLayoutCompat_divider 5
1412 | int styleable LinearLayoutCompat_dividerPadding 6
1413 | int styleable LinearLayoutCompat_measureWithLargestChild 7
1414 | int styleable LinearLayoutCompat_showDividers 8
1415 | int[] styleable LinearLayoutCompat_Layout { 0x10100b3, 0x10100f5, 0x1010181, 0x10100f4 }
1416 | int styleable LinearLayoutCompat_Layout_android_layout_gravity 0
1417 | int styleable LinearLayoutCompat_Layout_android_layout_height 1
1418 | int styleable LinearLayoutCompat_Layout_android_layout_weight 2
1419 | int styleable LinearLayoutCompat_Layout_android_layout_width 3
1420 | int[] styleable ListPopupWindow { 0x10102ac, 0x10102ad }
1421 | int styleable ListPopupWindow_android_dropDownHorizontalOffset 0
1422 | int styleable ListPopupWindow_android_dropDownVerticalOffset 1
1423 | int[] styleable MenuGroup { 0x10101e0, 0x101000e, 0x10100d0, 0x10101de, 0x10101df, 0x1010194 }
1424 | int styleable MenuGroup_android_checkableBehavior 0
1425 | int styleable MenuGroup_android_enabled 1
1426 | int styleable MenuGroup_android_id 2
1427 | int styleable MenuGroup_android_menuCategory 3
1428 | int styleable MenuGroup_android_orderInCategory 4
1429 | int styleable MenuGroup_android_visible 5
1430 | int[] styleable MenuItem { 0x7f04000e, 0x7f040020, 0x7f040021, 0x7f040029, 0x10101e3, 0x10101e5, 0x1010106, 0x101000e, 0x1010002, 0x10100d0, 0x10101de, 0x10101e4, 0x101026f, 0x10101df, 0x10101e1, 0x10101e2, 0x1010194, 0x7f040057, 0x7f040086, 0x7f040087, 0x7f0400ab, 0x7f0400c6, 0x7f040100 }
1431 | int styleable MenuItem_actionLayout 0
1432 | int styleable MenuItem_actionProviderClass 1
1433 | int styleable MenuItem_actionViewClass 2
1434 | int styleable MenuItem_alphabeticModifiers 3
1435 | int styleable MenuItem_android_alphabeticShortcut 4
1436 | int styleable MenuItem_android_checkable 5
1437 | int styleable MenuItem_android_checked 6
1438 | int styleable MenuItem_android_enabled 7
1439 | int styleable MenuItem_android_icon 8
1440 | int styleable MenuItem_android_id 9
1441 | int styleable MenuItem_android_menuCategory 10
1442 | int styleable MenuItem_android_numericShortcut 11
1443 | int styleable MenuItem_android_onClick 12
1444 | int styleable MenuItem_android_orderInCategory 13
1445 | int styleable MenuItem_android_title 14
1446 | int styleable MenuItem_android_titleCondensed 15
1447 | int styleable MenuItem_android_visible 16
1448 | int styleable MenuItem_contentDescription 17
1449 | int styleable MenuItem_iconTint 18
1450 | int styleable MenuItem_iconTintMode 19
1451 | int styleable MenuItem_numericModifiers 20
1452 | int styleable MenuItem_showAsAction 21
1453 | int styleable MenuItem_tooltipText 22
1454 | int[] styleable MenuView { 0x101012f, 0x101012d, 0x1010130, 0x1010131, 0x101012c, 0x101012e, 0x10100ae, 0x7f0400b7, 0x7f0400d2 }
1455 | int styleable MenuView_android_headerBackground 0
1456 | int styleable MenuView_android_horizontalDivider 1
1457 | int styleable MenuView_android_itemBackground 2
1458 | int styleable MenuView_android_itemIconDisabledAlpha 3
1459 | int styleable MenuView_android_itemTextAppearance 4
1460 | int styleable MenuView_android_verticalDivider 5
1461 | int styleable MenuView_android_windowAnimationStyle 6
1462 | int styleable MenuView_preserveIconSpacing 7
1463 | int styleable MenuView_subMenuArrow 8
1464 | int[] styleable PopupWindow { 0x10102c9, 0x1010176, 0x7f0400ac }
1465 | int styleable PopupWindow_android_popupAnimationStyle 0
1466 | int styleable PopupWindow_android_popupBackground 1
1467 | int styleable PopupWindow_overlapAnchor 2
1468 | int[] styleable PopupWindowBackgroundState { 0x7f0400d0 }
1469 | int styleable PopupWindowBackgroundState_state_above_anchor 0
1470 | int[] styleable RecycleListView { 0x7f0400ad, 0x7f0400b0 }
1471 | int styleable RecycleListView_paddingBottomNoButtons 0
1472 | int styleable RecycleListView_paddingTopNoTitle 1
1473 | int[] styleable SearchView { 0x10100da, 0x1010264, 0x1010220, 0x101011f, 0x7f040047, 0x7f040056, 0x7f040061, 0x7f040080, 0x7f040088, 0x7f040090, 0x7f0400ba, 0x7f0400bb, 0x7f0400c0, 0x7f0400c1, 0x7f0400d3, 0x7f0400d8, 0x7f040106 }
1474 | int styleable SearchView_android_focusable 0
1475 | int styleable SearchView_android_imeOptions 1
1476 | int styleable SearchView_android_inputType 2
1477 | int styleable SearchView_android_maxWidth 3
1478 | int styleable SearchView_closeIcon 4
1479 | int styleable SearchView_commitIcon 5
1480 | int styleable SearchView_defaultQueryHint 6
1481 | int styleable SearchView_goIcon 7
1482 | int styleable SearchView_iconifiedByDefault 8
1483 | int styleable SearchView_layout 9
1484 | int styleable SearchView_queryBackground 10
1485 | int styleable SearchView_queryHint 11
1486 | int styleable SearchView_searchHintIcon 12
1487 | int styleable SearchView_searchIcon 13
1488 | int styleable SearchView_submitBackground 14
1489 | int styleable SearchView_suggestionRowLayout 15
1490 | int styleable SearchView_voiceIcon 16
1491 | int[] styleable Spinner { 0x1010262, 0x10100b2, 0x1010176, 0x101017b, 0x7f0400b5 }
1492 | int styleable Spinner_android_dropDownWidth 0
1493 | int styleable Spinner_android_entries 1
1494 | int styleable Spinner_android_popupBackground 2
1495 | int styleable Spinner_android_prompt 3
1496 | int styleable Spinner_popupTheme 4
1497 | int[] styleable StateListDrawable { 0x1010196, 0x101011c, 0x101030c, 0x101030d, 0x1010195, 0x1010194 }
1498 | int styleable StateListDrawable_android_constantSize 0
1499 | int styleable StateListDrawable_android_dither 1
1500 | int styleable StateListDrawable_android_enterFadeDuration 2
1501 | int styleable StateListDrawable_android_exitFadeDuration 3
1502 | int styleable StateListDrawable_android_variablePadding 4
1503 | int styleable StateListDrawable_android_visible 5
1504 | int[] styleable StateListDrawableItem { 0x1010199 }
1505 | int styleable StateListDrawableItem_android_drawable 0
1506 | int[] styleable SwitchCompat { 0x1010125, 0x1010124, 0x1010142, 0x7f0400c8, 0x7f0400ce, 0x7f0400d9, 0x7f0400da, 0x7f0400dc, 0x7f0400ea, 0x7f0400eb, 0x7f0400ec, 0x7f040101, 0x7f040102, 0x7f040103 }
1507 | int styleable SwitchCompat_android_textOff 0
1508 | int styleable SwitchCompat_android_textOn 1
1509 | int styleable SwitchCompat_android_thumb 2
1510 | int styleable SwitchCompat_showText 3
1511 | int styleable SwitchCompat_splitTrack 4
1512 | int styleable SwitchCompat_switchMinWidth 5
1513 | int styleable SwitchCompat_switchPadding 6
1514 | int styleable SwitchCompat_switchTextAppearance 7
1515 | int styleable SwitchCompat_thumbTextPadding 8
1516 | int styleable SwitchCompat_thumbTint 9
1517 | int styleable SwitchCompat_thumbTintMode 10
1518 | int styleable SwitchCompat_track 11
1519 | int styleable SwitchCompat_trackTint 12
1520 | int styleable SwitchCompat_trackTintMode 13
1521 | int[] styleable TextAppearance { 0x10103ac, 0x1010161, 0x1010162, 0x1010163, 0x1010164, 0x1010098, 0x101009a, 0x101009b, 0x1010095, 0x1010097, 0x1010096, 0x7f040075, 0x7f0400dd }
1522 | int styleable TextAppearance_android_fontFamily 0
1523 | int styleable TextAppearance_android_shadowColor 1
1524 | int styleable TextAppearance_android_shadowDx 2
1525 | int styleable TextAppearance_android_shadowDy 3
1526 | int styleable TextAppearance_android_shadowRadius 4
1527 | int styleable TextAppearance_android_textColor 5
1528 | int styleable TextAppearance_android_textColorHint 6
1529 | int styleable TextAppearance_android_textColorLink 7
1530 | int styleable TextAppearance_android_textSize 8
1531 | int styleable TextAppearance_android_textStyle 9
1532 | int styleable TextAppearance_android_typeface 10
1533 | int styleable TextAppearance_fontFamily 11
1534 | int styleable TextAppearance_textAllCaps 12
1535 | int[] styleable Toolbar { 0x10100af, 0x1010140, 0x7f04003e, 0x7f040049, 0x7f04004a, 0x7f040058, 0x7f040059, 0x7f04005a, 0x7f04005b, 0x7f04005c, 0x7f04005d, 0x7f0400a3, 0x7f0400a4, 0x7f0400a5, 0x7f0400a8, 0x7f0400a9, 0x7f0400b5, 0x7f0400d4, 0x7f0400d5, 0x7f0400d6, 0x7f0400f2, 0x7f0400f3, 0x7f0400f4, 0x7f0400f5, 0x7f0400f6, 0x7f0400f7, 0x7f0400f8, 0x7f0400f9, 0x7f0400fa }
1536 | int styleable Toolbar_android_gravity 0
1537 | int styleable Toolbar_android_minHeight 1
1538 | int styleable Toolbar_buttonGravity 2
1539 | int styleable Toolbar_collapseContentDescription 3
1540 | int styleable Toolbar_collapseIcon 4
1541 | int styleable Toolbar_contentInsetEnd 5
1542 | int styleable Toolbar_contentInsetEndWithActions 6
1543 | int styleable Toolbar_contentInsetLeft 7
1544 | int styleable Toolbar_contentInsetRight 8
1545 | int styleable Toolbar_contentInsetStart 9
1546 | int styleable Toolbar_contentInsetStartWithNavigation 10
1547 | int styleable Toolbar_logo 11
1548 | int styleable Toolbar_logoDescription 12
1549 | int styleable Toolbar_maxButtonHeight 13
1550 | int styleable Toolbar_navigationContentDescription 14
1551 | int styleable Toolbar_navigationIcon 15
1552 | int styleable Toolbar_popupTheme 16
1553 | int styleable Toolbar_subtitle 17
1554 | int styleable Toolbar_subtitleTextAppearance 18
1555 | int styleable Toolbar_subtitleTextColor 19
1556 | int styleable Toolbar_title 20
1557 | int styleable Toolbar_titleMargin 21
1558 | int styleable Toolbar_titleMarginBottom 22
1559 | int styleable Toolbar_titleMarginEnd 23
1560 | int styleable Toolbar_titleMarginStart 24
1561 | int styleable Toolbar_titleMarginTop 25
1562 | int styleable Toolbar_titleMargins 26
1563 | int styleable Toolbar_titleTextAppearance 27
1564 | int styleable Toolbar_titleTextColor 28
1565 | int[] styleable View { 0x10100da, 0x1010000, 0x7f0400ae, 0x7f0400af, 0x7f0400e8 }
1566 | int styleable View_android_focusable 0
1567 | int styleable View_android_theme 1
1568 | int styleable View_paddingEnd 2
1569 | int styleable View_paddingStart 3
1570 | int styleable View_theme 4
1571 | int[] styleable ViewBackgroundHelper { 0x10100d4, 0x7f040035, 0x7f040036 }
1572 | int styleable ViewBackgroundHelper_android_background 0
1573 | int styleable ViewBackgroundHelper_backgroundTint 1
1574 | int styleable ViewBackgroundHelper_backgroundTintMode 2
1575 | int[] styleable ViewStubCompat { 0x10100d0, 0x10100f3, 0x10100f2 }
1576 | int styleable ViewStubCompat_android_id 0
1577 | int styleable ViewStubCompat_android_inflatedId 1
1578 | int styleable ViewStubCompat_android_layout 2
1579 |
--------------------------------------------------------------------------------