├── .gitignore ├── .idea ├── checkstyle-idea.xml ├── codeStyles │ └── Project.xml ├── compiler.xml ├── copyright │ ├── Baidu.xml │ └── profiles_settings.xml ├── encodings.xml ├── google-java-format.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml └── vcs.xml ├── README.md ├── after.png ├── app ├── .gitignore ├── CMakeLists.txt ├── build.gradle ├── libs │ ├── android-art-interpret-3.0.0.jar │ ├── dalvik_hack-3.0.0.5.jar │ └── dalvikpatch-1.0.0.4.jar ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── dodola │ │ └── chapter08 │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── cpp │ │ └── native-lib.cpp │ ├── java │ │ └── com │ │ │ └── dodola │ │ │ └── chapter08 │ │ │ └── MainActivity.java │ ├── jniLibs │ │ ├── arm64-v8a │ │ │ ├── libPatchLibrary.so │ │ │ ├── libdalvikhack.so │ │ │ └── libdexinterpret.so │ │ ├── armeabi-v7a │ │ │ ├── libPatchLibrary.so │ │ │ ├── libdalvikhack.so │ │ │ ├── libdalvikpatch.so │ │ │ └── libdexinterpret.so │ │ ├── armeabi │ │ │ ├── libPatchLibrary.so │ │ │ ├── libdalvikhack.so │ │ │ ├── libdalvikpatch.so │ │ │ └── libdexinterpret.so │ │ ├── mips │ │ │ ├── libPatchLibrary.so │ │ │ ├── libdalvikhack.so │ │ │ ├── libdalvikpatch.so │ │ │ └── libdexinterpret.so │ │ ├── mips64 │ │ │ ├── libPatchLibrary.so │ │ │ ├── libdalvikhack.so │ │ │ └── libdexinterpret.so │ │ ├── x86 │ │ │ ├── libPatchLibrary.so │ │ │ ├── libdalvikhack.so │ │ │ ├── libdalvikpatch.so │ │ │ └── libdexinterpret.so │ │ └── x86_64 │ │ │ ├── libPatchLibrary.so │ │ │ ├── libdalvikhack.so │ │ │ └── libdexinterpret.so │ └── res │ │ ├── drawable-v24 │ │ └── ic_launcher_foreground.xml │ │ ├── drawable │ │ └── ic_launcher_background.xml │ │ ├── layout │ │ └── activity_main.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.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 │ │ ├── raw │ │ └── classes_dex │ │ └── values │ │ ├── colors.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── com │ └── dodola │ └── chapter08 │ └── ExampleUnitTest.java ├── before.png ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.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 | -------------------------------------------------------------------------------- /.idea/checkstyle-idea.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 15 | 16 | -------------------------------------------------------------------------------- /.idea/codeStyles/Project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 15 | 16 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /.idea/copyright/Baidu.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/google-java-format.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 14 | 15 | 16 | 31 | 43 | 44 | 45 | 46 | 47 | 48 | 50 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Chapter08 2 | 3 | 该项目展示了关闭掉虚拟机的 class verify 后对性能的影响。 4 | 5 | 开启前 6 | 7 | ![](before.png) 8 | 9 | 开启后 10 | 11 | ![](after.png) 12 | 13 | 14 | 注意 15 | ==== 16 | 该例子尽量在 Dalvik 下执行,支持模拟器执行。 17 | 18 | 由于 Art 下的 verify 和 Dalivk 下的 verify 机制不一样,所以该例子在 art 下的效果并不明显 -------------------------------------------------------------------------------- /after.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/after.png -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | # For more information about using CMake with Android Studio, read the 2 | # documentation: https://d.android.com/studio/projects/add-native-code.html 3 | 4 | # Sets the minimum version of CMake required to build the native library. 5 | 6 | cmake_minimum_required(VERSION 3.4.1) 7 | 8 | # Creates and names a library, sets it as either STATIC 9 | # or SHARED, and provides the relative paths to its source code. 10 | # You can define multiple libraries, and CMake builds them for you. 11 | # Gradle automatically packages shared libraries with your APK. 12 | 13 | add_library( # Sets the name of the library. 14 | native-lib 15 | 16 | # Sets the library as a shared library. 17 | SHARED 18 | 19 | # Provides a relative path to your source file(s). 20 | src/main/cpp/native-lib.cpp) 21 | 22 | # Searches for a specified prebuilt library and stores the path as a 23 | # variable. Because CMake includes system libraries in the search path by 24 | # default, you only need to specify the name of the public NDK library 25 | # you want to add. CMake verifies that the library exists before 26 | # completing its build. 27 | 28 | find_library( # Sets the name of the path variable. 29 | log-lib 30 | 31 | # Specifies the name of the NDK library that 32 | # you want CMake to locate. 33 | log) 34 | 35 | # Specifies libraries CMake should link to your target library. You 36 | # can link multiple libraries, such as libraries you define in this 37 | # build script, prebuilt third-party libraries, or system libraries. 38 | 39 | target_link_libraries( # Specifies the target library. 40 | native-lib 41 | 42 | # Links the target library to the log library 43 | # included in the NDK. 44 | ${log-lib}) -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 28 5 | defaultConfig { 6 | applicationId "com.dodola.chapter08" 7 | minSdkVersion 14 8 | targetSdkVersion 28 9 | versionCode 1 10 | versionName "1.0" 11 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 12 | externalNativeBuild { 13 | cmake { 14 | cppFlags "" 15 | } 16 | } 17 | } 18 | buildTypes { 19 | release { 20 | minifyEnabled false 21 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 22 | } 23 | } 24 | externalNativeBuild { 25 | cmake { 26 | path "CMakeLists.txt" 27 | } 28 | } 29 | } 30 | 31 | dependencies { 32 | implementation fileTree(include: ['*.jar'], dir: 'libs') 33 | implementation 'com.android.support.constraint:constraint-layout:1.1.3' 34 | testImplementation 'junit:junit:4.12' 35 | androidTestImplementation 'com.android.support.test:runner:1.0.2' 36 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' 37 | implementation files('libs/android-art-interpret-3.0.0.jar') 38 | implementation files('libs/dalvik_hack-3.0.0.5.jar') 39 | implementation files('libs/dalvikpatch-1.0.0.4.jar') 40 | implementation group: 'org.smali', name: 'dexlib2', version: '2.1.3' 41 | 42 | } 43 | -------------------------------------------------------------------------------- /app/libs/android-art-interpret-3.0.0.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/libs/android-art-interpret-3.0.0.jar -------------------------------------------------------------------------------- /app/libs/dalvik_hack-3.0.0.5.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/libs/dalvik_hack-3.0.0.5.jar -------------------------------------------------------------------------------- /app/libs/dalvikpatch-1.0.0.4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/libs/dalvikpatch-1.0.0.4.jar -------------------------------------------------------------------------------- /app/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/androidTest/java/com/dodola/chapter08/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.dodola.chapter08; 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.dodola.chapter08", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/cpp/native-lib.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | extern "C" JNIEXPORT jstring JNICALL 5 | Java_com_dodola_chapter08_MainActivity_stringFromJNI( 6 | JNIEnv *env, 7 | jobject /* this */) { 8 | std::string hello = "Hello from C++"; 9 | return env->NewStringUTF(hello.c_str()); 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/dodola/chapter08/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.dodola.chapter08; 2 | 3 | import android.app.Activity; 4 | import android.os.AsyncTask; 5 | import android.os.Bundle; 6 | import android.view.View; 7 | import android.widget.TextView; 8 | 9 | import com.taobao.android.runtime.AndroidRuntime; 10 | 11 | import org.jf.dexlib2.Opcodes; 12 | import org.jf.dexlib2.dexbacked.DexBackedClassDef; 13 | import org.jf.dexlib2.dexbacked.DexBackedDexFile; 14 | 15 | import java.io.BufferedOutputStream; 16 | import java.io.File; 17 | import java.io.FileInputStream; 18 | import java.io.FileOutputStream; 19 | import java.io.IOException; 20 | import java.io.InputStream; 21 | import java.io.OutputStream; 22 | import java.util.Enumeration; 23 | import java.util.Iterator; 24 | import java.util.Set; 25 | import java.util.zip.ZipEntry; 26 | import java.util.zip.ZipFile; 27 | 28 | import dalvik.system.DexClassLoader; 29 | 30 | public class MainActivity extends Activity { 31 | static { 32 | System.loadLibrary("native-lib"); 33 | } 34 | 35 | private TextView mLoadTimeView; 36 | 37 | @Override 38 | protected void onCreate(Bundle savedInstanceState) { 39 | super.onCreate(savedInstanceState); 40 | setContentView(R.layout.activity_main); 41 | findViewById(R.id.hook).setOnClickListener(new View.OnClickListener() { 42 | @Override 43 | public void onClick(View v) { 44 | AndroidRuntime runtime = AndroidRuntime.getInstance(); 45 | runtime.init(MainActivity.this.getApplicationContext(), true); 46 | runtime.setVerificationEnabled(false); 47 | } 48 | }); 49 | mLoadTimeView = findViewById(R.id.loading_time); 50 | findViewById(R.id.read_dex).setOnClickListener(new View.OnClickListener() { 51 | @Override 52 | public void onClick(View v) { 53 | new AsyncTask() { 54 | 55 | @Override 56 | protected void onPreExecute() { 57 | super.onPreExecute(); 58 | } 59 | 60 | @Override 61 | protected void onPostExecute(Long aLong) { 62 | super.onPostExecute(aLong); 63 | mLoadTimeView.setText("加载时长:" + aLong); 64 | } 65 | 66 | @Override 67 | protected Long doInBackground(Void... voids) { 68 | 69 | InputStream inputStream = getResources().openRawResource(R.raw.classes_dex); 70 | try { 71 | File file = new File(getFilesDir(), "calendar.dex"); 72 | if (file.exists()) { 73 | file.delete(); 74 | } 75 | copyFile(inputStream, new FileOutputStream(file)); 76 | DexClassLoader pathClassLoader = new DexClassLoader(file.getAbsolutePath(), getCacheDir().getAbsolutePath(), null, getClassLoader()); 77 | DexBackedDexFile backedDexFile = DexBackedDexFile.fromInputStream(Opcodes.forApi(21), getResources().openRawResource(R.raw.classes_dex)); 78 | Set classes = backedDexFile.getClasses(); 79 | Iterator iterator = classes.iterator(); 80 | long start = System.currentTimeMillis(); 81 | 82 | while (iterator.hasNext()) { 83 | DexBackedClassDef next = iterator.next(); 84 | String type = next.getType(); 85 | type = type.replace('/', '.').substring(1, type.length() - 1); 86 | try { 87 | pathClassLoader.loadClass(type); 88 | } catch (Throwable ex) { 89 | ex.printStackTrace(); 90 | } 91 | } 92 | 93 | long end = System.currentTimeMillis(); 94 | return end - start; 95 | 96 | } catch (IOException e) { 97 | e.printStackTrace(); 98 | } 99 | 100 | return -1L; 101 | } 102 | }.execute(); 103 | 104 | } 105 | }); 106 | } 107 | 108 | public static void copyFile(File in, File out) throws Exception { 109 | FileInputStream fis = new FileInputStream(in); 110 | FileOutputStream fos = new FileOutputStream(out); 111 | copyFile(fis, fos); 112 | fis.close(); 113 | fos.close(); 114 | } 115 | 116 | private static void copyFile(InputStream in, OutputStream out) throws IOException { 117 | byte[] buffer = new byte[4096]; 118 | int read; 119 | while ((read = in.read(buffer)) != -1) { 120 | out.write(buffer, 0, read); 121 | } 122 | out.flush(); 123 | } 124 | 125 | public static boolean unzip(File file, File outDir) throws IOException { 126 | if (!file.exists()) { 127 | return false; 128 | } 129 | if (!file.isFile()) { 130 | return false; 131 | } 132 | if (!outDir.exists()) { 133 | boolean mkResult = outDir.mkdirs(); 134 | if (!mkResult) { 135 | return false; 136 | } 137 | } 138 | 139 | ZipFile zipFile = null; 140 | try { 141 | zipFile = new ZipFile(file); 142 | int len = 0; 143 | byte[] bytes = new byte[1024]; 144 | ZipEntry entry = null; 145 | Enumeration entries = (Enumeration) zipFile.entries(); 146 | while (entries.hasMoreElements()) { 147 | entry = entries.nextElement(); 148 | 149 | File out = new File(outDir, entry.getName()); 150 | if (entry.isDirectory()) { 151 | if (!out.exists()) { 152 | out.mkdirs(); 153 | } 154 | } else { 155 | InputStream in = zipFile.getInputStream(entry); 156 | if (!out.exists()) { 157 | out.getParentFile().mkdirs(); 158 | } 159 | BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(out)); 160 | 161 | while ((len = in.read(bytes)) > 0) { 162 | bos.write(bytes, 0, len); 163 | } 164 | bos.flush(); 165 | bos.close(); 166 | in.close(); 167 | } 168 | } 169 | } finally { 170 | if (zipFile != null) { 171 | try { 172 | zipFile.close(); 173 | } catch (IOException e) { 174 | e.printStackTrace(); 175 | } 176 | } 177 | } 178 | return true; 179 | } 180 | } 181 | -------------------------------------------------------------------------------- /app/src/main/jniLibs/arm64-v8a/libPatchLibrary.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/src/main/jniLibs/arm64-v8a/libPatchLibrary.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/arm64-v8a/libdalvikhack.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/src/main/jniLibs/arm64-v8a/libdalvikhack.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/arm64-v8a/libdexinterpret.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/src/main/jniLibs/arm64-v8a/libdexinterpret.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libPatchLibrary.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/src/main/jniLibs/armeabi-v7a/libPatchLibrary.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libdalvikhack.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/src/main/jniLibs/armeabi-v7a/libdalvikhack.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libdalvikpatch.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/src/main/jniLibs/armeabi-v7a/libdalvikpatch.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libdexinterpret.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/src/main/jniLibs/armeabi-v7a/libdexinterpret.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi/libPatchLibrary.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/src/main/jniLibs/armeabi/libPatchLibrary.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi/libdalvikhack.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/src/main/jniLibs/armeabi/libdalvikhack.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi/libdalvikpatch.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/src/main/jniLibs/armeabi/libdalvikpatch.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi/libdexinterpret.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/src/main/jniLibs/armeabi/libdexinterpret.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/mips/libPatchLibrary.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/src/main/jniLibs/mips/libPatchLibrary.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/mips/libdalvikhack.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/src/main/jniLibs/mips/libdalvikhack.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/mips/libdalvikpatch.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/src/main/jniLibs/mips/libdalvikpatch.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/mips/libdexinterpret.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/src/main/jniLibs/mips/libdexinterpret.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/mips64/libPatchLibrary.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/src/main/jniLibs/mips64/libPatchLibrary.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/mips64/libdalvikhack.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/src/main/jniLibs/mips64/libdalvikhack.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/mips64/libdexinterpret.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/src/main/jniLibs/mips64/libdexinterpret.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/x86/libPatchLibrary.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/src/main/jniLibs/x86/libPatchLibrary.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/x86/libdalvikhack.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/src/main/jniLibs/x86/libdalvikhack.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/x86/libdalvikpatch.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/src/main/jniLibs/x86/libdalvikpatch.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/x86/libdexinterpret.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/src/main/jniLibs/x86/libdexinterpret.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/x86_64/libPatchLibrary.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/src/main/jniLibs/x86_64/libPatchLibrary.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/x86_64/libdalvikhack.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/src/main/jniLibs/x86_64/libdalvikhack.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/x86_64/libdexinterpret.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/AndroidAdvanceWithGeektime/Chapter08/f868d42d32f9f8213f7e209a959a1e65048688b8/app/src/main/jniLibs/x86_64/libdexinterpret.so -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 12 | 13 | 19 | 22 | 25 | 26 | 27 | 28 | 34 | 35 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 |