├── .gitignore ├── .gradle ├── 4.1 │ ├── fileChanges │ │ └── last-build.bin │ ├── fileContent │ │ └── fileContent.lock │ ├── fileHashes │ │ ├── fileHashes.bin │ │ ├── fileHashes.lock │ │ └── resourceHashesCache.bin │ ├── javaCompile │ │ ├── classAnalysis.bin │ │ ├── jarAnalysis.bin │ │ ├── javaCompile.lock │ │ ├── taskHistory.bin │ │ └── taskJars.bin │ └── taskHistory │ │ ├── fileSnapshots.bin │ │ ├── taskHistory.bin │ │ └── taskHistory.lock └── buildOutputCleanup │ ├── built.bin │ ├── cache.properties │ └── cache.properties.lock ├── .idea ├── gradle.xml ├── libraries │ ├── com_android_support_constraint_constraint_layout_1_0_2.xml │ └── com_android_support_constraint_constraint_layout_solver_1_0_2_jar.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml └── vcs.xml ├── GeekThreads.iml ├── README.md ├── ThreadLibrary ├── .gitignore ├── ThreadLibrary.iml ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── geek │ │ └── thread │ │ ├── GeekThreadManager.java │ │ ├── GeekThreadPools.java │ │ ├── ThreadPoolConst.java │ │ ├── ThreadPoolParams.java │ │ ├── ThreadPriority.java │ │ ├── ThreadType.java │ │ ├── executor │ │ ├── BaseExecutor.java │ │ ├── ExecutorFactory.java │ │ ├── IOExecutor.java │ │ └── SerialExecutor.java │ │ ├── factory │ │ ├── BaseThreadFactory.java │ │ └── IOThreadFactory.java │ │ └── task │ │ ├── GeekPriorityComparable.java │ │ ├── GeekRunnable.java │ │ ├── GeekTask.java │ │ └── GeekThread.java │ └── res │ └── values │ └── strings.xml ├── app ├── .gitignore ├── app.iml ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── aotuman │ │ └── geek │ │ └── MainActivity.java │ └── 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 │ └── values │ ├── colors.xml │ ├── strings.xml │ └── styles.xml ├── build.gradle ├── build └── android-profile │ ├── profile-2017-12-01-21-05-02-137.json │ ├── profile-2017-12-01-21-05-02-137.rawproto │ ├── profile-2017-12-01-21-05-43-256.json │ └── profile-2017-12-01-21-05-43-256.rawproto ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── local.properties └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | build/android-profile/profile-2017-12-02-16-04-42-428.json 2 | build/android-profile/profile-2017-12-02-16-04-42-428.rawproto 3 | build/android-profile/profile-2017-12-02-16-05-19-636.json 4 | build/android-profile/profile-2017-12-02-16-05-19-636.rawproto 5 | build/android-profile/profile-2017-12-02-16-05-33-355.rawproto 6 | build/android-profile/profile-2017-12-02-16-05-58-365.json 7 | build/android-profile/profile-2017-12-02-16-05-58-365.rawproto 8 | -------------------------------------------------------------------------------- /.gradle/4.1/fileChanges/last-build.bin: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gradle/4.1/fileContent/fileContent.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnlyTerminator/GeekThread/d483edfb219694851f1f8d54da3226731c373612/.gradle/4.1/fileContent/fileContent.lock -------------------------------------------------------------------------------- /.gradle/4.1/fileHashes/fileHashes.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnlyTerminator/GeekThread/d483edfb219694851f1f8d54da3226731c373612/.gradle/4.1/fileHashes/fileHashes.bin -------------------------------------------------------------------------------- /.gradle/4.1/fileHashes/fileHashes.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnlyTerminator/GeekThread/d483edfb219694851f1f8d54da3226731c373612/.gradle/4.1/fileHashes/fileHashes.lock -------------------------------------------------------------------------------- /.gradle/4.1/fileHashes/resourceHashesCache.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnlyTerminator/GeekThread/d483edfb219694851f1f8d54da3226731c373612/.gradle/4.1/fileHashes/resourceHashesCache.bin -------------------------------------------------------------------------------- /.gradle/4.1/javaCompile/classAnalysis.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnlyTerminator/GeekThread/d483edfb219694851f1f8d54da3226731c373612/.gradle/4.1/javaCompile/classAnalysis.bin -------------------------------------------------------------------------------- /.gradle/4.1/javaCompile/jarAnalysis.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnlyTerminator/GeekThread/d483edfb219694851f1f8d54da3226731c373612/.gradle/4.1/javaCompile/jarAnalysis.bin -------------------------------------------------------------------------------- /.gradle/4.1/javaCompile/javaCompile.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnlyTerminator/GeekThread/d483edfb219694851f1f8d54da3226731c373612/.gradle/4.1/javaCompile/javaCompile.lock -------------------------------------------------------------------------------- /.gradle/4.1/javaCompile/taskHistory.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnlyTerminator/GeekThread/d483edfb219694851f1f8d54da3226731c373612/.gradle/4.1/javaCompile/taskHistory.bin -------------------------------------------------------------------------------- /.gradle/4.1/javaCompile/taskJars.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnlyTerminator/GeekThread/d483edfb219694851f1f8d54da3226731c373612/.gradle/4.1/javaCompile/taskJars.bin -------------------------------------------------------------------------------- /.gradle/4.1/taskHistory/fileSnapshots.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnlyTerminator/GeekThread/d483edfb219694851f1f8d54da3226731c373612/.gradle/4.1/taskHistory/fileSnapshots.bin -------------------------------------------------------------------------------- /.gradle/4.1/taskHistory/taskHistory.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnlyTerminator/GeekThread/d483edfb219694851f1f8d54da3226731c373612/.gradle/4.1/taskHistory/taskHistory.bin -------------------------------------------------------------------------------- /.gradle/4.1/taskHistory/taskHistory.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnlyTerminator/GeekThread/d483edfb219694851f1f8d54da3226731c373612/.gradle/4.1/taskHistory/taskHistory.lock -------------------------------------------------------------------------------- /.gradle/buildOutputCleanup/built.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnlyTerminator/GeekThread/d483edfb219694851f1f8d54da3226731c373612/.gradle/buildOutputCleanup/built.bin -------------------------------------------------------------------------------- /.gradle/buildOutputCleanup/cache.properties: -------------------------------------------------------------------------------- 1 | #Fri Dec 01 21:04:24 CST 2017 2 | gradle.version=4.1 3 | -------------------------------------------------------------------------------- /.gradle/buildOutputCleanup/cache.properties.lock: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 18 | 19 | -------------------------------------------------------------------------------- /.idea/libraries/com_android_support_constraint_constraint_layout_1_0_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/com_android_support_constraint_constraint_layout_solver_1_0_2_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /GeekThreads.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # GeekThread 2 | Android ThreadPool的封装 3 | ## 使用方法 4 | 在项目的build.gradle里面加上引用: 5 | ```java 6 | compile 'com.geek.thread:thread-pool:1.0.1' 7 | ``` 8 | ## 方法说明 9 | ```java 10 | GeekThreadManager.getInstance().execute(new GeekRunnable(ThreadPriority.LOW) { 11 | @Override 12 | public void run() { 13 | // do something 14 | } 15 | }, ThreadType.NORMAL_THREAD); 16 | ``` 17 | 通过传入Runable的方式来使用多线程,其中ThreadPriority.LOW表示线程级别,ThreadType.NORMAL_THREAD表示线程类型。 18 | ```java 19 | GeekThreadManager.getInstance().execute(new GeekThread(ThreadPriority.NORMAL) { 20 | @Override 21 | public void run() { 22 | super.run(); 23 | // do something 24 | } 25 | },ThreadType.NORMAL_THREAD); 26 | ``` 27 | 这个使用方法与上面的类似,只是传入的Runable换成了Thread 28 | ```java 29 | GeekThreadPools.executeWithGeekThreadPool(new Runnable() { 30 | @Override 31 | public void run() { 32 | //do something 33 | } 34 | }); 35 | ``` 36 | 直接扔进去一个普通的Runable,线程级别和类型都为普通的。 37 | ## 总结 38 | 这个框架主要的作用是内部帮我们实现了线程池,维护了多线程,我们只需要在使用的地方调用就可以了,无需担心因为多出调用多线程而导致的内存消耗等问题,也不需要每次都去实现一个线程池。 39 | -------------------------------------------------------------------------------- /ThreadLibrary/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /ThreadLibrary/ThreadLibrary.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | -------------------------------------------------------------------------------- /ThreadLibrary/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | 3 | android { 4 | compileSdkVersion 26 5 | 6 | 7 | 8 | defaultConfig { 9 | minSdkVersion 14 10 | targetSdkVersion 26 11 | versionCode 1 12 | versionName "1.0" 13 | } 14 | 15 | buildTypes { 16 | release { 17 | minifyEnabled false 18 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 19 | } 20 | } 21 | 22 | } 23 | 24 | dependencies { 25 | implementation fileTree(dir: 'libs', include: ['*.jar']) 26 | } 27 | -------------------------------------------------------------------------------- /ThreadLibrary/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 | -------------------------------------------------------------------------------- /ThreadLibrary/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | -------------------------------------------------------------------------------- /ThreadLibrary/src/main/java/com/geek/thread/GeekThreadManager.java: -------------------------------------------------------------------------------- 1 | package com.geek.thread; 2 | 3 | import com.geek.thread.executor.ExecutorFactory; 4 | import com.geek.thread.executor.SerialExecutor; 5 | import com.geek.thread.task.GeekRunnable; 6 | import com.geek.thread.task.GeekTask; 7 | import com.geek.thread.task.GeekThread; 8 | 9 | import java.util.HashMap; 10 | import java.util.concurrent.ExecutorService; 11 | import java.util.concurrent.Future; 12 | import java.util.concurrent.FutureTask; 13 | import java.util.concurrent.atomic.AtomicBoolean; 14 | import java.util.concurrent.atomic.AtomicInteger; 15 | 16 | /** 17 | * Created by aotuman on 2017/11/23. 18 | */ 19 | 20 | public class GeekThreadManager { 21 | 22 | private static final Object mCacheLock = new Object(); 23 | //用来保证多进线程之间的唯一性 24 | private static AtomicBoolean mInitialized = new AtomicBoolean(false); 25 | private SerialExecutor mSerialExecutor; 26 | private AtomicInteger mKeyIndex; 27 | private HashMap mFutureCache; 28 | 29 | private GeekThreadManager(){ 30 | mInitialized.set(false); 31 | init(); 32 | } 33 | 34 | public static GeekThreadManager getInstance(){ 35 | return InstanceHolder.mInstance; 36 | } 37 | 38 | private static class InstanceHolder{ 39 | private static final GeekThreadManager mInstance = new GeekThreadManager(); 40 | } 41 | 42 | /** 43 | * 初始化信息 44 | */ 45 | public void init(){ 46 | mSerialExecutor = new SerialExecutor(); 47 | mKeyIndex = new AtomicInteger(0); 48 | mFutureCache = new HashMap<>(); 49 | mInitialized.set(true); 50 | } 51 | 52 | /** 53 | * 用来停止线程池 54 | */ 55 | public void shutdown(){ 56 | synchronized (mCacheLock) { 57 | mInitialized.set(false); 58 | if(null != mFutureCache){ 59 | mFutureCache.clear(); 60 | mFutureCache = null; 61 | } 62 | if (null != mSerialExecutor) { 63 | mSerialExecutor.shutdown(); 64 | } 65 | ExecutorFactory.shutdownAll(); 66 | } 67 | } 68 | 69 | public void execute(GeekThread thread, ThreadType threadType){ 70 | if(!mInitialized.get()){ 71 | throw new RuntimeException("Thread pool has been shutdown"); 72 | } 73 | if(null == thread){ 74 | throw new NullPointerException("GeekThread should not be null"); 75 | } 76 | if(null == threadType){ 77 | threadType = ThreadType.NORMAL_THREAD; 78 | } 79 | 80 | if(threadType == ThreadType.REAL_TIME_THREAD){ 81 | thread.setGeekPriority(ThreadPriority.REAL_TIME); 82 | } 83 | 84 | if(threadType != ThreadType.SERIAL_THREAD) { 85 | executeThread(thread, threadType); 86 | }else { 87 | executeSerialThread(thread); 88 | } 89 | } 90 | 91 | public void execute(GeekRunnable runnable, ThreadType threadType){ 92 | if(!mInitialized.get()){ 93 | throw new RuntimeException("Thread pool has been shutdown"); 94 | } 95 | if(null == runnable){ 96 | throw new NullPointerException("GeekRunnable should not be null"); 97 | } 98 | if(null == threadType){ 99 | threadType = ThreadType.NORMAL_THREAD; 100 | } 101 | 102 | if(threadType == ThreadType.REAL_TIME_THREAD){ 103 | runnable.setGeekPriority(ThreadPriority.REAL_TIME); 104 | } 105 | 106 | if(threadType != ThreadType.SERIAL_THREAD) { 107 | executeRunnable(runnable, threadType); 108 | }else { 109 | executeSerialRunnable(runnable); 110 | } 111 | } 112 | 113 | 114 | public void removeWork(int key){ 115 | if(!mInitialized.get() || key < 0){ 116 | return ; 117 | } 118 | synchronized (mCacheLock) { 119 | mFutureCache.remove(key); 120 | } 121 | } 122 | 123 | /** 124 | * 取消正在队列中排队,还未执行的任务。 125 | * 如果任务已经开始执行,则此方法不起任何作用 126 | * 如果任务已经完成或者已经取消,返回ture 127 | * @param key 需要取消的任务 128 | * @return 是否取消成功 129 | */ 130 | public boolean cancelWork(int key){ 131 | if(!mInitialized.get() || key < 0){ 132 | return false; 133 | } 134 | boolean ret = false; 135 | synchronized (mCacheLock) { 136 | Future f = mFutureCache.get(key); 137 | if(null != f) { 138 | ret = f.isCancelled() || f.isDone()|| f.cancel(false); 139 | } 140 | } 141 | if(ret){ 142 | removeWork(key); 143 | } 144 | 145 | return ret; 146 | } 147 | 148 | public int submitCancelable(GeekTask task, ThreadType threadType){ 149 | if(!mInitialized.get()){ 150 | throw new RuntimeException("Thread pool has been shutdown"); 151 | } 152 | if(null == task){ 153 | throw new NullPointerException("MJFutureTask should not be null"); 154 | } 155 | if(null == threadType){ 156 | threadType = ThreadType.NORMAL_THREAD; 157 | } 158 | 159 | if(threadType == ThreadType.REAL_TIME_THREAD){ 160 | task.setGeekPriority(ThreadPriority.REAL_TIME); 161 | } 162 | 163 | Future f = submit(task,threadType); 164 | int key = -1; 165 | if(null != f) { 166 | synchronized (mCacheLock) { 167 | if(mKeyIndex.get() < Integer.MAX_VALUE - 10) { 168 | key = mKeyIndex.getAndIncrement(); 169 | }else{ 170 | mKeyIndex.set(0); 171 | key = 0; 172 | } 173 | mFutureCache.put(key, f); 174 | task.setKey(key); 175 | } 176 | } 177 | return key; 178 | } 179 | 180 | private Future submit(GeekTask task, ThreadType threadType){ 181 | if(!mInitialized.get()){ 182 | throw new RuntimeException("Thread pool has been shutdown"); 183 | } 184 | if(null == task){ 185 | throw new NullPointerException("FutureTask should not be null"); 186 | } 187 | if(null == threadType){ 188 | threadType = ThreadType.NORMAL_THREAD; 189 | } 190 | 191 | if(threadType == ThreadType.REAL_TIME_THREAD){ 192 | task.setGeekPriority(ThreadPriority.REAL_TIME); 193 | } 194 | 195 | if(threadType == ThreadType.SERIAL_THREAD) { 196 | submitSerial(task); 197 | return null; 198 | }else { 199 | return submitThread(task, threadType); 200 | } 201 | } 202 | 203 | private Future submitThread(FutureTask task, ThreadType type){ 204 | ExecutorService executor = ExecutorFactory.getExecutor(type); 205 | if(null == executor){ 206 | return null; 207 | } 208 | return executor.submit(task); 209 | } 210 | 211 | private void submitSerial (GeekTask task){ 212 | mSerialExecutor.execute(task,task.getGeekPriority()); 213 | } 214 | 215 | private void executeThread(GeekThread thread, ThreadType type){ 216 | ExecutorService executor = ExecutorFactory.getExecutor(type); 217 | if(null == executor){ 218 | return ; 219 | } 220 | executor.execute(thread); 221 | } 222 | 223 | private void executeRunnable(GeekRunnable runnable, ThreadType type){ 224 | ExecutorService executor = ExecutorFactory.getExecutor(type); 225 | if(null == executor){ 226 | return ; 227 | } 228 | executor.execute(runnable); 229 | } 230 | 231 | private void executeSerialThread(GeekThread thread){ 232 | mSerialExecutor.execute(thread,thread.getGeekPriority()); 233 | } 234 | 235 | private void executeSerialRunnable(GeekRunnable runnable){ 236 | mSerialExecutor.execute(runnable,runnable.getGeekPriority()); 237 | } 238 | } 239 | -------------------------------------------------------------------------------- /ThreadLibrary/src/main/java/com/geek/thread/GeekThreadPools.java: -------------------------------------------------------------------------------- 1 | package com.geek.thread; 2 | 3 | import com.geek.thread.task.GeekTask; 4 | 5 | /** 6 | * Created by aotuman on 2017/11/23. 7 | */ 8 | 9 | public class GeekThreadPools { 10 | 11 | public static int executeWithGeekThreadPool(Runnable runnable){ 12 | return executeWithGeekThreadPool(runnable,ThreadType.NORMAL_THREAD,ThreadPriority.NORMAL); 13 | } 14 | 15 | /** 16 | * 使用线程池执行Runnable 17 | * @param runnable 需要执行的Runnable 18 | * @param threadType Runnable 的任务类型 任务类型参考 {@link ThreadType} 19 | * @param threadPriority Runnable 的优先级 优先级参考 {@link ThreadPriority} 20 | * @return 当前Runnable的key,key可以用来取消当前还未执行的任务 21 | */ 22 | public static int executeWithGeekThreadPool(final Runnable runnable, ThreadType threadType, ThreadPriority threadPriority){ 23 | if(null == runnable ){ 24 | return -1; 25 | } 26 | if(null == threadType){ 27 | threadType = ThreadType.NORMAL_THREAD; 28 | } 29 | if(null == threadPriority){ 30 | threadPriority = ThreadPriority.NORMAL; 31 | } 32 | GeekTask t = new GeekTask<>(runnable, null, threadPriority); 33 | 34 | return GeekThreadManager.getInstance().submitCancelable(t,threadType); 35 | } 36 | 37 | /** 38 | * 取消正在队列中排队,还未执行的任务。 39 | * 如果任务已经开始执行,则此方法不起任何作用 40 | * 如果任务已经完成或者已经取消,返回ture 41 | * @param key 需要取消的任务 42 | * @return 是否取消成功 43 | */ 44 | public static boolean cancelWork(int key){ 45 | return key >= 0 && GeekThreadManager.getInstance().cancelWork(key); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /ThreadLibrary/src/main/java/com/geek/thread/ThreadPoolConst.java: -------------------------------------------------------------------------------- 1 | package com.geek.thread; 2 | 3 | import java.util.concurrent.TimeUnit; 4 | 5 | /** 6 | * Created by aotuman. 7 | */ 8 | public class ThreadPoolConst { 9 | private static final int MIN_POOL_SIZE = 2; 10 | private static final int AVAILABLE_CORE = Runtime.getRuntime().availableProcessors(); 11 | private static final int CPU_COUNT = (AVAILABLE_CORE < MIN_POOL_SIZE) ? MIN_POOL_SIZE : AVAILABLE_CORE; 12 | 13 | public static final int IO_CORE_POOL_SIZE = CPU_COUNT + 6; 14 | public static final int IO_MAXIMUM_POOL_SIZE = CPU_COUNT + 6; 15 | public static final int IO_KEEP_ALIVE_TIME = 1; 16 | public static final int IO_POOL_QUEUE_SIZE = 64; 17 | 18 | public static final int SERIAL_EXECUTOR_TIMEOUT = 50; 19 | public static final TimeUnit SERIAL_EXECUTOR_TIMEOUT_UNIT = TimeUnit.SECONDS; 20 | } 21 | -------------------------------------------------------------------------------- /ThreadLibrary/src/main/java/com/geek/thread/ThreadPoolParams.java: -------------------------------------------------------------------------------- 1 | package com.geek.thread; 2 | 3 | /** 4 | * Created by aotuman 5 | */ 6 | public class ThreadPoolParams { 7 | public int corePoolSize; 8 | public int maxPoolSize; 9 | public int keepAliveTimeSec; 10 | public int poolQueueSize; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /ThreadLibrary/src/main/java/com/geek/thread/ThreadPriority.java: -------------------------------------------------------------------------------- 1 | package com.geek.thread; 2 | 3 | /** 4 | * Created by aotuman on 2017/11/23. 5 | */ 6 | 7 | public enum ThreadPriority { 8 | REAL_TIME(-1), 9 | /** 10 | * 高优先级 11 | */ 12 | HIGH(0), 13 | /** 14 | * 普通优先级 15 | */ 16 | NORMAL(10), 17 | /** 18 | * 低优先级 19 | */ 20 | LOW(20), 21 | /** 22 | * 后台操作,不影响交互 23 | */ 24 | BACKGROUND(30); 25 | 26 | private int mPriority; 27 | ThreadPriority(int priority){ 28 | mPriority = priority; 29 | } 30 | 31 | public int getPriorityValue(){ 32 | return mPriority; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /ThreadLibrary/src/main/java/com/geek/thread/ThreadType.java: -------------------------------------------------------------------------------- 1 | package com.geek.thread; 2 | 3 | /** 4 | * Created by aotuman on 2017/11/23. 5 | * 线程池类型,用于防止各种类型的线程跑到一个池里面,相互影响 6 | */ 7 | 8 | public enum ThreadType { 9 | /** 10 | * 普通类型 11 | */ 12 | NORMAL_THREAD, 13 | /** 14 | * 序列执行(上一个执行完才会执行下一个) 15 | */ 16 | SERIAL_THREAD, 17 | /** 18 | * 实时响应类型 19 | */ 20 | REAL_TIME_THREAD 21 | } 22 | -------------------------------------------------------------------------------- /ThreadLibrary/src/main/java/com/geek/thread/executor/BaseExecutor.java: -------------------------------------------------------------------------------- 1 | package com.geek.thread.executor; 2 | 3 | import android.os.Looper; 4 | import android.os.Process; 5 | import android.util.Log; 6 | 7 | import com.geek.thread.ThreadPoolParams; 8 | import com.geek.thread.ThreadPriority; 9 | import com.geek.thread.factory.BaseThreadFactory; 10 | import com.geek.thread.task.GeekPriorityComparable; 11 | import com.geek.thread.task.GeekTask; 12 | 13 | import java.lang.reflect.Field; 14 | import java.util.concurrent.Future; 15 | import java.util.concurrent.PriorityBlockingQueue; 16 | import java.util.concurrent.RejectedExecutionHandler; 17 | import java.util.concurrent.ThreadPoolExecutor; 18 | import java.util.concurrent.TimeUnit; 19 | 20 | /** 21 | * Created by aotuman 22 | */ 23 | public abstract class BaseExecutor extends ThreadPoolExecutor { 24 | private static final String TAG = "BaseExecutor"; 25 | 26 | public BaseExecutor(ThreadPoolParams params) { 27 | super(params.corePoolSize, 28 | params.maxPoolSize, 29 | params.keepAliveTimeSec, 30 | TimeUnit.SECONDS, 31 | new PriorityBlockingQueue(params.poolQueueSize), 32 | new BaseThreadFactory(), 33 | new DiscardOldestPolicy()); 34 | 35 | setThreadFactory(getMJThreadFactory()); 36 | setRejectedExecutionHandler(getMJRejectPolicy()); 37 | } 38 | 39 | abstract BaseThreadFactory getMJThreadFactory(); 40 | 41 | abstract RejectedExecutionHandler getMJRejectPolicy(); 42 | 43 | @Override 44 | public Future submit(Runnable task) { 45 | if (task == null) throw new NullPointerException(); 46 | 47 | if (task instanceof GeekTask) { 48 | execute(task); 49 | return (Future) task; 50 | } 51 | GeekTask ftask = new GeekTask(task, null, ThreadPriority.NORMAL); 52 | execute(ftask); 53 | return ftask; 54 | } 55 | 56 | @Override 57 | protected void beforeExecute(Thread t, Runnable r) { 58 | super.beforeExecute(t, r); 59 | if (null == r) { 60 | return; 61 | } 62 | ThreadPriority p = null; 63 | if (r instanceof GeekPriorityComparable) { 64 | p = ((GeekPriorityComparable) r).getGeekPriority(); 65 | } 66 | if (null != p) { 67 | switch (p) { 68 | case REAL_TIME: 69 | Process.setThreadPriority(Process.myTid(), 0); 70 | break; 71 | case HIGH: 72 | Process.setThreadPriority(Process.myTid(), 1); 73 | break; 74 | case NORMAL: 75 | Process.setThreadPriority(Process.myTid(), 5); 76 | break; 77 | case LOW: 78 | Process.setThreadPriority(Process.myTid(), 10); 79 | break; 80 | case BACKGROUND: 81 | Process.setThreadPriority(Process.myTid(), 11); 82 | break; 83 | default: 84 | Process.setThreadPriority(Process.myTid(), 5); 85 | break; 86 | } 87 | } 88 | } 89 | 90 | @Override 91 | protected void afterExecute(Runnable r, Throwable t) { 92 | super.afterExecute(r, t); 93 | try { 94 | Class looperClazz = Looper.class; 95 | Field field = looperClazz.getDeclaredField("sThreadLocal"); 96 | if (null != field) { 97 | field.setAccessible(true); 98 | Object o = field.get(null); 99 | if (o != null && o instanceof ThreadLocal) { 100 | ThreadLocal l = ((ThreadLocal) o); 101 | l.remove(); 102 | } 103 | } 104 | } catch (Exception e) { 105 | Log.e(TAG, "afterExecute: ", e); 106 | } 107 | } 108 | } 109 | -------------------------------------------------------------------------------- /ThreadLibrary/src/main/java/com/geek/thread/executor/ExecutorFactory.java: -------------------------------------------------------------------------------- 1 | package com.geek.thread.executor; 2 | 3 | import android.util.Log; 4 | 5 | import com.geek.thread.ThreadPoolConst; 6 | import com.geek.thread.ThreadPoolParams; 7 | import com.geek.thread.ThreadType; 8 | 9 | import java.util.concurrent.atomic.AtomicBoolean; 10 | 11 | /** 12 | * Created by aotuman on 2017/11/23. 13 | */ 14 | 15 | public class ExecutorFactory { 16 | private static AtomicBoolean mIsRunning = new AtomicBoolean(true); 17 | 18 | public static BaseExecutor getExecutor(ThreadType type) { 19 | if (!mIsRunning.get()) { 20 | return null; 21 | } 22 | BaseExecutor ret = null; 23 | switch (type){ 24 | case REAL_TIME_THREAD: 25 | ret = IOExecutorInstanceHolder.getInstance(); 26 | break; 27 | case SERIAL_THREAD: 28 | ret = IOExecutorInstanceHolder.getInstance(); 29 | break; 30 | default: 31 | ret = IOExecutorInstanceHolder.getInstance(); 32 | break; 33 | } 34 | 35 | return ret; 36 | } 37 | 38 | private static class IOExecutorInstanceHolder { 39 | private static final IOExecutor mExecutor = new IOExecutor(getIOExecutorParams()); 40 | 41 | public static IOExecutor getInstance() { 42 | return mExecutor; 43 | } 44 | 45 | private static ThreadPoolParams getIOExecutorParams() { 46 | ThreadPoolParams params = new ThreadPoolParams(); 47 | params.corePoolSize = ThreadPoolConst.IO_CORE_POOL_SIZE; 48 | params.keepAliveTimeSec = ThreadPoolConst.IO_KEEP_ALIVE_TIME; 49 | params.maxPoolSize = ThreadPoolConst.IO_MAXIMUM_POOL_SIZE; 50 | params.poolQueueSize = ThreadPoolConst.IO_POOL_QUEUE_SIZE; 51 | return params; 52 | } 53 | } 54 | 55 | public static void shutdownAll() { 56 | try { 57 | mIsRunning.set(false); 58 | IOExecutorInstanceHolder.getInstance().shutdown(); 59 | } catch (Throwable e) { 60 | Log.e("ExecutorFactory", e.getMessage()); 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /ThreadLibrary/src/main/java/com/geek/thread/executor/IOExecutor.java: -------------------------------------------------------------------------------- 1 | package com.geek.thread.executor; 2 | 3 | import com.geek.thread.ThreadPoolParams; 4 | import com.geek.thread.factory.BaseThreadFactory; 5 | import com.geek.thread.factory.IOThreadFactory; 6 | 7 | import java.util.concurrent.RejectedExecutionHandler; 8 | import java.util.concurrent.ThreadPoolExecutor; 9 | 10 | /** 11 | * Created by aotuman on 2017/11/23. 12 | */ 13 | 14 | public class IOExecutor extends BaseExecutor { 15 | 16 | protected IOExecutor(ThreadPoolParams params) { 17 | super(params); 18 | } 19 | 20 | @Override 21 | BaseThreadFactory getMJThreadFactory() { 22 | return new IOThreadFactory(); 23 | } 24 | 25 | @Override 26 | RejectedExecutionHandler getMJRejectPolicy() { 27 | return new ThreadPoolExecutor.DiscardOldestPolicy(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /ThreadLibrary/src/main/java/com/geek/thread/executor/SerialExecutor.java: -------------------------------------------------------------------------------- 1 | package com.geek.thread.executor; 2 | 3 | import android.util.Log; 4 | 5 | import com.geek.thread.ThreadPoolConst; 6 | import com.geek.thread.ThreadPriority; 7 | import com.geek.thread.ThreadType; 8 | import com.geek.thread.task.GeekTask; 9 | 10 | import java.util.ArrayDeque; 11 | import java.util.concurrent.CancellationException; 12 | import java.util.concurrent.ExecutionException; 13 | import java.util.concurrent.Executor; 14 | import java.util.concurrent.Future; 15 | import java.util.concurrent.TimeoutException; 16 | 17 | /** 18 | * Created by aotuman on 2017/11/28. 19 | */ 20 | 21 | public class SerialExecutor { 22 | private final ArrayDeque> mTasks; 23 | private GeekTask mActive; 24 | private Future mCurrentFuture; 25 | private final Executor mWaitingExecutor; 26 | private WaitRunnable mWaiting; 27 | private volatile boolean isRunning = true; 28 | 29 | public SerialExecutor() { 30 | mTasks = new ArrayDeque<>(); 31 | mWaitingExecutor = ExecutorFactory.getExecutor(ThreadType.NORMAL_THREAD); 32 | mWaiting = new WaitRunnable(); 33 | } 34 | 35 | public synchronized void execute(final Runnable r, ThreadPriority priority) { 36 | mTasks.offer(new GeekTask(r, null, priority)); 37 | if (mActive == null) { 38 | scheduleNext(); 39 | } 40 | } 41 | 42 | protected synchronized void scheduleNext() { 43 | if (isRunning && (mActive = mTasks.poll()) != null) { 44 | BaseExecutor executor = ExecutorFactory.getExecutor(ThreadType.NORMAL_THREAD); 45 | if (null == executor) { 46 | shutdown(); 47 | return; 48 | } 49 | mCurrentFuture = executor.submit(mActive); 50 | mWaitingExecutor.execute(mWaiting); 51 | } 52 | } 53 | 54 | public synchronized void shutdown() { 55 | try { 56 | isRunning = false; 57 | mTasks.clear(); 58 | if (null != mActive) { 59 | mActive.cancel(true); 60 | } 61 | } catch (Throwable e) { 62 | Log.e("SerialExecutor", "",e); 63 | } 64 | } 65 | 66 | private class WaitRunnable implements Runnable { 67 | @Override 68 | public void run() { 69 | try { 70 | if (null != mCurrentFuture) { 71 | mCurrentFuture.get(ThreadPoolConst.SERIAL_EXECUTOR_TIMEOUT, ThreadPoolConst.SERIAL_EXECUTOR_TIMEOUT_UNIT); 72 | } 73 | } catch (CancellationException | InterruptedException e) { 74 | Log.e("SerialExecutor", e.getMessage()); 75 | } catch (ExecutionException e) { 76 | throw new RuntimeException("An error occurred while executing SerialExecutor", 77 | e.getCause()); 78 | } catch (TimeoutException e){ 79 | Log.e("SerialExecutor", e.getMessage()); 80 | Log.w("SerialExecutor", "task timeout force stop and scheduleNext"); 81 | }finally { 82 | try { 83 | if (null != mCurrentFuture) { 84 | mCurrentFuture.cancel(true); 85 | } 86 | } catch (Exception e1) { 87 | e1.getMessage(); 88 | } 89 | scheduleNext(); 90 | } 91 | } 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /ThreadLibrary/src/main/java/com/geek/thread/factory/BaseThreadFactory.java: -------------------------------------------------------------------------------- 1 | package com.geek.thread.factory; 2 | 3 | import java.util.concurrent.ThreadFactory; 4 | import java.util.concurrent.atomic.AtomicInteger; 5 | 6 | /** 7 | * Created by aotuman 8 | */ 9 | public class BaseThreadFactory implements ThreadFactory{ 10 | protected final AtomicInteger mCount = new AtomicInteger(1); 11 | protected String mThreadNamePrefix = "BaseThread"; 12 | 13 | @Override 14 | public Thread newThread(Runnable r) { 15 | return new Thread(r, mThreadNamePrefix + " #" + mCount.getAndIncrement()); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /ThreadLibrary/src/main/java/com/geek/thread/factory/IOThreadFactory.java: -------------------------------------------------------------------------------- 1 | package com.geek.thread.factory; 2 | 3 | /** 4 | * Created by di.duan on 2016/4/26. 5 | */ 6 | public class IOThreadFactory extends BaseThreadFactory { 7 | public IOThreadFactory(){ 8 | mThreadNamePrefix = "IOThread"; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /ThreadLibrary/src/main/java/com/geek/thread/task/GeekPriorityComparable.java: -------------------------------------------------------------------------------- 1 | package com.geek.thread.task; 2 | 3 | import com.geek.thread.ThreadPriority; 4 | 5 | /** 6 | * Created by Anthony on 2016/9/8. 7 | */ 8 | public interface GeekPriorityComparable extends Comparable{ 9 | void setGeekPriority(ThreadPriority priority); 10 | ThreadPriority getGeekPriority(); 11 | } 12 | -------------------------------------------------------------------------------- /ThreadLibrary/src/main/java/com/geek/thread/task/GeekRunnable.java: -------------------------------------------------------------------------------- 1 | package com.geek.thread.task; 2 | 3 | import com.geek.thread.ThreadPriority; 4 | 5 | /** 6 | * Created by aotuman 7 | */ 8 | public abstract class GeekRunnable implements Runnable, GeekPriorityComparable{ 9 | private ThreadPriority mPriority = ThreadPriority.LOW; 10 | 11 | public GeekRunnable(ThreadPriority priority) { 12 | this.mPriority = priority; 13 | } 14 | 15 | @Override 16 | public void setGeekPriority(ThreadPriority priority) { 17 | this.mPriority = priority; 18 | } 19 | 20 | @Override 21 | public ThreadPriority getGeekPriority() { 22 | return mPriority; 23 | } 24 | 25 | @Override 26 | public int compareTo(GeekPriorityComparable another) { 27 | if (null == another) { 28 | return 1; 29 | } 30 | return getGeekPriority().getPriorityValue() - another.getGeekPriority().getPriorityValue(); 31 | } 32 | 33 | @Override 34 | public boolean equals(Object obj) { 35 | return null != obj && obj instanceof GeekPriorityComparable && ((GeekPriorityComparable) obj).getGeekPriority() == getGeekPriority() && super.equals(obj); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /ThreadLibrary/src/main/java/com/geek/thread/task/GeekTask.java: -------------------------------------------------------------------------------- 1 | package com.geek.thread.task; 2 | 3 | import android.util.Log; 4 | 5 | import com.geek.thread.GeekThreadManager; 6 | import com.geek.thread.ThreadPriority; 7 | 8 | import java.util.concurrent.Callable; 9 | import java.util.concurrent.CancellationException; 10 | import java.util.concurrent.ExecutionException; 11 | import java.util.concurrent.FutureTask; 12 | 13 | /** 14 | * Created by aotuman on 2017/11/23. 15 | * 用来执行和存储线程的Task 16 | */ 17 | 18 | public class GeekTask extends FutureTask implements GeekPriorityComparable{ 19 | private static final String TAG = "GeekTask"; 20 | private ThreadPriority mPriority; 21 | 22 | private int mKey = -1; 23 | 24 | public GeekTask(Runnable r, T result, ThreadPriority priority) { 25 | super(r, result); 26 | this.mPriority = priority; 27 | } 28 | 29 | public void setKey(int key) { 30 | if (key >= 0) { 31 | this.mKey = key; 32 | } 33 | } 34 | 35 | @Override 36 | public void setGeekPriority(ThreadPriority priority) { 37 | this.mPriority = priority; 38 | } 39 | 40 | @Override 41 | public ThreadPriority getGeekPriority() { 42 | return mPriority; 43 | } 44 | 45 | @Override 46 | public int compareTo(GeekPriorityComparable geekPriorityComparable) { 47 | if (null == geekPriorityComparable) { 48 | return 1; 49 | } 50 | return getGeekPriority().getPriorityValue() - geekPriorityComparable.getGeekPriority().getPriorityValue(); 51 | } 52 | 53 | @Override 54 | public boolean equals(Object obj) { 55 | return null != obj && obj instanceof GeekPriorityComparable && ((GeekPriorityComparable) obj).getGeekPriority() == getGeekPriority() && super.equals(obj); 56 | } 57 | 58 | @Override 59 | protected void done() { 60 | try { 61 | get(); 62 | } catch (InterruptedException | CancellationException e) { 63 | Log.e(TAG, "done: ", e); 64 | } catch (ExecutionException e) { 65 | throw new RuntimeException("An error occurred while executing MJFutureTask", 66 | e.getCause()); 67 | } finally { 68 | GeekThreadManager.getInstance().removeWork(mKey); 69 | } 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /ThreadLibrary/src/main/java/com/geek/thread/task/GeekThread.java: -------------------------------------------------------------------------------- 1 | package com.geek.thread.task; 2 | 3 | import com.geek.thread.ThreadPriority; 4 | 5 | /** 6 | * Created by aotuman 7 | * the thread that can set priority 8 | */ 9 | public abstract class GeekThread extends Thread implements GeekPriorityComparable{ 10 | 11 | private ThreadPriority mPriority = ThreadPriority.LOW; 12 | 13 | public GeekThread(ThreadPriority priority) { 14 | this.mPriority = priority; 15 | } 16 | 17 | @Override 18 | public void setGeekPriority(ThreadPriority priority) { 19 | this.mPriority = priority; 20 | } 21 | 22 | @Override 23 | public ThreadPriority getGeekPriority() { 24 | return mPriority; 25 | } 26 | 27 | @Override 28 | public int compareTo(GeekPriorityComparable another) { 29 | if (null == another) { 30 | return 1; 31 | } 32 | return getGeekPriority().getPriorityValue() - another.getGeekPriority().getPriorityValue(); 33 | } 34 | 35 | @Override 36 | public boolean equals(Object obj) { 37 | return null != obj && obj instanceof GeekPriorityComparable && ((GeekPriorityComparable) obj).getGeekPriority() == getGeekPriority() && super.equals(obj); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /ThreadLibrary/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | ThreadLibrary 3 | 4 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/app.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 26 5 | defaultConfig { 6 | applicationId "com.aotuman.geek" 7 | minSdkVersion 14 8 | targetSdkVersion 26 9 | versionCode 1 10 | versionName "1.0" 11 | } 12 | buildTypes { 13 | release { 14 | minifyEnabled false 15 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 16 | } 17 | } 18 | } 19 | 20 | dependencies { 21 | implementation fileTree(dir: 'libs', include: ['*.jar']) 22 | implementation 'com.android.support.constraint:constraint-layout:1.0.2' 23 | implementation 'com.geek.thread:thread-pool:1.0.1' 24 | } 25 | -------------------------------------------------------------------------------- /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/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/aotuman/geek/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.aotuman.geek; 2 | 3 | import android.app.Activity; 4 | import android.os.Bundle; 5 | import android.os.Handler; 6 | import android.os.Message; 7 | import android.os.SystemClock; 8 | import android.widget.TextView; 9 | 10 | import com.geek.thread.GeekThreadManager; 11 | import com.geek.thread.GeekThreadPools; 12 | import com.geek.thread.ThreadPriority; 13 | import com.geek.thread.ThreadType; 14 | import com.geek.thread.task.GeekRunnable; 15 | 16 | import java.lang.ref.WeakReference; 17 | 18 | public class MainActivity extends Activity { 19 | private TextView tv1, tv2, tv3, tv4,tv5; 20 | private MyHandler myHandler = null; 21 | @Override 22 | protected void onCreate(Bundle savedInstanceState) { 23 | super.onCreate(savedInstanceState); 24 | setContentView(R.layout.activity_main); 25 | tv1 = findViewById(R.id.text_1); 26 | tv2 = findViewById(R.id.text_2); 27 | tv3 = findViewById(R.id.text_3); 28 | tv4 = findViewById(R.id.text_4); 29 | tv5 = findViewById(R.id.text_5); 30 | initData(); 31 | } 32 | private int id; 33 | private void initData() { 34 | myHandler = new MyHandler(new WeakReference<>(this)); 35 | 36 | id = GeekThreadPools.executeWithGeekThreadPool(new Runnable() { 37 | @Override 38 | public void run() { 39 | for (int i = 0; i < 100; i++) { 40 | Message message = myHandler.obtainMessage(); 41 | message.arg1 = i; 42 | message.what = 4; 43 | myHandler.sendMessage(message); 44 | SystemClock.sleep(500); 45 | if(i > 20){ 46 | GeekThreadManager.getInstance().cancelWork(id); 47 | } 48 | } 49 | } 50 | }); 51 | 52 | GeekThreadManager.getInstance().execute(new GeekRunnable(ThreadPriority.LOW) { 53 | @Override 54 | public void run() { 55 | for (int i = 0; i < 100; i++) { 56 | Message message = myHandler.obtainMessage(); 57 | message.arg1 = i; 58 | message.what = 0; 59 | myHandler.sendMessage(message); 60 | SystemClock.sleep(500); 61 | } 62 | } 63 | }, ThreadType.NORMAL_THREAD); 64 | 65 | GeekThreadManager.getInstance().execute(new GeekRunnable(ThreadPriority.HIGH) { 66 | @Override 67 | public void run() { 68 | for (int i = 0; i < 100; i++) { 69 | Message message = myHandler.obtainMessage(); 70 | message.arg1 = i; 71 | message.what = 1; 72 | myHandler.sendMessage(message); 73 | SystemClock.sleep(500); 74 | } 75 | } 76 | }, ThreadType.NORMAL_THREAD); 77 | 78 | GeekThreadManager.getInstance().execute(new GeekRunnable(ThreadPriority.HIGH) { 79 | @Override 80 | public void run() { 81 | for (int i = 0; i < 20; i++) { 82 | Message message = myHandler.obtainMessage(); 83 | message.arg1 = i; 84 | message.what = 2; 85 | myHandler.sendMessage(message); 86 | SystemClock.sleep(500); 87 | } 88 | } 89 | }, ThreadType.NORMAL_THREAD); 90 | 91 | GeekThreadManager.getInstance().execute(new GeekRunnable(ThreadPriority.HIGH) { 92 | @Override 93 | public void run() { 94 | for (int i = 0; i < 20; i++) { 95 | Message message = myHandler.obtainMessage(); 96 | message.arg1 = i; 97 | message.what = 3; 98 | myHandler.sendMessage(message); 99 | SystemClock.sleep(500); 100 | } 101 | } 102 | }, ThreadType.NORMAL_THREAD); 103 | } 104 | 105 | private static class MyHandler extends Handler { 106 | private WeakReference mActivity; 107 | 108 | public MyHandler(WeakReference weakReference) { 109 | mActivity = weakReference; 110 | } 111 | 112 | @Override 113 | public void handleMessage(Message msg) { 114 | super.handleMessage(msg); 115 | if (null != mActivity.get()) { 116 | MainActivity activity = mActivity.get(); 117 | String str = String.valueOf(msg.arg1); 118 | switch (msg.what) { 119 | case 0: 120 | activity.tv1.setText(str); 121 | break; 122 | case 1: 123 | activity.tv2.setText(str); 124 | break; 125 | case 2: 126 | activity.tv3.setText(str); 127 | break; 128 | case 3: 129 | activity.tv4.setText(str); 130 | break; 131 | case 4: 132 | activity.tv5.setText(str); 133 | break; 134 | 135 | } 136 | } 137 | } 138 | } 139 | } 140 | -------------------------------------------------------------------------------- /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 | 6 | 7 | 12 | 13 | 18 | 19 | 24 | 25 | 30 | 31 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /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/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnlyTerminator/GeekThread/d483edfb219694851f1f8d54da3226731c373612/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnlyTerminator/GeekThread/d483edfb219694851f1f8d54da3226731c373612/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnlyTerminator/GeekThread/d483edfb219694851f1f8d54da3226731c373612/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnlyTerminator/GeekThread/d483edfb219694851f1f8d54da3226731c373612/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnlyTerminator/GeekThread/d483edfb219694851f1f8d54da3226731c373612/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnlyTerminator/GeekThread/d483edfb219694851f1f8d54da3226731c373612/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnlyTerminator/GeekThread/d483edfb219694851f1f8d54da3226731c373612/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnlyTerminator/GeekThread/d483edfb219694851f1f8d54da3226731c373612/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnlyTerminator/GeekThread/d483edfb219694851f1f8d54da3226731c373612/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnlyTerminator/GeekThread/d483edfb219694851f1f8d54da3226731c373612/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3F51B5 4 | #303F9F 5 | #FF4081 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | GeekThread 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | 5 | repositories { 6 | google() 7 | jcenter() 8 | } 9 | dependencies { 10 | classpath 'com.android.tools.build:gradle:3.0.0' 11 | 12 | 13 | // NOTE: Do not place your application dependencies here; they belong 14 | // in the individual module build.gradle files 15 | } 16 | } 17 | 18 | allprojects { 19 | repositories { 20 | google() 21 | jcenter() 22 | } 23 | } 24 | 25 | task clean(type: Delete) { 26 | delete rootProject.buildDir 27 | } 28 | -------------------------------------------------------------------------------- /build/android-profile/profile-2017-12-01-21-05-02-137.json: -------------------------------------------------------------------------------- 1 | [{"pid":0,"ph":"i","name":"Memory sample","ts":1512133499903000,"args":{"JVM stats":"heap_memory_usage: 199825096\nnon_heap_memory_usage: 108654216\nloaded_class_count: 13837\nthread_count: 33\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133500379000,"args":{"JVM stats":"heap_memory_usage: 218596776\nnon_heap_memory_usage: 109542496\nloaded_class_count: 13881\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133500445000,"args":{"JVM stats":"heap_memory_usage: 219386368\nnon_heap_memory_usage: 109584056\nloaded_class_count: 13881\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133500648000,"args":{"JVM stats":"heap_memory_usage: 220965720\nnon_heap_memory_usage: 109603896\nloaded_class_count: 13882\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133500653000,"args":{"JVM stats":"heap_memory_usage: 220965720\nnon_heap_memory_usage: 109603896\nloaded_class_count: 13882\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133500657000,"args":{"JVM stats":"heap_memory_usage: 220965720\nnon_heap_memory_usage: 109604728\nloaded_class_count: 13882\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133500681000,"args":{"JVM stats":"heap_memory_usage: 221491640\nnon_heap_memory_usage: 109651656\nloaded_class_count: 13889\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133500691000,"args":{"JVM stats":"heap_memory_usage: 221491640\nnon_heap_memory_usage: 109711312\nloaded_class_count: 13894\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133500693000,"args":{"JVM stats":"heap_memory_usage: 221754904\nnon_heap_memory_usage: 109692440\nloaded_class_count: 13894\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133500704000,"args":{"JVM stats":"heap_memory_usage: 221754904\nnon_heap_memory_usage: 109703720\nloaded_class_count: 13894\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133500706000,"args":{"JVM stats":"heap_memory_usage: 221754904\nnon_heap_memory_usage: 109704136\nloaded_class_count: 13894\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133500708000,"args":{"JVM stats":"heap_memory_usage: 221754904\nnon_heap_memory_usage: 109711496\nloaded_class_count: 13894\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133500709000,"args":{"JVM stats":"heap_memory_usage: 221754904\nnon_heap_memory_usage: 109715400\nloaded_class_count: 13894\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133500737000,"args":{"JVM stats":"heap_memory_usage: 222808752\nnon_heap_memory_usage: 109765744\nloaded_class_count: 13895\nthread_count: 37\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133500774000,"args":{"JVM stats":"heap_memory_usage: 227025208\nnon_heap_memory_usage: 109870688\nloaded_class_count: 13900\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133500775000,"args":{"JVM stats":"heap_memory_usage: 227025208\nnon_heap_memory_usage: 109870688\nloaded_class_count: 13900\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133500789000,"args":{"JVM stats":"heap_memory_usage: 227551096\nnon_heap_memory_usage: 109888080\nloaded_class_count: 13900\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133500792000,"args":{"JVM stats":"heap_memory_usage: 227551096\nnon_heap_memory_usage: 109895640\nloaded_class_count: 13901\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133500831000,"args":{"JVM stats":"heap_memory_usage: 229393512\nnon_heap_memory_usage: 109969224\nloaded_class_count: 13905\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133500840000,"args":{"JVM stats":"heap_memory_usage: 229393512\nnon_heap_memory_usage: 109985832\nloaded_class_count: 13905\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133500852000,"args":{"JVM stats":"heap_memory_usage: 229656544\nnon_heap_memory_usage: 110005824\nloaded_class_count: 13905\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133500854000,"args":{"JVM stats":"heap_memory_usage: 229656544\nnon_heap_memory_usage: 110007160\nloaded_class_count: 13905\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133500855000,"args":{"JVM stats":"heap_memory_usage: 229656544\nnon_heap_memory_usage: 110012344\nloaded_class_count: 13905\nthread_count: 38\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133500901000,"args":{"JVM stats":"heap_memory_usage: 234352296\nnon_heap_memory_usage: 110059792\nloaded_class_count: 13905\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133500905000,"args":{"JVM stats":"heap_memory_usage: 234615240\nnon_heap_memory_usage: 110065928\nloaded_class_count: 13906\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133500949000,"args":{"JVM stats":"heap_memory_usage: 236998320\nnon_heap_memory_usage: 110112656\nloaded_class_count: 13906\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133500951000,"args":{"JVM stats":"heap_memory_usage: 236998320\nnon_heap_memory_usage: 110113488\nloaded_class_count: 13906\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133501212000,"args":{"JVM stats":"heap_memory_usage: 81510176\nnon_heap_memory_usage: 110210048\nloaded_class_count: 13906\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 1\n gc_time: 61\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133501213000,"args":{"JVM stats":"heap_memory_usage: 84406816\nnon_heap_memory_usage: 110206080\nloaded_class_count: 13906\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133501216000,"args":{"JVM stats":"heap_memory_usage: 84551352\nnon_heap_memory_usage: 110211072\nloaded_class_count: 13906\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133501218000,"args":{"JVM stats":"heap_memory_usage: 84551352\nnon_heap_memory_usage: 110215488\nloaded_class_count: 13906\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133501241000,"args":{"JVM stats":"heap_memory_usage: 85085336\nnon_heap_memory_usage: 110239672\nloaded_class_count: 13906\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133501256000,"args":{"JVM stats":"heap_memory_usage: 85085336\nnon_heap_memory_usage: 110260744\nloaded_class_count: 13906\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133501262000,"args":{"JVM stats":"heap_memory_usage: 85229848\nnon_heap_memory_usage: 110260744\nloaded_class_count: 13906\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133501267000,"args":{"JVM stats":"heap_memory_usage: 85229848\nnon_heap_memory_usage: 110264568\nloaded_class_count: 13906\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133501274000,"args":{"JVM stats":"heap_memory_usage: 85229848\nnon_heap_memory_usage: 110285136\nloaded_class_count: 13906\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133501276000,"args":{"JVM stats":"heap_memory_usage: 85229848\nnon_heap_memory_usage: 110331280\nloaded_class_count: 13906\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133501278000,"args":{"JVM stats":"heap_memory_usage: 85229848\nnon_heap_memory_usage: 110338808\nloaded_class_count: 13906\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133501278001,"args":{"JVM stats":"heap_memory_usage: 85229848\nnon_heap_memory_usage: 110338808\nloaded_class_count: 13906\nthread_count: 39\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133501475000,"args":{"JVM stats":"heap_memory_usage: 110943488\nnon_heap_memory_usage: 110704504\nloaded_class_count: 13907\nthread_count: 43\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133501482000,"args":{"JVM stats":"heap_memory_usage: 111411832\nnon_heap_memory_usage: 110730024\nloaded_class_count: 13909\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133501553000,"args":{"JVM stats":"heap_memory_usage: 111704968\nnon_heap_memory_usage: 110836472\nloaded_class_count: 13912\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133501563000,"args":{"JVM stats":"heap_memory_usage: 111717304\nnon_heap_memory_usage: 110841888\nloaded_class_count: 13912\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133501772000,"args":{"JVM stats":"heap_memory_usage: 116103624\nnon_heap_memory_usage: 110953488\nloaded_class_count: 13913\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133501773000,"args":{"JVM stats":"heap_memory_usage: 116248136\nnon_heap_memory_usage: 110953488\nloaded_class_count: 13913\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133501792000,"args":{"JVM stats":"heap_memory_usage: 116392680\nnon_heap_memory_usage: 110918520\nloaded_class_count: 13914\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133501809000,"args":{"JVM stats":"heap_memory_usage: 116392680\nnon_heap_memory_usage: 110833800\nloaded_class_count: 13917\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133501836000,"args":{"JVM stats":"heap_memory_usage: 119207912\nnon_heap_memory_usage: 110940736\nloaded_class_count: 13917\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133501848000,"args":{"JVM stats":"heap_memory_usage: 119352424\nnon_heap_memory_usage: 110986000\nloaded_class_count: 13928\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133501859000,"args":{"JVM stats":"heap_memory_usage: 119507824\nnon_heap_memory_usage: 111014488\nloaded_class_count: 13937\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133501864000,"args":{"JVM stats":"heap_memory_usage: 119507824\nnon_heap_memory_usage: 111017552\nloaded_class_count: 13938\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133501864001,"args":{"JVM stats":"heap_memory_usage: 119507824\nnon_heap_memory_usage: 111017552\nloaded_class_count: 13938\nthread_count: 44\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133501931000,"args":{"JVM stats":"heap_memory_usage: 123387136\nnon_heap_memory_usage: 111178848\nloaded_class_count: 13948\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133501939000,"args":{"JVM stats":"heap_memory_usage: 123839528\nnon_heap_memory_usage: 111183168\nloaded_class_count: 13948\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133502112000,"args":{"JVM stats":"heap_memory_usage: 126776920\nnon_heap_memory_usage: 111373128\nloaded_class_count: 13975\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133502115000,"args":{"JVM stats":"heap_memory_usage: 126925544\nnon_heap_memory_usage: 111377672\nloaded_class_count: 13975\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133502118000,"args":{"JVM stats":"heap_memory_usage: 126929656\nnon_heap_memory_usage: 111379784\nloaded_class_count: 13975\nthread_count: 45\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":0,"ph":"i","name":"Memory sample","ts":1512133502137000,"args":{"JVM stats":"heap_memory_usage: 126929656\nnon_heap_memory_usage: 111383792\nloaded_class_count: 13975\nthread_count: 41\ngarbage_collection_stats {\n name: \"PS Scavenge\"\n gc_collections: 0\n gc_time: 0\n}\ngarbage_collection_stats {\n name: \"PS MarkSweep\"\n gc_collections: 0\n gc_time: 0\n}\n"}},{"pid":1,"tid":1,"id":2,"name":"base plugin project configure","args":{"span_id":"2","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1512133499904000,"dur":10000},{"pid":1,"tid":1,"id":3,"name":"base plugin project base extension creation","args":{"span_id":"3","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1512133499914000,"dur":7000},{"pid":1,"tid":1,"id":5,"name":"task manager create tasks","args":{"span_id":"5","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1512133499921000,"dur":9000},{"pid":1,"tid":1,"id":4,"name":"base plugin project tasks creation","args":{"span_id":"4","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1512133499921000,"dur":9000},{"pid":1,"tid":1,"id":8,"name":"variant manager create variants","args":{"span_id":"8","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1512133499987000,"dur":9000},{"pid":1,"tid":1,"id":9,"name":"variant manager create tests tasks","args":{"span_id":"9","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1512133499996000,"dur":3000},{"pid":1,"tid":1,"id":11,"name":"lib task manager create generate res values task","args":{"span_id":"11","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500005000,"dur":2000},{"pid":1,"tid":1,"id":12,"name":"lib task manager create merge manifest task","args":{"span_id":"12","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500007000,"dur":3000},{"pid":1,"tid":1,"id":13,"name":"lib task manager create create renderscript task","args":{"span_id":"13","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500010000,"dur":3000},{"pid":1,"tid":1,"id":14,"name":"lib task manager create merge resources task","args":{"span_id":"14","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500013000,"dur":4000},{"pid":1,"tid":1,"id":15,"name":"lib task manager create merge assets task","args":{"span_id":"15","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500017000,"dur":2000},{"pid":1,"tid":1,"id":16,"name":"lib task manager create build config task","args":{"span_id":"16","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500019000,"dur":1000},{"pid":1,"tid":1,"id":17,"name":"lib task manager create process res task","args":{"span_id":"17","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500020000,"dur":17000},{"pid":1,"tid":1,"id":18,"name":"lib task manager create aidl task","args":{"span_id":"18","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500037000,"dur":4000},{"pid":1,"tid":1,"id":19,"name":"lib task manager create shader task","args":{"span_id":"19","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500041000,"dur":2000},{"pid":1,"tid":1,"id":20,"name":"lib task manager create compile task","args":{"span_id":"20","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500044000,"dur":8000},{"pid":1,"tid":1,"id":21,"name":"lib task manager create ndk task","args":{"span_id":"21","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500052000,"dur":1000},{"pid":1,"tid":1,"id":22,"name":"lib task manager create external native build task","args":{"span_id":"22","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500053000,"dur":100},{"pid":1,"tid":1,"id":23,"name":"lib task manager create packaging task","args":{"span_id":"23","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500055000,"dur":1000},{"pid":1,"tid":1,"id":24,"name":"lib task manager create merge proguard file task","args":{"span_id":"24","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500056000,"dur":1000},{"pid":1,"tid":1,"id":25,"name":"lib task manager create post compilation task","args":{"span_id":"25","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500062000,"dur":10000},{"pid":1,"tid":1,"id":26,"name":"lib task manager create lint task","args":{"span_id":"26","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500072000,"dur":100},{"pid":1,"tid":1,"id":10,"name":"variant manager create tasks for variant","args":{"span_id":"10","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133499999000,"dur":73000},{"pid":1,"tid":1,"id":27,"name":"variant manager create tasks for variant","args":{"span_id":"27","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1512133500072000,"dur":6000},{"pid":1,"tid":1,"id":29,"name":"lib task manager create generate res values task","args":{"span_id":"29","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500079000,"dur":100},{"pid":1,"tid":1,"id":30,"name":"lib task manager create merge manifest task","args":{"span_id":"30","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500079000,"dur":1000},{"pid":1,"tid":1,"id":31,"name":"lib task manager create create renderscript task","args":{"span_id":"31","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500080000,"dur":100},{"pid":1,"tid":1,"id":32,"name":"lib task manager create merge resources task","args":{"span_id":"32","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500083000,"dur":5000},{"pid":1,"tid":1,"id":33,"name":"lib task manager create merge assets task","args":{"span_id":"33","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500088000,"dur":1000},{"pid":1,"tid":1,"id":34,"name":"lib task manager create build config task","args":{"span_id":"34","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500089000,"dur":100},{"pid":1,"tid":1,"id":35,"name":"lib task manager create process res task","args":{"span_id":"35","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500089000,"dur":3000},{"pid":1,"tid":1,"id":36,"name":"lib task manager create aidl task","args":{"span_id":"36","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500092000,"dur":100},{"pid":1,"tid":1,"id":37,"name":"lib task manager create shader task","args":{"span_id":"37","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500092000,"dur":100},{"pid":1,"tid":1,"id":38,"name":"lib task manager create compile task","args":{"span_id":"38","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500092000,"dur":2000},{"pid":1,"tid":1,"id":39,"name":"lib task manager create ndk task","args":{"span_id":"39","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500094000,"dur":100},{"pid":1,"tid":1,"id":40,"name":"lib task manager create external native build task","args":{"span_id":"40","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500094000,"dur":100},{"pid":1,"tid":1,"id":41,"name":"lib task manager create packaging task","args":{"span_id":"41","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500095000,"dur":100},{"pid":1,"tid":1,"id":42,"name":"lib task manager create merge proguard file task","args":{"span_id":"42","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500095000,"dur":100},{"pid":1,"tid":1,"id":43,"name":"lib task manager create post compilation task","args":{"span_id":"43","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500096000,"dur":9000},{"pid":1,"tid":1,"id":44,"name":"lib task manager create lint task","args":{"span_id":"44","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500105000,"dur":1000},{"pid":1,"tid":1,"id":28,"name":"variant manager create tasks for variant","args":{"span_id":"28","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500078000,"dur":28000},{"pid":1,"tid":1,"id":45,"name":"variant manager create tasks for variant","args":{"span_id":"45","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1512133500106000,"dur":7000},{"pid":1,"tid":1,"id":46,"name":"variant manager create tasks for variant","args":{"span_id":"46","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1512133500114000,"dur":20000},{"pid":1,"tid":1,"id":7,"name":"variant manager create android tasks","args":{"span_id":"7","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1512133499987000,"dur":149000},{"pid":1,"tid":1,"id":47,"name":"variant manager external native config values","args":{"span_id":"47","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1512133500137000,"dur":100},{"pid":1,"tid":1,"id":6,"name":"base plugin create android tasks","args":{"span_id":"6","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1512133499932000,"dur":205000},{"pid":1,"tid":1,"id":48,"name":"base plugin project configure","args":{"span_id":"48","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1512133500152000,"dur":9000},{"pid":1,"tid":1,"id":49,"name":"base plugin project base extension creation","args":{"span_id":"49","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1512133500161000,"dur":16000},{"pid":1,"tid":1,"id":51,"name":"task manager create tasks","args":{"span_id":"51","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1512133500177000,"dur":1000},{"pid":1,"tid":1,"id":50,"name":"base plugin project tasks creation","args":{"span_id":"50","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1512133500177000,"dur":1000},{"pid":1,"tid":1,"id":54,"name":"variant manager create variants","args":{"span_id":"54","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1512133500182000,"dur":8000},{"pid":1,"tid":1,"id":55,"name":"variant manager create tests tasks","args":{"span_id":"55","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1512133500190000,"dur":100},{"pid":1,"tid":1,"id":57,"name":"app task manager create merge manifest task","args":{"span_id":"57","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500193000,"dur":1000},{"pid":1,"tid":1,"id":58,"name":"app task manager create generate res values task","args":{"span_id":"58","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500194000,"dur":1000},{"pid":1,"tid":1,"id":59,"name":"app task manager create create renderscript task","args":{"span_id":"59","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500195000,"dur":100},{"pid":1,"tid":1,"id":60,"name":"app task manager create merge resources task","args":{"span_id":"60","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500195000,"dur":1000},{"pid":1,"tid":1,"id":61,"name":"app task manager create merge assets task","args":{"span_id":"61","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500196000,"dur":100},{"pid":1,"tid":1,"id":62,"name":"app task manager create build config task","args":{"span_id":"62","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500196000,"dur":2000},{"pid":1,"tid":1,"id":63,"name":"app task manager create process res task","args":{"span_id":"63","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500198000,"dur":9000},{"pid":1,"tid":1,"id":64,"name":"app task manager create aidl task","args":{"span_id":"64","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500207000,"dur":1000},{"pid":1,"tid":1,"id":65,"name":"app task manager create shader task","args":{"span_id":"65","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500208000,"dur":1000},{"pid":1,"tid":1,"id":66,"name":"app task manager create ndk task","args":{"span_id":"66","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500209000,"dur":100},{"pid":1,"tid":1,"id":67,"name":"app task manager create external native build task","args":{"span_id":"67","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500209000,"dur":100},{"pid":1,"tid":1,"id":68,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"68","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500209000,"dur":1000},{"pid":1,"tid":1,"id":69,"name":"app task manager create compile task","args":{"span_id":"69","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500210000,"dur":3000},{"pid":1,"tid":1,"id":70,"name":"app task manager create packaging task","args":{"span_id":"70","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500213000,"dur":1000},{"pid":1,"tid":1,"id":71,"name":"app task manager create lint task","args":{"span_id":"71","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500214000,"dur":100},{"pid":1,"tid":1,"id":56,"name":"variant manager create tasks for variant","args":{"span_id":"56","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500190000,"dur":24000},{"pid":1,"tid":1,"id":72,"name":"variant manager create tasks for variant","args":{"span_id":"72","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1512133500214000,"dur":8000},{"pid":1,"tid":1,"id":74,"name":"app task manager create merge manifest task","args":{"span_id":"74","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500223000,"dur":2000},{"pid":1,"tid":1,"id":75,"name":"app task manager create generate res values task","args":{"span_id":"75","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500225000,"dur":1000},{"pid":1,"tid":1,"id":76,"name":"app task manager create create renderscript task","args":{"span_id":"76","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500226000,"dur":100},{"pid":1,"tid":1,"id":77,"name":"app task manager create merge resources task","args":{"span_id":"77","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500226000,"dur":1000},{"pid":1,"tid":1,"id":78,"name":"app task manager create merge assets task","args":{"span_id":"78","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500228000,"dur":100},{"pid":1,"tid":1,"id":79,"name":"app task manager create build config task","args":{"span_id":"79","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500228000,"dur":100},{"pid":1,"tid":1,"id":80,"name":"app task manager create process res task","args":{"span_id":"80","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500228000,"dur":1000},{"pid":1,"tid":1,"id":81,"name":"app task manager create aidl task","args":{"span_id":"81","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500229000,"dur":1000},{"pid":1,"tid":1,"id":82,"name":"app task manager create shader task","args":{"span_id":"82","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500230000,"dur":100},{"pid":1,"tid":1,"id":83,"name":"app task manager create ndk task","args":{"span_id":"83","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500230000,"dur":100},{"pid":1,"tid":1,"id":84,"name":"app task manager create external native build task","args":{"span_id":"84","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500230000,"dur":100},{"pid":1,"tid":1,"id":85,"name":"app task manager create merge jnilibs folders task","args":{"span_id":"85","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500230000,"dur":1000},{"pid":1,"tid":1,"id":86,"name":"app task manager create compile task","args":{"span_id":"86","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500231000,"dur":6000},{"pid":1,"tid":1,"id":87,"name":"app task manager create packaging task","args":{"span_id":"87","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500238000,"dur":2000},{"pid":1,"tid":1,"id":88,"name":"app task manager create lint task","args":{"span_id":"88","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500240000,"dur":2000},{"pid":1,"tid":1,"id":73,"name":"variant manager create tasks for variant","args":{"span_id":"73","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 2\nis_debug: false\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n"},"ph":"X","ts":1512133500222000,"dur":20000},{"pid":1,"tid":1,"id":89,"name":"variant manager create tasks for variant","args":{"span_id":"89","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1512133500242000,"dur":12000},{"pid":1,"tid":1,"id":90,"name":"variant manager create tasks for variant","args":{"span_id":"90","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1512133500254000,"dur":18000},{"pid":1,"tid":1,"id":53,"name":"variant manager create android tasks","args":{"span_id":"53","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1512133500182000,"dur":91000},{"pid":1,"tid":1,"id":91,"name":"variant manager external native config values","args":{"span_id":"91","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1512133500273000,"dur":100},{"pid":1,"tid":1,"id":52,"name":"base plugin create android tasks","args":{"span_id":"52","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1512133500179000,"dur":95000},{"pid":1,"tid":0,"id":92,"name":"task: delete","args":{"span_id":"92","task":"type: 104\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133500366000,"dur":12000},{"pid":1,"tid":0,"id":93,"name":"task: delete","args":{"span_id":"93","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 104\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133500381000,"dur":64000},{"pid":1,"tid":0,"id":94,"name":"task: delete","args":{"span_id":"94","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 104\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133500449000,"dur":199000},{"pid":1,"tid":0,"id":95,"name":"task: unknown task type","args":{"span_id":"95","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1512133500651000,"dur":2000},{"pid":1,"tid":0,"id":96,"name":"task: unknown task type","args":{"span_id":"96","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1512133500655000,"dur":1000},{"pid":1,"tid":0,"id":97,"name":"task: aidl compile","args":{"span_id":"97","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133500658000,"dur":22000},{"pid":1,"tid":0,"id":98,"name":"task: renderscript compile","args":{"span_id":"98","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1512133500684000,"dur":7000},{"pid":1,"tid":0,"id":99,"name":"task: check manifest","args":{"span_id":"99","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1512133500692000,"dur":1000},{"pid":1,"tid":0,"id":100,"name":"task: generate build config","args":{"span_id":"100","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133500694000,"dur":10000},{"pid":1,"tid":0,"id":101,"name":"task: prepare lint jar","args":{"span_id":"101","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1512133500705000,"dur":1000},{"pid":1,"tid":0,"id":102,"name":"task: generate res values","args":{"span_id":"102","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1512133500707000,"dur":1000},{"pid":1,"tid":0,"id":103,"name":"task: unknown task type","args":{"span_id":"103","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1512133500709000,"dur":100},{"pid":1,"tid":0,"id":104,"name":"task: merge resources","args":{"span_id":"104","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133500710000,"dur":27000},{"pid":1,"tid":0,"id":106,"name":"task: process manifest","args":{"span_id":"106","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 52\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133500748000,"dur":26000},{"pid":1,"tid":0,"id":107,"name":"task: unknown task type","args":{"span_id":"107","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1512133500774000,"dur":1000},{"pid":1,"tid":0,"id":108,"name":"task: aidl compile","args":{"span_id":"108","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 1\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133500776000,"dur":12000},{"pid":1,"tid":0,"id":109,"name":"task: unknown task type","args":{"span_id":"109","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133500790000,"dur":2000},{"pid":1,"tid":0,"id":110,"name":"task: process test manifest","args":{"span_id":"110","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 53\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133500796000,"dur":35000},{"pid":1,"tid":0,"id":111,"name":"task: renderscript compile","args":{"span_id":"111","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1512133500834000,"dur":6000},{"pid":1,"tid":0,"id":112,"name":"task: generate build config","args":{"span_id":"112","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 24\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133500841000,"dur":11000},{"pid":1,"tid":0,"id":113,"name":"task: generate res values","args":{"span_id":"113","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1512133500853000,"dur":1000},{"pid":1,"tid":0,"id":114,"name":"task: unknown task type","args":{"span_id":"114","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1512133500855000,"dur":100},{"pid":1,"tid":0,"id":115,"name":"task: merge resources","args":{"span_id":"115","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133500857000,"dur":44000},{"pid":1,"tid":0,"id":105,"name":"task: platform attr extractor","args":{"span_id":"105","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 109\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133500739000,"dur":165000},{"pid":1,"tid":0,"id":116,"name":"task: process android resources","args":{"span_id":"116","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: LIBRARY\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133500908000,"dur":41000},{"pid":1,"tid":0,"id":117,"name":"task: unknown task type","args":{"span_id":"117","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133500951000,"dur":100},{"pid":1,"tid":0,"id":118,"name":"task: process android resources","args":{"span_id":"118","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133500954000,"dur":258000},{"pid":1,"tid":0,"id":119,"name":"task: unknown task type","args":{"span_id":"119","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133501212000,"dur":100},{"pid":1,"tid":0,"id":120,"name":"task: mockable android jar","args":{"span_id":"120","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 42\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1512133501213000,"dur":3000},{"pid":1,"tid":0,"id":121,"name":"task: unknown task type","args":{"span_id":"121","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1512133501217000,"dur":1000},{"pid":1,"tid":0,"id":122,"name":"task: app pre build","args":{"span_id":"122","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 92\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1512133501220000,"dur":21000},{"pid":1,"tid":0,"id":123,"name":"task: aidl compile","args":{"span_id":"123","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 1\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133501243000,"dur":13000},{"pid":1,"tid":0,"id":124,"name":"task: renderscript compile","args":{"span_id":"124","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1512133501258000,"dur":3000},{"pid":1,"tid":0,"id":125,"name":"task: check manifest","args":{"span_id":"125","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 8\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1512133501263000,"dur":3000},{"pid":1,"tid":0,"id":126,"name":"task: generate build config","args":{"span_id":"126","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 24\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133501269000,"dur":5000},{"pid":1,"tid":0,"id":127,"name":"task: prepare lint jar","args":{"span_id":"127","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 119\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1512133501275000,"dur":1000},{"pid":1,"tid":0,"id":128,"name":"task: generate res values","args":{"span_id":"128","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1512133501277000,"dur":100},{"pid":1,"tid":0,"id":129,"name":"task: unknown task type","args":{"span_id":"129","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1512133501278000,"dur":100},{"pid":1,"tid":0,"id":130,"name":"task: merge resources","args":{"span_id":"130","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133501280000,"dur":195000},{"pid":1,"tid":0,"id":131,"name":"task: compatible screens manifest","args":{"span_id":"131","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 9\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133501476000,"dur":5000},{"pid":1,"tid":0,"id":132,"name":"task: merge manifests","args":{"span_id":"132","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 39\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133501485000,"dur":67000},{"pid":1,"tid":0,"id":133,"name":"task: splits discovery","args":{"span_id":"133","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 87\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133501555000,"dur":7000},{"pid":1,"tid":0,"id":134,"name":"task: process android resources","args":{"span_id":"134","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","variant":"id: 1\nis_debug: true\nminify_enabled: false\nuse_multidex: false\nuse_legacy_multidex: false\nvariant_type: APPLICATION\nmin_sdk_version {\n api_level: 14\n}\ntarget_sdk_version {\n api_level: 26\n}\ndex_builder: DX_DEXER\ndex_merger: DX_MERGER\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133501569000,"dur":203000},{"pid":1,"tid":0,"id":135,"name":"task: unknown task type","args":{"span_id":"135","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133501773000,"dur":100},{"pid":1,"tid":0,"id":136,"name":"task: test pre build","args":{"span_id":"136","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 93\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1512133501776000,"dur":16000},{"pid":1,"tid":0,"id":137,"name":"task: aidl compile","args":{"span_id":"137","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 1\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133501793000,"dur":16000},{"pid":1,"tid":0,"id":138,"name":"task: process test manifest","args":{"span_id":"138","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 53\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133501811000,"dur":25000},{"pid":1,"tid":0,"id":139,"name":"task: renderscript compile","args":{"span_id":"139","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 54\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1512133501838000,"dur":10000},{"pid":1,"tid":0,"id":140,"name":"task: generate build config","args":{"span_id":"140","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 24\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133501851000,"dur":8000},{"pid":1,"tid":0,"id":141,"name":"task: generate res values","args":{"span_id":"141","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 26\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1512133501861000,"dur":2000},{"pid":1,"tid":0,"id":142,"name":"task: unknown task type","args":{"span_id":"142","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1512133501864000,"dur":100},{"pid":1,"tid":0,"id":143,"name":"task: merge resources","args":{"span_id":"143","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 40\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133501866000,"dur":65000},{"pid":1,"tid":0,"id":144,"name":"task: splits discovery","args":{"span_id":"144","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 87\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133501933000,"dur":5000},{"pid":1,"tid":0,"id":145,"name":"task: process android resources","args":{"span_id":"145","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 51\ndid_work: true\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133501940000,"dur":172000},{"pid":1,"tid":0,"id":146,"name":"task: unknown task type","args":{"span_id":"146","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 0\ndid_work: false\nskipped: false\nup_to_date: false\nfailed: false\n"},"ph":"X","ts":1512133502114000,"dur":100},{"pid":1,"tid":0,"id":147,"name":"task: mockable android jar","args":{"span_id":"147","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n","task":"type: 42\ndid_work: false\nskipped: true\nup_to_date: true\nfailed: false\n"},"ph":"X","ts":1512133502116000,"dur":1000},{"pid":1,"tid":1,"id":148,"name":"base plugin build finished","args":{"span_id":"148","project":"id: 1\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: LIBRARY\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1512133502123000,"dur":1000},{"pid":1,"tid":1,"id":149,"name":"base plugin build finished","args":{"span_id":"149","project":"id: 2\nandroid_plugin_version: \"3.0.0\"\nandroid_plugin: APPLICATION\nplugin_generation: FIRST\nbuild_tools_version: \"26.0.2\"\ncompile_sdk: \"android-26\"\nsplits {\n}\n"},"ph":"X","ts":1512133502124000,"dur":1000}] -------------------------------------------------------------------------------- /build/android-profile/profile-2017-12-01-21-05-02-137.rawproto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnlyTerminator/GeekThread/d483edfb219694851f1f8d54da3226731c373612/build/android-profile/profile-2017-12-01-21-05-02-137.rawproto -------------------------------------------------------------------------------- /build/android-profile/profile-2017-12-01-21-05-43-256.rawproto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnlyTerminator/GeekThread/d483edfb219694851f1f8d54da3226731c373612/build/android-profile/profile-2017-12-01-21-05-43-256.rawproto -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | org.gradle.jvmargs=-Xmx1536m 13 | 14 | # When configured, Gradle will run in incubating parallel mode. 15 | # This option should only be used with decoupled projects. More details, visit 16 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 17 | # org.gradle.parallel=true 18 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OnlyTerminator/GeekThread/d483edfb219694851f1f8d54da3226731c373612/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Thu Nov 23 21:50:14 CST 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip 7 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ############################################################################## 4 | ## 5 | ## Gradle start up script for UN*X 6 | ## 7 | ############################################################################## 8 | 9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 10 | DEFAULT_JVM_OPTS="" 11 | 12 | APP_NAME="Gradle" 13 | APP_BASE_NAME=`basename "$0"` 14 | 15 | # Use the maximum available, or set MAX_FD != -1 to use that value. 16 | MAX_FD="maximum" 17 | 18 | warn ( ) { 19 | echo "$*" 20 | } 21 | 22 | die ( ) { 23 | echo 24 | echo "$*" 25 | echo 26 | exit 1 27 | } 28 | 29 | # OS specific support (must be 'true' or 'false'). 30 | cygwin=false 31 | msys=false 32 | darwin=false 33 | case "`uname`" in 34 | CYGWIN* ) 35 | cygwin=true 36 | ;; 37 | Darwin* ) 38 | darwin=true 39 | ;; 40 | MINGW* ) 41 | msys=true 42 | ;; 43 | esac 44 | 45 | # Attempt to set APP_HOME 46 | # Resolve links: $0 may be a link 47 | PRG="$0" 48 | # Need this for relative symlinks. 49 | while [ -h "$PRG" ] ; do 50 | ls=`ls -ld "$PRG"` 51 | link=`expr "$ls" : '.*-> \(.*\)$'` 52 | if expr "$link" : '/.*' > /dev/null; then 53 | PRG="$link" 54 | else 55 | PRG=`dirname "$PRG"`"/$link" 56 | fi 57 | done 58 | SAVED="`pwd`" 59 | cd "`dirname \"$PRG\"`/" >/dev/null 60 | APP_HOME="`pwd -P`" 61 | cd "$SAVED" >/dev/null 62 | 63 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 64 | 65 | # Determine the Java command to use to start the JVM. 66 | if [ -n "$JAVA_HOME" ] ; then 67 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 68 | # IBM's JDK on AIX uses strange locations for the executables 69 | JAVACMD="$JAVA_HOME/jre/sh/java" 70 | else 71 | JAVACMD="$JAVA_HOME/bin/java" 72 | fi 73 | if [ ! -x "$JAVACMD" ] ; then 74 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 75 | 76 | Please set the JAVA_HOME variable in your environment to match the 77 | location of your Java installation." 78 | fi 79 | else 80 | JAVACMD="java" 81 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 82 | 83 | Please set the JAVA_HOME variable in your environment to match the 84 | location of your Java installation." 85 | fi 86 | 87 | # Increase the maximum file descriptors if we can. 88 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then 89 | MAX_FD_LIMIT=`ulimit -H -n` 90 | if [ $? -eq 0 ] ; then 91 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 92 | MAX_FD="$MAX_FD_LIMIT" 93 | fi 94 | ulimit -n $MAX_FD 95 | if [ $? -ne 0 ] ; then 96 | warn "Could not set maximum file descriptor limit: $MAX_FD" 97 | fi 98 | else 99 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 100 | fi 101 | fi 102 | 103 | # For Darwin, add options to specify how the application appears in the dock 104 | if $darwin; then 105 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 106 | fi 107 | 108 | # For Cygwin, switch paths to Windows format before running java 109 | if $cygwin ; then 110 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 111 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 112 | JAVACMD=`cygpath --unix "$JAVACMD"` 113 | 114 | # We build the pattern for arguments to be converted via cygpath 115 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 116 | SEP="" 117 | for dir in $ROOTDIRSRAW ; do 118 | ROOTDIRS="$ROOTDIRS$SEP$dir" 119 | SEP="|" 120 | done 121 | OURCYGPATTERN="(^($ROOTDIRS))" 122 | # Add a user-defined pattern to the cygpath arguments 123 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 124 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 125 | fi 126 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 127 | i=0 128 | for arg in "$@" ; do 129 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 130 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 131 | 132 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 133 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 134 | else 135 | eval `echo args$i`="\"$arg\"" 136 | fi 137 | i=$((i+1)) 138 | done 139 | case $i in 140 | (0) set -- ;; 141 | (1) set -- "$args0" ;; 142 | (2) set -- "$args0" "$args1" ;; 143 | (3) set -- "$args0" "$args1" "$args2" ;; 144 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 145 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 146 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 147 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 148 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 149 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 150 | esac 151 | fi 152 | 153 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules 154 | function splitJvmOpts() { 155 | JVM_OPTS=("$@") 156 | } 157 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS 158 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" 159 | 160 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" 161 | -------------------------------------------------------------------------------- /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 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 12 | set DEFAULT_JVM_OPTS= 13 | 14 | set DIRNAME=%~dp0 15 | if "%DIRNAME%" == "" set DIRNAME=. 16 | set APP_BASE_NAME=%~n0 17 | set APP_HOME=%DIRNAME% 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 Windowz variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | if "%@eval[2+2]" == "4" goto 4NT_args 53 | 54 | :win9xME_args 55 | @rem Slurp the command line arguments. 56 | set CMD_LINE_ARGS= 57 | set _SKIP=2 58 | 59 | :win9xME_args_slurp 60 | if "x%~1" == "x" goto execute 61 | 62 | set CMD_LINE_ARGS=%* 63 | goto execute 64 | 65 | :4NT_args 66 | @rem Get arguments from the 4NT Shell from JP Software 67 | set CMD_LINE_ARGS=%$ 68 | 69 | :execute 70 | @rem Setup the command line 71 | 72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 73 | 74 | @rem Execute Gradle 75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 76 | 77 | :end 78 | @rem End local scope for the variables with windows NT shell 79 | if "%ERRORLEVEL%"=="0" goto mainEnd 80 | 81 | :fail 82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 83 | rem the _cmd.exe /c_ return code! 84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 85 | exit /b 1 86 | 87 | :mainEnd 88 | if "%OS%"=="Windows_NT" endlocal 89 | 90 | :omega 91 | -------------------------------------------------------------------------------- /local.properties: -------------------------------------------------------------------------------- 1 | ## This file is automatically generated by Android Studio. 2 | # Do not modify this file -- YOUR CHANGES WILL BE ERASED! 3 | # 4 | # This file should *NOT* be checked into Version Control Systems, 5 | # as it contains information specific to your local configuration. 6 | # 7 | # Location of the SDK. This is only used by Gradle. 8 | # For customization when using a Version Control System, please read the 9 | # header note. 10 | sdk.dir=/Users/xufeng.zhang/Library/Android/sdk -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app', ':ThreadLibrary' 2 | --------------------------------------------------------------------------------