├── 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 | 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 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 | ![](https://user-gold-cdn.xitu.io/2019/6/2/16b18db62c74de16?w=1773&h=601&f=jpeg&s=112641) 10 | 11 | **反编译效果** 12 | 13 | ![](https://user-gold-cdn.xitu.io/2019/6/2/16b18dbb0cd919a2?w=1344&h=756&f=jpeg&s=152627) 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 | ![](https://user-gold-cdn.xitu.io/2019/6/2/16b18dbfe0ee1c3c?w=960&h=720&f=jpeg&s=22617) 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 | ![](https://user-gold-cdn.xitu.io/2019/6/2/16b18dc27dad72a8?w=761&h=438&f=jpeg&s=58192) 103 | 104 | 下面就以一个流程图来详细了解下 Dex 加载过程吧 105 | 106 | ![](https://user-gold-cdn.xitu.io/2019/6/2/16b18dc848c69036?w=1110&h=793&f=jpeg&s=35355) 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 | ![](https://user-gold-cdn.xitu.io/2019/6/2/16b18dce19cea368?w=1547&h=789&f=gif&s=307772) 251 | 252 | 加密后的 apk (现在只能看见代理 Application ) 253 | 254 | ![](https://user-gold-cdn.xitu.io/2019/6/2/16b18ddbef398ad5?w=1547&h=789&f=gif&s=367894) 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 | --------------------------------------------------------------------------------