├── .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 |
8 |
9 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/GeekThreads.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
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 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | generateDebugSources
16 |
17 |
18 |
19 |
20 |
21 |
22 |
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 |
--------------------------------------------------------------------------------
/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 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | generateDebugSources
16 |
17 |
18 |
19 |
20 |
21 |
22 |
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 |
--------------------------------------------------------------------------------