├── .gitattributes
├── .gitignore
├── .idea
├── gradle.xml
├── misc.xml
├── modules.xml
├── runConfigurations.xml
└── vcs.xml
├── GradlePlugin.iml
├── README.md
├── Test.iml
├── app
├── .gitignore
├── app.iml
├── build.gradle
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── com
│ │ └── wangpos
│ │ └── test
│ │ └── ExampleInstrumentedTest.java
│ ├── main
│ ├── AndroidManifest.xml
│ ├── doc
│ │ └── readme.doc
│ ├── java
│ │ ├── com
│ │ │ └── wangpos
│ │ │ │ └── test
│ │ │ │ ├── MainActivity.java
│ │ │ │ ├── OnResume.java
│ │ │ │ ├── Presenter.java
│ │ │ │ ├── Test.java
│ │ │ │ ├── base
│ │ │ │ └── BaseActivity.java
│ │ │ │ ├── inter
│ │ │ │ ├── InstallManager.java
│ │ │ │ └── InstallManagerImpl.java
│ │ │ │ └── work
│ │ │ │ └── UploadWork.java
│ │ └── config
│ │ │ ├── BuildConfigDefault.java
│ │ │ └── ServiceLoader.java
│ └── res
│ │ ├── layout
│ │ └── activity_main.xml
│ │ ├── mipmap-hdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-mdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xhdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xxhdpi
│ │ └── ic_launcher.png
│ │ ├── mipmap-xxxhdpi
│ │ └── ic_launcher.png
│ │ ├── values-w820dp
│ │ └── dimens.xml
│ │ └── values
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── test
│ └── java
│ └── com
│ └── wangpos
│ └── test
│ └── ExampleUnitTest.java
├── build.gradle
├── com
└── wangpos
│ └── test
│ └── Test.class
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── local.properties
├── mygradleplugin
├── .gitignore
├── build.gradle
├── mygradleplugin.iml
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── com
│ │ └── wangpos
│ │ └── mygradleplugin
│ │ └── ExampleInstrumentedTest.java
│ ├── main
│ ├── AndroidManifest.xml
│ ├── groovy
│ │ └── com
│ │ │ └── micky
│ │ │ └── gradle
│ │ │ ├── JarZipUtil.groovy
│ │ │ ├── MyCustomPlugin.groovy
│ │ │ ├── MyInject.groovy
│ │ │ ├── MyInject2.groovy
│ │ │ ├── MyPlugin.groovy
│ │ │ ├── MyTransform.groovy
│ │ │ └── Utils.groovy
│ └── resources
│ │ └── META-INF
│ │ └── gradle-plugins
│ │ ├── com.micky.myTransform.properties
│ │ └── com.micky.mycustom.properties
│ └── test
│ └── java
│ └── com
│ └── wangpos
│ └── mygradleplugin
│ └── ExampleUnitTest.java
├── repo
└── com
│ └── micky
│ └── mygradleplugin
│ ├── 1.0.0
│ ├── mygradleplugin-1.0.0.jar
│ ├── mygradleplugin-1.0.0.jar.md5
│ ├── mygradleplugin-1.0.0.jar.sha1
│ ├── mygradleplugin-1.0.0.pom
│ ├── mygradleplugin-1.0.0.pom.md5
│ └── mygradleplugin-1.0.0.pom.sha1
│ ├── 1.0.1
│ ├── mygradleplugin-1.0.1.jar
│ ├── mygradleplugin-1.0.1.jar.md5
│ ├── mygradleplugin-1.0.1.jar.sha1
│ ├── mygradleplugin-1.0.1.pom
│ ├── mygradleplugin-1.0.1.pom.md5
│ └── mygradleplugin-1.0.1.pom.sha1
│ ├── maven-metadata.xml
│ ├── maven-metadata.xml.md5
│ └── maven-metadata.xml.sha1
├── settings.gradle
└── source
├── 16ms_do.md
├── aar.md
├── android.gradle
├── android_apk_optimization.md
├── android_performance_optimization.md
├── android_studio.xml
├── applicationVariant.gradle
├── assemble.md
├── assembleWithParams.md
├── chinese.md
├── configManifest.gradle
├── createJavaCode.gradle
├── custom_view_optimization.md
├── day01.gradle
├── day02.md
├── day03.gradle
├── day04.gradle
├── day05.gradle
├── diffManifest.md
├── english.md
├── exeRank.md
├── gc1.jpeg
├── gc2.jpeg
├── genJavadoc.gradle
├── gradle_tranform.md
├── initConfig.gradle
├── initServiceLoader.gradle
├── lint-results-obmDebug.html
├── lintOption.gradle
├── makeJar.md
├── memory_optimization.md
├── metaprogramming.md
├── operate_file.md
├── optim_list.md
├── optimization.gradle
├── packageOption.gradle
├── plugin_develop.md
├── productflavor.gradle
├── project_library.md
├── properties.gradle
├── sdkVersionType.md
├── set_java_version.gradle
├── sourceSet.gradle
├── task.md
├── ui_optimization.md
├── version.gradle
├── why_android_16ms.md
└── workmanager.md
/.gitattributes:
--------------------------------------------------------------------------------
1 | linguist-language=Groovy
2 | *.css linguist-language=Groovy
3 | *.html linguist-language=Groovy
4 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /gradle.properties
5 | /.idea/workspace.xml
6 | /.idea/libraries
7 | .DS_Store
8 | /build
9 | /captures
10 | .externalNativeBuild
11 | /gradle
12 |
--------------------------------------------------------------------------------
/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
18 |
19 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/.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 |
--------------------------------------------------------------------------------
/GradlePlugin.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## Gradle插件开发介绍
2 |
3 | - [英文文档](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/english.md)
4 |
5 | #### Gradle基础详解:
6 |
7 | 这一次一定要系统掌握,你准备好了吗?
8 |
9 |
10 | - [初识Gradle 和 领域专用语言](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/day01.gradle)
11 | - [Gradle 版本配置](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/day02.md)
12 | - [Gradle 模块配置](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/day03.gradle)
13 | - [Gradle 插件分类](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/day04.gradle)
14 | - [Gradle Android插件包含的内容](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/android.gradle)
15 | - [CompileSdkVersion minSdkVersion targetSdkVersion buildToolsVersion区别](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/sdkVersionType.md)
16 | - [Gradle 统一配置你的版本号](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/version.gradle)
17 | - [Gradle 分渠道打包](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/productflavor.gradle)
18 | - [Gradle 配置你的AndroidManifest](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/configManifest.gradle)
19 | - [Gradle 指定你的源码路径、动态去除不需要打包的类·优](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/sourceSet.gradle)
20 | - [Gradle 项目依赖配置](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/project_library.md)
21 | - [Gradle lintOption·优](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/lintOption.gradle)
22 | - [lint报告](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/lint-results-obmDebug.html)
23 | - [Gradle 打包优化配置·优](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/optimization.gradle)
24 | - [Gradle gradle.properties 配置gradle版本和buildTools版本,和一些不便的版本](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/properties.gradle)
25 | - [Gradle 使用variantFilter修改生成apk路径、名字](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/applicationVariant.gradle)
26 | - [Gradle 指定java版本](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/set_java_version.gradle)
27 | - [Gradle packagingOptions解决重复包和文件](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/packageOption.gradle)
28 | - [AndroidStudio常见问题](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/android_studio.xml)
29 | - [Gradle 命令打包apk](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/assemble.md)
30 | - [Gradle 命令行传递参数](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/assembleWithParams.md)
31 | - [Gradle 编译器动态生成java·优](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/operate_file.md)
32 | - [Gradle 创建Task](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/task.md)
33 | - [Gradle 打包选择不同的AndroidManifest.xml](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/diffManifest.md)
34 | - [Gradle 执行顺序](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/exeRank.md)
35 | - Gradle 生成测试报告
36 | - [Gradle 生成接口文档](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/genJavadoc.gradle)
37 | - [AAR 生成](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/aar.md)
38 | - [jar 生成](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/makeJar.md)
39 | - [元编程](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/metaprogramming.md)
40 | - 查看所有tasks命令 *./gradlew tasks --all*
41 |
42 |
43 | #### Gradle高级插件开发
44 | - [插件开发详细步骤](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/plugin_develop.md)
45 | - [Gradle Transform监听文件编译结束](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/gradle_tranform.md)
46 |
47 | #### Android性能优化
48 | - [apk瘦身优化](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/android_apk_optimization.md)
49 | - [界面性能UI](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/ui_optimization.md)
50 | - [内存泄露](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/memory_optimization.md)
51 | - [WorkManager](https://github.com/UCodeUStory/GradlePlugin/blob/master/source/workmanager.md)
52 |
53 |
54 | ### 问题总结
55 |
56 | - 1.找不到依赖库,需要在repositories中添加jcenter()
57 | - 2.javassist找不到jar包,就是需要javassist引入jar包
58 | - 3.发现生成的apk没有变化,删除了build目录重新build,仍然无变化,点击Android Studio setting 清理缓存,重新启动
59 | - 4.项目app修改名字报错时提示找不到项目,一般根目录.idea就可以解决
60 | - 5.解决Error:All flavors must now belong to a named flavor dimension.
61 |
62 | flavorDimensions "versionCode"
63 | - 6.Android Studio clean 时产生 Error:Execution failed for task ':app:mockableAndroidJar' > java.lang.NullPointer
64 |
65 | 解决1. 这个问题由于更改主项目complieSdk版本导致的,只需要将所有子项目的版本更改相同即可;
66 |
67 | 解决2. 也可以通过在
68 |
69 | 3. Press “OK” and try to Rebuild Project again.
70 |
71 | 解决3.File -> Settings -> Build, Execution, Deployment -> Build Tools -> Gradle -> Experimental
72 | 取消 Enable All test..勾选,但是mac版本没找到这个选项
73 |
74 | 解决4. 在根目录添加
75 |
76 | gradle.taskGraph.whenReady {
77 | tasks.each { task ->
78 | if (task.name.equals('mockableAndroidJar')) {
79 | task.enabled = false
80 | }
81 | }
82 | }
83 | - 7.当我们修改 compile 'com.android.support:appcompat-v7:25.0.0'版本时,会报很多value
84 | 主题找不到等错误
85 | 此时我们只需要修改compileSDK版本和这个V7后面版本一致即可
86 | - 8.2018/8/1遇到问题 修改项目的app为其他名字时总是报找不到app in root project 经过好多天查找最终发现了问题所在,原来是
87 | 1. Go to File -> Settings -> Build, Execution, Deployment -> Compiler 2. Add to “Command-line Options”: 这里面全部去掉就可以了
88 |
89 |
90 | #### 友情链接
91 | [fly803/BaseProject](https://github.com/fly803/BaseProject)
92 |
--------------------------------------------------------------------------------
/Test.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/app/app.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | generateObmDebugSources
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 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 |
166 |
167 |
168 |
169 |
170 |
171 |
172 |
173 |
174 |
175 |
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | apply from:'../source/initConfig.gradle'
4 | apply from:'../source/initServiceLoader.gradle'
5 | apply from:'../source/android.gradle'
6 |
7 |
8 | buildscript {
9 | repositories {
10 | maven {
11 | url uri('../repo')
12 | }
13 |
14 | jcenter()
15 | }
16 |
17 | dependencies {
18 | classpath group: 'com.micky',
19 | name: 'mygradleplugin',
20 | version: '1.0.1'
21 | }
22 | }
23 |
24 | apply plugin: 'com.micky.mycustom'
25 | //./gradlew assembleRelease 打包 会生成多个渠道包,在插件修改字节码文件的时候回报错,所以只能单独打包带有修改字节码插件的项目
26 | //apply plugin: 'com.micky.myTransform'
27 |
28 | dependencies {
29 | compile fileTree(include: ['*.jar'], dir: 'libs')
30 | androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
31 | exclude group: 'com.android.support', module: 'support-annotations'
32 | })
33 | compile 'com.android.support:appcompat-v7:25.0.0'
34 | testCompile 'junit:junit:4.12'
35 | implementation "android.arch.work:work-runtime:1.0.0-alpha01"
36 |
37 | }
38 |
39 | android {
40 | buildToolsVersion '26.0.2'
41 | }
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in /Users/qiyue/Library/Android/sdk/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/app/src/androidTest/java/com/wangpos/test/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
1 | package com.wangpos.test;
2 |
3 | import android.content.Context;
4 | import android.support.test.InstrumentationRegistry;
5 | import android.support.test.runner.AndroidJUnit4;
6 |
7 | import org.junit.Test;
8 | import org.junit.runner.RunWith;
9 |
10 | import static org.junit.Assert.*;
11 |
12 | /**
13 | * Instrumentation test, which will execute on an Android device.
14 | *
15 | * @see Testing documentation
16 | */
17 | @RunWith(AndroidJUnit4.class)
18 | public class ExampleInstrumentedTest {
19 | @Test
20 | public void useAppContext() throws Exception {
21 | // Context of the app under test.
22 | Context appContext = InstrumentationRegistry.getTargetContext();
23 |
24 | assertEquals("com.wangpos.test", appContext.getPackageName());
25 | }
26 |
27 | @Test
28 | public void useAppDebugContext() throws Exception {
29 | // Context of the app under test.
30 | Context appContext = InstrumentationRegistry.getTargetContext();
31 |
32 | assertEquals("com.wangpos.test.debug", appContext.getPackageName());
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/app/src/main/doc/readme.doc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/UCodeUStory/GradlePluginDevelop/37e83857ab407d955478032f7a802ed5c65ee4ab/app/src/main/doc/readme.doc
--------------------------------------------------------------------------------
/app/src/main/java/com/wangpos/test/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.wangpos.test;
2 |
3 | import android.arch.lifecycle.Observer;
4 | import android.os.Build;
5 | import android.support.annotation.Nullable;
6 | import android.support.annotation.RequiresApi;
7 | import android.os.Bundle;
8 | import android.util.Log;
9 | import android.view.View;
10 | import android.widget.Button;
11 |
12 | import com.wangpos.test.base.BaseActivity;
13 | import com.wangpos.test.work.UploadWork;
14 |
15 | import java.util.concurrent.TimeUnit;
16 |
17 | import androidx.work.Constraints;
18 | import androidx.work.Data;
19 | import androidx.work.NetworkType;
20 | import androidx.work.OneTimeWorkRequest;
21 | import androidx.work.PeriodicWorkRequest;
22 | import androidx.work.State;
23 | import androidx.work.WorkManager;
24 | import androidx.work.WorkStatus;
25 |
26 | public class MainActivity extends BaseActivity implements View.OnClickListener {
27 |
28 | private Presenter presenter;
29 |
30 | private Button btnRequestNetWrok;
31 | private Button btnPeriod;
32 |
33 | @RequiresApi(api = Build.VERSION_CODES.M)
34 | @Override
35 | protected void onCreate(Bundle savedInstanceState) {
36 | super.onCreate(savedInstanceState);
37 | setContentView(R.layout.activity_main);
38 |
39 | Log.i("info","onCreate start");
40 | Log.i("info","onCreate end");
41 |
42 |
43 | // /Users/qiyue/GitProject/GradlePlugin/app/build/intermediates/classes/debug
44 |
45 | presenter = new Presenter();
46 |
47 | if (BuildConfig.isDebug){
48 | toast(BuildConfig.FLAVOR+"debug版本");
49 | }
50 |
51 | // WorkManager.getInstance().cancelWorkById(oneTimeWorkRequest.getId());
52 |
53 |
54 |
55 |
56 |
57 | btnRequestNetWrok = (Button) findViewById(R.id.btn_request_network);
58 | btnRequestNetWrok.setOnClickListener(this);
59 | btnPeriod = (Button) findViewById(R.id.btn_Period_work);
60 | btnPeriod.setOnClickListener(this);
61 |
62 | }
63 |
64 | @Override
65 | protected void onResume() {
66 | super.onResume();
67 | presenter.onResume();
68 | }
69 |
70 |
71 |
72 |
73 | @Override
74 | public void onClick(View v) {
75 | switch (v.getId()){
76 | case R.id.btn_request_network:
77 | exeWorkByNetWork();
78 | break;
79 | case R.id.btn_Period_work:
80 | exePeriodWork();
81 | break;
82 | }
83 | }
84 |
85 | /**
86 | * 模拟一个网络请求
87 | */
88 | private void exePeriodWork() {
89 | //notice 创建约束条件
90 | Constraints constraints = new Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED)
91 | .build();
92 | //notice 输入数据
93 | Data inputData = new Data.Builder().putBoolean("isTest", true).build();
94 |
95 | //notice 执行定时任务:设置工作的时间间隔
96 | PeriodicWorkRequest periodicWorkRequest = new PeriodicWorkRequest.Builder(UploadWork
97 | .class, 10, TimeUnit.MINUTES).addTag(UploadWork.TAG)
98 | .setConstraints(constraints).setInputData(inputData).build();
99 |
100 |
101 |
102 | WorkManager.getInstance().cancelWorkById(periodicWorkRequest.getId());
103 | //notice 设置结果回调
104 | WorkManager.getInstance().getStatusById(periodicWorkRequest.getId())
105 | .observe(this, new Observer() {
106 | @Override
107 | public void onChanged(@Nullable WorkStatus workStatus) {
108 |
109 | Log.i("result","state="+workStatus.getState());
110 | if (workStatus != null && workStatus.getState() == State.SUCCEEDED) {
111 | //notice 取出回调数据
112 | String result = workStatus.getOutputData().getString("result", "");
113 | Log.i("result","workStatus="+workStatus.getState());
114 | toast(result);
115 |
116 | }
117 | }
118 | });
119 | //notice 执行
120 | WorkManager.getInstance().enqueue(periodicWorkRequest);
121 |
122 |
123 | /**
124 | * 你也可以让多个任务按顺序执行:
125 |
126 | WorkManager.getInstance(this)
127 | .beginWith(Work.from(LocationWork.class))
128 | .then(Work.from(LocationUploadWorker.class))
129 | .enqueue();
130 | 你还可以让多个任务同时执行:
131 |
132 | WorkManager.getInstance(this).enqueue(Work.from(LocationWork.class,
133 | LocationUploadWorker.class));
134 | */
135 | }
136 |
137 |
138 | /**
139 | * 模拟一个网络请求
140 | */
141 | private void exeWorkByNetWork() {
142 | //notice 创建约束条件
143 | Constraints constraints = new Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED)
144 | .build();
145 |
146 | //notice 输入数据
147 | Data inputData = new Data.Builder().putBoolean("isTest", true).build();
148 |
149 | //notice 构建请求类型,一次的请求
150 | OneTimeWorkRequest oneTimeWorkRequest = new OneTimeWorkRequest.Builder(
151 | UploadWork.class
152 | ).setConstraints(constraints).setInputData(inputData).build();
153 |
154 |
155 | //notice 设置结果回调
156 | WorkManager.getInstance().getStatusById(oneTimeWorkRequest.getId())
157 | .observe(this, new Observer() {
158 | @Override
159 | public void onChanged(@Nullable WorkStatus workStatus) {
160 |
161 | if (workStatus != null && workStatus.getState() == State.SUCCEEDED) {
162 | //notice 取出回调数据
163 | String result = workStatus.getOutputData().getString("result", "");
164 | Log.i("result","workStatus="+workStatus.getState());
165 | toast(result);
166 |
167 | }
168 | }
169 | });
170 | //notice 执行
171 | WorkManager.getInstance().enqueue(oneTimeWorkRequest);
172 |
173 |
174 | /**
175 | * 你也可以让多个任务按顺序执行:
176 |
177 | WorkManager.getInstance(this)
178 | .beginWith(Work.from(LocationWork.class))
179 | .then(Work.from(LocationUploadWorker.class))
180 | .enqueue();
181 | 你还可以让多个任务同时执行:
182 |
183 | WorkManager.getInstance(this).enqueue(Work.from(LocationWork.class,
184 | LocationUploadWorker.class));
185 | */
186 | }
187 |
188 |
189 | private void cancel(){
190 | // WorkManager.getInstance().cancelWorkById(oneTimeWorkRequest.getId());
191 | }
192 |
193 |
194 | }
195 |
--------------------------------------------------------------------------------
/app/src/main/java/com/wangpos/test/OnResume.java:
--------------------------------------------------------------------------------
1 | package com.wangpos.test;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 |
9 | @Retention(RetentionPolicy.CLASS)
10 | @Target(ElementType.METHOD)
11 | public @interface OnResume {
12 | int value();
13 | }
14 |
--------------------------------------------------------------------------------
/app/src/main/java/com/wangpos/test/Presenter.java:
--------------------------------------------------------------------------------
1 | package com.wangpos.test;
2 |
3 | import android.util.Log;
4 |
5 | /**
6 | * Created by qiyue on 2017/11/6.
7 | */
8 |
9 | public class Presenter {
10 |
11 | /**
12 | * 动态插入
13 | */
14 | public void onResume(){
15 |
16 | }
17 |
18 | @OnResume(1)
19 | public void test(){
20 | Log.i("info","test is invoke");
21 | }
22 |
23 | @OnResume(1)
24 | public void test2(){
25 | Log.i("info","test2 is invoke");
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/app/src/main/java/com/wangpos/test/Test.java:
--------------------------------------------------------------------------------
1 | package com.wangpos.test;
2 |
3 | /**
4 | * Created by qiyue on 2017/10/19.
5 | */
6 |
7 | public class Test {
8 | }
9 |
--------------------------------------------------------------------------------
/app/src/main/java/com/wangpos/test/base/BaseActivity.java:
--------------------------------------------------------------------------------
1 | package com.wangpos.test.base;
2 |
3 | import android.support.v7.app.AppCompatActivity;
4 | import android.widget.Toast;
5 |
6 | /**
7 | * Created by qiyue on 2018/6/7.
8 | */
9 |
10 | public class BaseActivity extends AppCompatActivity {
11 |
12 |
13 |
14 | protected void toast(String msg){
15 | Toast.makeText(getApplicationContext(),msg,Toast.LENGTH_SHORT).show();
16 | }
17 |
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/java/com/wangpos/test/inter/InstallManager.java:
--------------------------------------------------------------------------------
1 | package com.wangpos.test.inter;
2 |
3 | /**
4 | * Created by qiyue on 2018/5/30.
5 | */
6 |
7 | public interface InstallManager {
8 | }
9 |
--------------------------------------------------------------------------------
/app/src/main/java/com/wangpos/test/inter/InstallManagerImpl.java:
--------------------------------------------------------------------------------
1 | package com.wangpos.test.inter;
2 |
3 | /**
4 | * Created by qiyue on 2018/5/30.
5 | */
6 |
7 | public class InstallManagerImpl {
8 | }
9 |
--------------------------------------------------------------------------------
/app/src/main/java/com/wangpos/test/work/UploadWork.java:
--------------------------------------------------------------------------------
1 | package com.wangpos.test.work;
2 |
3 | import android.support.annotation.NonNull;
4 | import android.util.Log;
5 |
6 | import androidx.work.Data;
7 | import androidx.work.Worker;
8 |
9 | /**
10 | * Created by qiyue on 2018/6/6.
11 | */
12 |
13 | public class UploadWork extends Worker {
14 |
15 | public static final String TAG = UploadWork.class.getSimpleName();
16 |
17 | @NonNull
18 | @Override
19 | public WorkerResult doWork() {
20 |
21 | Log.i(TAG,"模拟上传中......");
22 |
23 | boolean isTest = getInputData().getBoolean("isTest",false);
24 |
25 | // try {
26 | // Thread.sleep(10000);
27 | // } catch (InterruptedException e) {
28 | // e.printStackTrace();
29 | // }
30 |
31 |
32 | Data resultData = new Data.Builder().putString("result","--^_^--"+isTest).build();
33 | setOutputData(resultData);
34 | return WorkerResult.SUCCESS;
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/app/src/main/java/config/BuildConfigDefault.java:
--------------------------------------------------------------------------------
1 | package config;
2 |
3 | /**
4 | * Created by qiyue on 2018/5/30.
5 | */
6 |
7 | public class BuildConfigDefault {
8 |
9 | static final int isOpen = 4;
10 |
11 | static final String name = "configName";
12 |
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/app/src/main/java/config/ServiceLoader.java:
--------------------------------------------------------------------------------
1 | package config;
2 | import com.wangpos.test.inter.*;
3 |
4 |
5 |
6 | import java.util.HashMap;
7 | import java.util.Map;
8 |
9 |
10 | /**
11 | * Created by qiyue on 2018/5/30.
12 | */
13 |
14 | public class ServiceLoader {
15 |
16 | Map