From 55c3fc2eb9344eb3278b2690b32488d8a200adaa Mon Sep 17 00:00:00 2001 From: Blankj <625783482@qq.com> Date: Fri, 8 Mar 2019 17:46:44 +0800 Subject: [PATCH 001/181] see 03/08 log --- CHANGELOG.md | 1 + config.gradle | 17 ++++++------- gradle.properties | 4 ++- .../com/blankj/launcher/pkg/MainActivity.kt | 2 +- .../pkg/src/main/res/layout/activity_main.xml | 18 ++++++------- lib/base/build.gradle | 6 ++--- .../java/com/blankj/lib/base/BaseActivity.kt | 2 +- .../com/blankj/lib/base/BaseApplication.kt | 2 +- .../com/blankj/lib/base/BaseDrawerActivity.kt | 6 ++--- .../java/com/blankj/lib/base/BaseFragment.kt | 6 ++--- .../blankj/lib/base/rv/BaseViewHolder.java | 4 +-- .../lib/base/rv/RecycleViewDivider.java | 10 ++++---- .../lib/base/rv/adapter/BaseAdapter.java | 6 ++--- .../lib/base/rv/adapter/SingleAdapter.java | 2 +- .../src/main/res/layout/activity_back.xml | 14 +++++------ .../src/main/res/layout/activity_drawer.xml | 6 ++--- subutil/lib/build.gradle | 6 ++--- .../blankj/subutil/util/LocationUtils.java | 2 +- .../com/blankj/subutil/util/PinyinUtils.java | 2 +- .../java/com/blankj/subutil/util/Utils.java | 4 +-- .../blankj/subutil/pkg/helper/DialogHelper.kt | 2 +- utilcode/lib/build.gradle | 8 +++--- utilcode/lib/project.properties | 2 +- .../utilcode/constant/MemoryConstants.java | 2 +- .../constant/PermissionConstants.java | 2 +- .../utilcode/constant/TimeConstants.java | 2 +- .../blankj/utilcode/util/ActivityUtils.java | 9 ++++--- .../blankj/utilcode/util/AntiShakeUtils.java | 5 ++-- .../com/blankj/utilcode/util/AppUtils.java | 5 ++-- .../com/blankj/utilcode/util/BarUtils.java | 11 ++++---- .../blankj/utilcode/util/BrightnessUtils.java | 5 ++-- .../utilcode/util/CacheDiskStaticUtils.java | 3 ++- .../blankj/utilcode/util/CacheDiskUtils.java | 3 ++- .../utilcode/util/CacheDoubleStaticUtils.java | 3 ++- .../utilcode/util/CacheDoubleUtils.java | 2 +- .../utilcode/util/CacheMemoryStaticUtils.java | 2 +- .../utilcode/util/CacheMemoryUtils.java | 4 +-- .../com/blankj/utilcode/util/ColorUtils.java | 12 ++++----- .../com/blankj/utilcode/util/CrashUtils.java | 4 +-- .../com/blankj/utilcode/util/DeviceUtils.java | 4 +-- .../blankj/utilcode/util/FragmentUtils.java | 21 ++++++++-------- .../com/blankj/utilcode/util/ImageUtils.java | 14 +++++------ .../com/blankj/utilcode/util/IntentUtils.java | 4 +-- .../com/blankj/utilcode/util/LogUtils.java | 8 +++--- .../blankj/utilcode/util/MetaDataUtils.java | 2 +- .../blankj/utilcode/util/NetworkUtils.java | 2 +- .../utilcode/util/NotificationUtils.java | 6 ++--- .../com/blankj/utilcode/util/ObjectUtils.java | 6 ++--- .../blankj/utilcode/util/PermissionUtils.java | 8 +++--- .../com/blankj/utilcode/util/PhoneUtils.java | 2 +- .../blankj/utilcode/util/ProcessUtils.java | 4 +-- .../com/blankj/utilcode/util/RegexUtils.java | 2 +- .../blankj/utilcode/util/ResourceUtils.java | 2 +- .../blankj/utilcode/util/SPStaticUtils.java | 2 +- .../com/blankj/utilcode/util/SPUtils.java | 2 +- .../com/blankj/utilcode/util/ScreenUtils.java | 5 ++-- .../blankj/utilcode/util/SnackbarUtils.java | 14 +++++------ .../com/blankj/utilcode/util/SpanUtils.java | 16 ++++++------ .../com/blankj/utilcode/util/StringUtils.java | 4 +-- .../com/blankj/utilcode/util/ThreadUtils.java | 7 +++--- .../com/blankj/utilcode/util/TimeUtils.java | 2 +- .../com/blankj/utilcode/util/ToastUtils.java | 10 ++++---- .../com/blankj/utilcode/util/UriUtils.java | 25 +++++++++++++------ .../java/com/blankj/utilcode/util/Utils.java | 2 +- .../blankj/utilcode/util/VibrateUtils.java | 2 +- .../blankj/utilcode/util/ObjectUtilsTest.java | 5 ++-- .../pkg/feature/activity/ActivityActivity.kt | 2 +- .../feature/activity/SubActivityActivity.kt | 2 +- .../feature/bar/BarStatusFragmentActivity.kt | 16 ++++++------ .../pkg/feature/fragment/ContainerFragment.kt | 6 ++--- .../pkg/feature/fragment/FragmentActivity.kt | 6 ++--- .../pkg/feature/image/ImageActivity.kt | 8 +++--- .../pkg/feature/snackbar/SnackbarActivity.kt | 2 +- .../utilcode/pkg/feature/span/SpanActivity.kt | 2 +- .../utilcode/pkg/feature/toast/CustomToast.kt | 2 +- .../pkg/feature/toast/ToastActivity.kt | 2 +- .../utilcode/pkg/helper/DialogHelper.kt | 2 +- .../main/res/layout/activity_adaptscreen.xml | 4 +-- .../res/layout/activity_adaptscreen_close.xml | 4 +-- .../layout/activity_adaptscreen_height.xml | 4 +-- .../res/layout/activity_adaptscreen_width.xml | 4 +-- .../layout/activity_bar_status_fragment.xml | 4 +-- .../src/main/res/layout/activity_fragment.xml | 2 +- .../src/main/res/layout/activity_image.xml | 2 +- 84 files changed, 241 insertions(+), 220 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8271c33548..a1706be701 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,4 @@ +* `19/03/09` [fix] UriUtils#uri2File. * `19/03/08` [add] LogUtils support multi process. Publish v1.23.7. * `19/03/02` [fix] LogUtils#file. * `19/02/28` [fix] ImageUtils#calculateInSampleSize. Publish v1.23.6. diff --git a/config.gradle b/config.gradle index 57c3d35e99..106f066059 100644 --- a/config.gradle +++ b/config.gradle @@ -2,7 +2,7 @@ ext { applicationId = 'com.blankj.androidutilcode' appName = 'Util' - compileSdkVersion = 27 + compileSdkVersion = 28 minSdkVersion = 14 targetSdkVersion = 27 versionCode = 1_023_007 @@ -16,8 +16,8 @@ ext { // lib version kotlin_version = '1.3.0' - support_version = '27.1.1' leakcanary_version = '1.6.3' + androidx_version = '1.0.0' dep = [ plugin : [ @@ -30,19 +30,18 @@ ext { ], // lib - support : [ - appcompat_v7: "com.android.support:appcompat-v7:$support_version", - design : "com.android.support:design:$support_version", - multidex : "com.android.support:multidex:1.0.2", - ], - constraint : "com.android.support.constraint:constraint-layout:1.1.3", + appcompat : "androidx.appcompat:appcompat:$androidx_version", + design : "com.google.android.material:material:$androidx_version", + multidex : "androidx.multidex:multidex:2.0.1", + constraint : "androidx.constraintlayout:constraintlayout:1.1.3", + kotlin : "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version", leakcanary : [ android : "com.squareup.leakcanary:leakcanary-android:$leakcanary_version", android_no_op : "com.squareup.leakcanary:leakcanary-android-no-op:$leakcanary_version", support_fragment: "com.squareup.leakcanary:leakcanary-support-fragment:$leakcanary_version" ], - free_proguard: "com.blankj:free-proguard:0.0.7", + free_proguard: "com.blankj:free-proguard:0.0.12", adapt_screen : "com.blankj:adapt-screen:0.0.3", gson : "com.google.code.gson:gson:2.8.2", diff --git a/gradle.properties b/gradle.properties index e98b0a89fc..ad5471a961 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,4 +17,6 @@ # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true -#org.gradle.jvmargs=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 \ No newline at end of file +#org.gradle.jvmargs=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 +android.enableJetifier=true +android.useAndroidX=true \ No newline at end of file diff --git a/launcher/pkg/src/main/java/com/blankj/launcher/pkg/MainActivity.kt b/launcher/pkg/src/main/java/com/blankj/launcher/pkg/MainActivity.kt index 27d29a032a..e6dc516ed6 100644 --- a/launcher/pkg/src/main/java/com/blankj/launcher/pkg/MainActivity.kt +++ b/launcher/pkg/src/main/java/com/blankj/launcher/pkg/MainActivity.kt @@ -2,7 +2,7 @@ package com.blankj.launcher.pkg import android.graphics.Color import android.os.Bundle -import android.support.v7.app.ActionBarDrawerToggle +import androidx.appcompat.app.ActionBarDrawerToggle import android.view.View import android.widget.ImageView import com.blankj.lib.base.BaseDrawerActivity diff --git a/launcher/pkg/src/main/res/layout/activity_main.xml b/launcher/pkg/src/main/res/layout/activity_main.xml index 3b31dafe32..ee8b62a6fa 100644 --- a/launcher/pkg/src/main/res/layout/activity_main.xml +++ b/launcher/pkg/src/main/res/layout/activity_main.xml @@ -1,17 +1,17 @@ - - - - - - + + - @@ -69,5 +69,5 @@ android:text="@string/sub_util" /> - - + + diff --git a/lib/base/build.gradle b/lib/base/build.gradle index bd369d23ee..8c6cb29835 100644 --- a/lib/base/build.gradle +++ b/lib/base/build.gradle @@ -7,9 +7,9 @@ dependencies { api project(':utilcode-lib') api project(':subutil-lib') - api dep.support.appcompat_v7 - api dep.support.design - api dep.support.multidex + api dep.appcompat + api dep.design + api dep.multidex api dep.constraint api dep.kotlin api dep.free_proguard diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.kt b/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.kt index deb05718a9..b1b3086f14 100644 --- a/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.kt +++ b/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.kt @@ -2,7 +2,7 @@ package com.blankj.lib.base import android.app.Activity import android.os.Bundle -import android.support.v7.app.AppCompatActivity +import androidx.appcompat.app.AppCompatActivity import android.view.LayoutInflater import android.view.View import com.blankj.utilcode.util.AntiShakeUtils diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseApplication.kt b/lib/base/src/main/java/com/blankj/lib/base/BaseApplication.kt index f3eb078f79..873c71fa49 100644 --- a/lib/base/src/main/java/com/blankj/lib/base/BaseApplication.kt +++ b/lib/base/src/main/java/com/blankj/lib/base/BaseApplication.kt @@ -2,7 +2,7 @@ package com.blankj.lib.base import android.app.Application import android.content.Context -import android.support.multidex.MultiDex +import androidx.multidex.MultiDex import com.blankj.utilcode.util.AppUtils import com.blankj.utilcode.util.CrashUtils import com.blankj.utilcode.util.LogUtils diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseDrawerActivity.kt b/lib/base/src/main/java/com/blankj/lib/base/BaseDrawerActivity.kt index a29cc60cc8..3514d2fdd3 100644 --- a/lib/base/src/main/java/com/blankj/lib/base/BaseDrawerActivity.kt +++ b/lib/base/src/main/java/com/blankj/lib/base/BaseDrawerActivity.kt @@ -2,8 +2,8 @@ package com.blankj.lib.base import android.content.Intent import android.net.Uri -import android.support.annotation.StringRes -import android.support.v4.widget.DrawerLayout +import androidx.annotation.StringRes +import androidx.drawerlayout.widget.DrawerLayout import android.view.LayoutInflater import android.widget.FrameLayout import com.blankj.utilcode.util.ActivityUtils @@ -20,7 +20,7 @@ import kotlinx.android.synthetic.main.activity_drawer.* */ abstract class BaseDrawerActivity : BaseActivity() { - protected lateinit var mBaseDrawerRootLayout: DrawerLayout + protected lateinit var mBaseDrawerRootLayout: androidx.drawerlayout.widget.DrawerLayout protected lateinit var mBaseDrawerContainerView: FrameLayout override fun isSwipeBack(): Boolean { diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseFragment.kt b/lib/base/src/main/java/com/blankj/lib/base/BaseFragment.kt index 42e7073529..3db893bea2 100644 --- a/lib/base/src/main/java/com/blankj/lib/base/BaseFragment.kt +++ b/lib/base/src/main/java/com/blankj/lib/base/BaseFragment.kt @@ -3,8 +3,8 @@ package com.blankj.lib.base import android.app.Activity import android.content.Context import android.os.Bundle -import android.support.annotation.IdRes -import android.support.v4.app.Fragment +import androidx.annotation.IdRes +import androidx.fragment.app.Fragment import android.util.Log import android.view.LayoutInflater import android.view.View @@ -19,7 +19,7 @@ import com.blankj.utilcode.util.AntiShakeUtils * desc : base about v4-fragment * ``` */ -abstract class BaseFragment : Fragment(), IBaseView { +abstract class BaseFragment : androidx.fragment.app.Fragment(), IBaseView { companion object { private const val TAG = "BaseFragment" diff --git a/lib/base/src/main/java/com/blankj/lib/base/rv/BaseViewHolder.java b/lib/base/src/main/java/com/blankj/lib/base/rv/BaseViewHolder.java index ee47e751f5..6441f8c1fd 100644 --- a/lib/base/src/main/java/com/blankj/lib/base/rv/BaseViewHolder.java +++ b/lib/base/src/main/java/com/blankj/lib/base/rv/BaseViewHolder.java @@ -1,7 +1,7 @@ package com.blankj.lib.base.rv; -import android.support.annotation.IdRes; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.IdRes; +import androidx.recyclerview.widget.RecyclerView; import android.util.SparseArray; import android.view.View; diff --git a/lib/base/src/main/java/com/blankj/lib/base/rv/RecycleViewDivider.java b/lib/base/src/main/java/com/blankj/lib/base/rv/RecycleViewDivider.java index 3d2b90f302..dd20894e10 100644 --- a/lib/base/src/main/java/com/blankj/lib/base/rv/RecycleViewDivider.java +++ b/lib/base/src/main/java/com/blankj/lib/base/rv/RecycleViewDivider.java @@ -5,11 +5,11 @@ import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.drawable.Drawable; -import android.support.annotation.DrawableRes; -import android.support.annotation.NonNull; -import android.support.v4.content.ContextCompat; -import android.support.v4.view.ViewCompat; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.DrawableRes; +import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; +import androidx.core.view.ViewCompat; +import androidx.recyclerview.widget.RecyclerView; import android.view.View; import android.widget.LinearLayout; diff --git a/lib/base/src/main/java/com/blankj/lib/base/rv/adapter/BaseAdapter.java b/lib/base/src/main/java/com/blankj/lib/base/rv/adapter/BaseAdapter.java index f5acee0bb3..b8cf5ae12d 100644 --- a/lib/base/src/main/java/com/blankj/lib/base/rv/adapter/BaseAdapter.java +++ b/lib/base/src/main/java/com/blankj/lib/base/rv/adapter/BaseAdapter.java @@ -1,9 +1,9 @@ package com.blankj.lib.base.rv.adapter; import android.content.Context; -import android.support.annotation.LayoutRes; -import android.support.annotation.NonNull; -import android.support.v7.widget.RecyclerView; +import androidx.annotation.LayoutRes; +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; import android.util.SparseArray; import android.view.LayoutInflater; import android.view.View; diff --git a/lib/base/src/main/java/com/blankj/lib/base/rv/adapter/SingleAdapter.java b/lib/base/src/main/java/com/blankj/lib/base/rv/adapter/SingleAdapter.java index 619c8fc688..b7e81b892b 100644 --- a/lib/base/src/main/java/com/blankj/lib/base/rv/adapter/SingleAdapter.java +++ b/lib/base/src/main/java/com/blankj/lib/base/rv/adapter/SingleAdapter.java @@ -1,6 +1,6 @@ package com.blankj.lib.base.rv.adapter; -import android.support.annotation.LayoutRes; +import androidx.annotation.LayoutRes; import java.util.List; diff --git a/lib/base/src/main/res/layout/activity_back.xml b/lib/base/src/main/res/layout/activity_back.xml index 5747922950..848cc885fe 100644 --- a/lib/base/src/main/res/layout/activity_back.xml +++ b/lib/base/src/main/res/layout/activity_back.xml @@ -1,26 +1,26 @@ - - - - + - - - + + diff --git a/lib/base/src/main/res/layout/activity_drawer.xml b/lib/base/src/main/res/layout/activity_drawer.xml index 1fec3fc953..697e83f643 100644 --- a/lib/base/src/main/res/layout/activity_drawer.xml +++ b/lib/base/src/main/res/layout/activity_drawer.xml @@ -1,5 +1,5 @@ - - - + diff --git a/subutil/lib/build.gradle b/subutil/lib/build.gradle index a8b9264e6c..8f8aa8198f 100644 --- a/subutil/lib/build.gradle +++ b/subutil/lib/build.gradle @@ -1,7 +1,7 @@ apply { from "${rootDir.path}/config_lib.gradle" - plugin "tech.harmonysoft.oss.traute" +// plugin "tech.harmonysoft.oss.traute" plugin "com.github.dcendents.android-maven" plugin "com.jfrog.bintray" plugin "readme-sub" @@ -13,8 +13,8 @@ readme { } dependencies { - compileOnly dep.support.appcompat_v7 - compileOnly dep.support.design + compileOnly dep.appcompat + compileOnly dep.design api(dep.glide) { exclude group: "com.android.support" } diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/LocationUtils.java b/subutil/lib/src/main/java/com/blankj/subutil/util/LocationUtils.java index 7ee8747902..0c177b534c 100755 --- a/subutil/lib/src/main/java/com/blankj/subutil/util/LocationUtils.java +++ b/subutil/lib/src/main/java/com/blankj/subutil/util/LocationUtils.java @@ -11,7 +11,7 @@ import android.location.LocationProvider; import android.os.Bundle; import android.provider.Settings; -import android.support.annotation.RequiresPermission; +import androidx.annotation.RequiresPermission; import android.util.Log; import java.io.IOException; diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/PinyinUtils.java b/subutil/lib/src/main/java/com/blankj/subutil/util/PinyinUtils.java index 22486b3a91..934408c65e 100644 --- a/subutil/lib/src/main/java/com/blankj/subutil/util/PinyinUtils.java +++ b/subutil/lib/src/main/java/com/blankj/subutil/util/PinyinUtils.java @@ -1,6 +1,6 @@ package com.blankj.subutil.util; -import android.support.v4.util.SimpleArrayMap; +import androidx.collection.SimpleArrayMap; /** *
diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/Utils.java b/subutil/lib/src/main/java/com/blankj/subutil/util/Utils.java
index 9cbf4e06fd..91b336abcf 100644
--- a/subutil/lib/src/main/java/com/blankj/subutil/util/Utils.java
+++ b/subutil/lib/src/main/java/com/blankj/subutil/util/Utils.java
@@ -7,8 +7,8 @@
 import android.content.Context;
 import android.database.Cursor;
 import android.net.Uri;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 
 import java.lang.reflect.InvocationTargetException;
 
diff --git a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt b/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt
index 45e67a4a0d..9eba25c622 100644
--- a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt
+++ b/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt
@@ -1,6 +1,6 @@
 package com.blankj.subutil.pkg.helper
 
-import android.support.v7.app.AlertDialog
+import androidx.appcompat.app.AlertDialog
 import com.blankj.subutil.pkg.R
 import com.blankj.utilcode.util.ActivityUtils
 import com.blankj.utilcode.util.PermissionUtils
diff --git a/utilcode/lib/build.gradle b/utilcode/lib/build.gradle
index 3570124816..41b0dacaa4 100644
--- a/utilcode/lib/build.gradle
+++ b/utilcode/lib/build.gradle
@@ -1,7 +1,7 @@
 apply {
     from "${rootDir.path}/config_lib.gradle"
 
-    plugin "tech.harmonysoft.oss.traute"
+//    plugin "tech.harmonysoft.oss.traute"
     plugin "com.github.dcendents.android-maven"
     plugin "com.jfrog.bintray"
     plugin "readme-core"
@@ -17,10 +17,10 @@ apply from: "${rootDir.path}/gradle/bintrayUploadAndroid.gradle"
 dependencies {
     compile dep.gson
 
-    compileOnly dep.support.appcompat_v7
-    compileOnly dep.support.design
+    compileOnly dep.appcompat
+    compileOnly dep.design
 
     testImplementation dep.junit
     testImplementation dep.robolectric
-    testImplementation dep.support.appcompat_v7
+    testImplementation dep.appcompat
 }
\ No newline at end of file
diff --git a/utilcode/lib/project.properties b/utilcode/lib/project.properties
index 22ae3b8603..d0f2a3f7e0 100644
--- a/utilcode/lib/project.properties
+++ b/utilcode/lib/project.properties
@@ -1,7 +1,7 @@
 #project
 project.name=UtilCode
 project.groupId=com.blankj
-project.artifactId=utilcode
+project.artifactId=utilcodex
 project.packaging=aar
 project.siteUrl=https://github.com/Blankj/AndroidUtilCode
 project.gitUrl=https://github.com/Blankj/AndroidUtilCode.git
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/MemoryConstants.java b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/MemoryConstants.java
index b68bfcb113..5c05c0163e 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/MemoryConstants.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/MemoryConstants.java
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.constant;
 
-import android.support.annotation.IntDef;
+import androidx.annotation.IntDef;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/PermissionConstants.java b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/PermissionConstants.java
index 76f7e9a217..6db826e4ab 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/PermissionConstants.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/PermissionConstants.java
@@ -4,7 +4,7 @@
 import android.Manifest.permission;
 import android.annotation.SuppressLint;
 import android.os.Build;
-import android.support.annotation.StringDef;
+import androidx.annotation.StringDef;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/TimeConstants.java b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/TimeConstants.java
index 9932037bf8..45090576e3 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/TimeConstants.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/TimeConstants.java
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.constant;
 
-import android.support.annotation.IntDef;
+import androidx.annotation.IntDef;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ActivityUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ActivityUtils.java
index 4b8a9a07b5..9dd16d6e48 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ActivityUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ActivityUtils.java
@@ -10,15 +10,16 @@
 import android.graphics.drawable.Drawable;
 import android.os.Build;
 import android.os.Bundle;
-import android.support.annotation.AnimRes;
-import android.support.annotation.NonNull;
-import android.support.v4.app.ActivityOptionsCompat;
-import android.support.v4.util.Pair;
 import android.util.Log;
 import android.view.View;
 
 import java.util.List;
 
+import androidx.annotation.AnimRes;
+import androidx.annotation.NonNull;
+import androidx.core.app.ActivityOptionsCompat;
+import androidx.core.util.Pair;
+
 /**
  * 
  *     author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/AntiShakeUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/AntiShakeUtils.java
index 7e87e73474..ca9036225e 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/AntiShakeUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/AntiShakeUtils.java
@@ -1,9 +1,10 @@
 package com.blankj.utilcode.util;
 
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
 import android.view.View;
 
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+
 /**
  * 
  *     author: blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/AppUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/AppUtils.java
index 136f27b5ed..357c423fc6 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/AppUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/AppUtils.java
@@ -17,8 +17,6 @@
 import android.net.Uri;
 import android.os.Build;
 import android.provider.Settings;
-import android.support.annotation.NonNull;
-import android.support.v4.content.FileProvider;
 import android.util.Log;
 
 import java.io.File;
@@ -27,6 +25,9 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import androidx.annotation.NonNull;
+import androidx.core.content.FileProvider;
+
 /**
  * 
  *     author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BarUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/BarUtils.java
index 7b5509b2b5..22178a5c20 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BarUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/BarUtils.java
@@ -8,11 +8,6 @@
 import android.graphics.Color;
 import android.graphics.Point;
 import android.os.Build;
-import android.support.annotation.ColorInt;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresApi;
-import android.support.annotation.RequiresPermission;
-import android.support.v4.widget.DrawerLayout;
 import android.util.Log;
 import android.util.TypedValue;
 import android.view.Display;
@@ -27,6 +22,12 @@
 
 import java.lang.reflect.Method;
 
+import androidx.annotation.ColorInt;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.RequiresPermission;
+import androidx.drawerlayout.widget.DrawerLayout;
+
 import static android.Manifest.permission.EXPAND_STATUS_BAR;
 
 /**
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java
index f9344b0a59..bacc519540 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java
@@ -2,11 +2,12 @@
 
 import android.content.ContentResolver;
 import android.provider.Settings;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
 import android.view.Window;
 import android.view.WindowManager;
 
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+
 /**
  * 
  *     author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java
index bb48a4b5cf..c5a9a17a6d 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java
@@ -3,13 +3,14 @@
 import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
 import android.os.Parcelable;
-import android.support.annotation.NonNull;
 
 import org.json.JSONArray;
 import org.json.JSONObject;
 
 import java.io.Serializable;
 
+import androidx.annotation.NonNull;
+
 /**
  * 
  *     author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskUtils.java
index 99aef6b078..2e6637febf 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskUtils.java
@@ -8,7 +8,6 @@
 import android.graphics.drawable.Drawable;
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.support.annotation.NonNull;
 import android.util.Log;
 
 import com.blankj.utilcode.constant.CacheConstants;
@@ -37,6 +36,8 @@
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicLong;
 
+import androidx.annotation.NonNull;
+
 /**
  * 
  *     author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleStaticUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleStaticUtils.java
index 2ef267bd01..6dbb9f7475 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleStaticUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleStaticUtils.java
@@ -3,13 +3,14 @@
 import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
 import android.os.Parcelable;
-import android.support.annotation.NonNull;
 
 import org.json.JSONArray;
 import org.json.JSONObject;
 
 import java.io.Serializable;
 
+import androidx.annotation.NonNull;
+
 /**
  * 
  *     author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java
index c800423c78..aca1c25837 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java
@@ -3,7 +3,7 @@
 import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
 import android.os.Parcelable;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 import com.blankj.utilcode.constant.CacheConstants;
 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryStaticUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryStaticUtils.java
index 56abfba117..aedcfa7fc4 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryStaticUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryStaticUtils.java
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.util;
 
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 /**
  * 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryUtils.java
index d0e06e394d..ddaa2baed9 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryUtils.java
@@ -1,7 +1,7 @@
 package com.blankj.utilcode.util;
 
-import android.support.annotation.NonNull;
-import android.support.v4.util.LruCache;
+import androidx.annotation.NonNull;
+import androidx.collection.LruCache;
 
 import com.blankj.utilcode.constant.CacheConstants;
 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ColorUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ColorUtils.java
index 4c0c22232b..a6603cfc44 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ColorUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ColorUtils.java
@@ -1,12 +1,12 @@
 package com.blankj.utilcode.util;
 
 import android.graphics.Color;
-import android.support.annotation.ColorInt;
-import android.support.annotation.ColorRes;
-import android.support.annotation.FloatRange;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
-import android.support.v4.content.ContextCompat;
+import androidx.annotation.ColorInt;
+import androidx.annotation.ColorRes;
+import androidx.annotation.FloatRange;
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+import androidx.core.content.ContextCompat;
 
 /**
  * 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CrashUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CrashUtils.java
index 9ef930c467..a096321cf4 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CrashUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CrashUtils.java
@@ -5,8 +5,8 @@
 import android.content.pm.PackageManager;
 import android.os.Build;
 import android.os.Environment;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresPermission;
 import android.util.Log;
 
 import java.io.BufferedWriter;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/DeviceUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/DeviceUtils.java
index c1c2c3c76e..d0c1788a02 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/DeviceUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/DeviceUtils.java
@@ -8,8 +8,8 @@
 import android.os.Build;
 import android.os.PowerManager;
 import android.provider.Settings;
-import android.support.annotation.RequiresApi;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.RequiresPermission;
 import android.text.TextUtils;
 
 import java.io.File;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/FragmentUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/FragmentUtils.java
index 43b8537e75..9e8ae14ef1 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/FragmentUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/FragmentUtils.java
@@ -3,16 +3,6 @@
 import android.graphics.drawable.Drawable;
 import android.os.Build;
 import android.os.Bundle;
-import android.support.annotation.AnimRes;
-import android.support.annotation.AnimatorRes;
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.IdRes;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentTransaction;
 import android.util.Log;
 import android.view.View;
 
@@ -20,6 +10,17 @@
 import java.util.Collections;
 import java.util.List;
 
+import androidx.annotation.AnimRes;
+import androidx.annotation.AnimatorRes;
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.IdRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
 /**
  * 
  *     author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ImageUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ImageUtils.java
index 83e01eb1ad..cbee7dd4bd 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ImageUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ImageUtils.java
@@ -27,13 +27,13 @@
 import android.renderscript.Element;
 import android.renderscript.RenderScript;
 import android.renderscript.ScriptIntrinsicBlur;
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.FloatRange;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresApi;
-import android.support.v4.content.ContextCompat;
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.FloatRange;
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.core.content.ContextCompat;
 import android.view.View;
 
 import java.io.BufferedOutputStream;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/IntentUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/IntentUtils.java
index 6faa37d043..1e26dc8a9a 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/IntentUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/IntentUtils.java
@@ -8,8 +8,8 @@
 import android.os.Bundle;
 import android.provider.MediaStore;
 import android.provider.Settings;
-import android.support.annotation.RequiresPermission;
-import android.support.v4.content.FileProvider;
+import androidx.annotation.RequiresPermission;
+import androidx.core.content.FileProvider;
 
 import java.io.File;
 import java.util.ArrayList;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java
index e1e2e78600..f5d814207d 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java
@@ -12,10 +12,10 @@
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Environment;
-import android.support.annotation.IntDef;
-import android.support.annotation.IntRange;
-import android.support.annotation.RequiresApi;
-import android.support.v4.util.SimpleArrayMap;
+import androidx.annotation.IntDef;
+import androidx.annotation.IntRange;
+import androidx.annotation.RequiresApi;
+import androidx.collection.SimpleArrayMap;
 import android.util.Log;
 
 import com.google.gson.Gson;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java
index 6f6cf85b80..bd4b8da935 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java
@@ -8,7 +8,7 @@
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.ServiceInfo;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 /**
  * 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/NetworkUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/NetworkUtils.java
index f281d777c2..3171837f46 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/NetworkUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/NetworkUtils.java
@@ -7,7 +7,7 @@
 import android.net.NetworkInfo;
 import android.net.wifi.WifiManager;
 import android.os.Build;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.RequiresPermission;
 import android.telephony.TelephonyManager;
 import android.text.format.Formatter;
 import android.util.Log;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/NotificationUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/NotificationUtils.java
index b8163d2e66..73a900b465 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/NotificationUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/NotificationUtils.java
@@ -5,9 +5,9 @@
 import android.app.PendingIntent;
 import android.content.Context;
 import android.content.Intent;
-import android.support.annotation.Nullable;
-import android.support.v4.app.NotificationCompat;
-import android.support.v4.app.NotificationManagerCompat;
+import androidx.annotation.Nullable;
+import androidx.core.app.NotificationCompat;
+import androidx.core.app.NotificationManagerCompat;
 
 /**
  * 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ObjectUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ObjectUtils.java
index be5491ece0..3c0c087a39 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ObjectUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ObjectUtils.java
@@ -1,9 +1,9 @@
 package com.blankj.utilcode.util;
 
 import android.os.Build;
-import android.support.annotation.RequiresApi;
-import android.support.v4.util.LongSparseArray;
-import android.support.v4.util.SimpleArrayMap;
+import androidx.annotation.RequiresApi;
+import androidx.collection.LongSparseArray;
+import androidx.collection.SimpleArrayMap;
 import android.util.SparseArray;
 import android.util.SparseBooleanArray;
 import android.util.SparseIntArray;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/PermissionUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/PermissionUtils.java
index 235a0f3f94..1cb3df0156 100755
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/PermissionUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/PermissionUtils.java
@@ -10,10 +10,10 @@
 import android.os.Build;
 import android.os.Bundle;
 import android.provider.Settings;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RequiresApi;
-import android.support.v4.content.ContextCompat;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.core.content.ContextCompat;
 import android.util.Log;
 import android.view.MotionEvent;
 import android.view.WindowManager;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/PhoneUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/PhoneUtils.java
index 99068781a4..f407f81b5f 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/PhoneUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/PhoneUtils.java
@@ -7,7 +7,7 @@
 import android.content.pm.PackageManager;
 import android.net.Uri;
 import android.os.Build;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.RequiresPermission;
 import android.telephony.SmsManager;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ProcessUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ProcessUtils.java
index 7db75522d9..00c2bf6f73 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ProcessUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ProcessUtils.java
@@ -10,8 +10,8 @@
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.provider.Settings;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresPermission;
 import android.util.Log;
 
 import java.io.BufferedReader;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/RegexUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/RegexUtils.java
index ba57fab956..817a94149f 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/RegexUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/RegexUtils.java
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.util;
 
-import android.support.v4.util.SimpleArrayMap;
+import androidx.collection.SimpleArrayMap;
 
 import com.blankj.utilcode.constant.RegexConstants;
 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ResourceUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ResourceUtils.java
index 92424163bb..ee41e95958 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ResourceUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ResourceUtils.java
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.util;
 
-import android.support.annotation.RawRes;
+import androidx.annotation.RawRes;
 
 import java.io.BufferedOutputStream;
 import java.io.BufferedReader;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPStaticUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPStaticUtils.java
index d3e21fb873..21274c3023 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPStaticUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPStaticUtils.java
@@ -1,7 +1,7 @@
 package com.blankj.utilcode.util;
 
 import android.content.SharedPreferences;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 import java.util.Map;
 import java.util.Set;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPUtils.java
index 554a2ed586..a9d18a1a55 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPUtils.java
@@ -3,7 +3,7 @@
 import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.SharedPreferences;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 import java.util.Collections;
 import java.util.HashMap;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ScreenUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ScreenUtils.java
index c3e089a90f..f55e4a21db 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ScreenUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ScreenUtils.java
@@ -7,12 +7,11 @@
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
-import android.graphics.Canvas;
 import android.graphics.Point;
 import android.os.Build;
 import android.provider.Settings;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresPermission;
 import android.util.DisplayMetrics;
 import android.view.Surface;
 import android.view.View;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java
index b164e6154e..eab1990d29 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java
@@ -1,12 +1,12 @@
 package com.blankj.utilcode.util;
 
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.IntDef;
-import android.support.annotation.IntRange;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.NonNull;
-import android.support.design.widget.Snackbar;
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.IntDef;
+import androidx.annotation.IntRange;
+import androidx.annotation.LayoutRes;
+import androidx.annotation.NonNull;
+import com.google.android.material.snackbar.Snackbar;
 import android.text.SpannableString;
 import android.text.Spanned;
 import android.text.style.ForegroundColorSpan;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SpanUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SpanUtils.java
index 641204fd63..d79cf9262b 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SpanUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SpanUtils.java
@@ -14,14 +14,14 @@
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.FloatRange;
-import android.support.annotation.IntDef;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.content.ContextCompat;
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.FloatRange;
+import androidx.annotation.IntDef;
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.core.content.ContextCompat;
 import android.text.Layout;
 import android.text.Layout.Alignment;
 import android.text.SpannableStringBuilder;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/StringUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/StringUtils.java
index c3254e3d32..70f0defe50 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/StringUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/StringUtils.java
@@ -1,8 +1,8 @@
 package com.blankj.utilcode.util;
 
 import android.content.res.Resources;
-import android.support.annotation.ArrayRes;
-import android.support.annotation.StringRes;
+import androidx.annotation.ArrayRes;
+import androidx.annotation.StringRes;
 
 /**
  * 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ThreadUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ThreadUtils.java
index ba7122e366..819af790e8 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ThreadUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ThreadUtils.java
@@ -2,9 +2,6 @@
 
 import android.os.Handler;
 import android.os.Looper;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
 import android.util.Log;
 import android.util.SparseArray;
 
@@ -21,6 +18,10 @@
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicLong;
 
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
 /**
  * 
  *     author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/TimeUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/TimeUtils.java
index adaa920474..a5286b0fbe 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/TimeUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/TimeUtils.java
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.util;
 
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 import com.blankj.utilcode.constant.TimeConstants;
 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java
index b4fe658945..b25360e52c 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java
@@ -14,11 +14,11 @@
 import android.os.Handler;
 import android.os.Looper;
 import android.os.Message;
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.StringRes;
-import android.support.v4.app.NotificationManagerCompat;
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.LayoutRes;
+import androidx.annotation.StringRes;
+import androidx.core.app.NotificationManagerCompat;
 import android.util.Log;
 import android.view.Gravity;
 import android.view.LayoutInflater;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/UriUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/UriUtils.java
index 98f3ef66a8..8e4fd9d09c 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/UriUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/UriUtils.java
@@ -8,12 +8,14 @@
 import android.os.Environment;
 import android.provider.DocumentsContract;
 import android.provider.MediaStore;
-import android.support.annotation.NonNull;
-import android.support.v4.content.FileProvider;
+import android.text.TextUtils;
 import android.util.Log;
 
 import java.io.File;
 
+import androidx.annotation.NonNull;
+import androidx.core.content.FileProvider;
+
 /**
  * 
  *     author: Blankj
@@ -70,12 +72,19 @@ public static File uri2File(@NonNull final Uri uri) {
                 Log.d("UriUtils", uri.toString() + " parse failed. -> 1");
                 return null;
             } else if ("com.android.providers.downloads.documents".equals(authority)) {
-                final String id = DocumentsContract.getDocumentId(uri);
-                final Uri contentUri = ContentUris.withAppendedId(
-                        Uri.parse("content://downloads/public_downloads"),
-                        Long.valueOf(id)
-                );
-                return getFileFromUri(contentUri, 2);
+                String id = DocumentsContract.getDocumentId(uri);
+                if (!TextUtils.isEmpty(id)) {
+                    if (id.startsWith("raw:")) {
+                        return new File(id.substring(4));
+                    }
+                    final Uri contentUri = ContentUris.withAppendedId(
+                            Uri.parse(Environment.DIRECTORY_DOWNLOADS),
+                            Long.valueOf(id)
+                    );
+                    return getFileFromUri(contentUri, 2);
+                }
+                Log.d("UriUtils", uri.toString() + " parse failed. -> 3");
+                return null;
             } else if ("com.android.providers.media.documents".equals(authority)) {
                 final String docId = DocumentsContract.getDocumentId(uri);
                 final String[] split = docId.split(":");
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/Utils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/Utils.java
index 52b82376e1..d858e4ad22 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/Utils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/Utils.java
@@ -7,7 +7,7 @@
 import android.app.Application.ActivityLifecycleCallbacks;
 import android.content.Context;
 import android.os.Bundle;
-import android.support.v4.content.FileProvider;
+import androidx.core.content.FileProvider;
 import android.view.View;
 import android.view.inputmethod.InputMethodManager;
 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java
index a57bbb8241..622d657817 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java
@@ -2,7 +2,7 @@
 
 import android.content.Context;
 import android.os.Vibrator;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.RequiresPermission;
 
 import static android.Manifest.permission.VIBRATE;
 
diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/ObjectUtilsTest.java b/utilcode/lib/src/test/java/com/blankj/utilcode/util/ObjectUtilsTest.java
index a0203f78fc..ed12c24d8d 100644
--- a/utilcode/lib/src/test/java/com/blankj/utilcode/util/ObjectUtilsTest.java
+++ b/utilcode/lib/src/test/java/com/blankj/utilcode/util/ObjectUtilsTest.java
@@ -1,7 +1,5 @@
 package com.blankj.utilcode.util;
 
-import android.support.v4.util.LongSparseArray;
-import android.support.v4.util.SimpleArrayMap;
 import android.util.SparseArray;
 import android.util.SparseBooleanArray;
 import android.util.SparseIntArray;
@@ -12,6 +10,9 @@
 import java.util.HashMap;
 import java.util.LinkedList;
 
+import androidx.collection.LongSparseArray;
+import androidx.collection.SimpleArrayMap;
+
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt
index 5ace21f5b1..f3d3600a27 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt
@@ -6,7 +6,7 @@ import android.graphics.Bitmap
 import android.graphics.drawable.BitmapDrawable
 import android.os.Build
 import android.os.Bundle
-import android.support.v4.app.ActivityOptionsCompat
+import androidx.core.app.ActivityOptionsCompat
 import android.view.View
 import android.view.Window
 import com.blankj.lib.base.BaseTitleBarActivity
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt
index 4815032936..864f1c12b4 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt
@@ -2,7 +2,7 @@ package com.blankj.utilcode.pkg.feature.activity
 
 import android.os.Build
 import android.os.Bundle
-import android.support.v4.app.ActivityCompat
+import androidx.core.app.ActivityCompat
 import android.view.View
 import android.view.Window
 import com.blankj.lib.base.BaseTitleBarActivity
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt
index b2633ddf5c..0dac18c72c 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt
@@ -3,10 +3,10 @@ package com.blankj.utilcode.pkg.feature.bar
 import android.content.Context
 import android.content.Intent
 import android.os.Bundle
-import android.support.design.widget.BottomNavigationView
-import android.support.v4.app.Fragment
-import android.support.v4.app.FragmentPagerAdapter
-import android.support.v4.view.ViewPager
+import com.google.android.material.bottomnavigation.BottomNavigationView
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentPagerAdapter
+import androidx.viewpager.widget.ViewPager
 import android.view.View
 import com.blankj.lib.base.BaseActivity
 import com.blankj.utilcode.pkg.R
@@ -37,7 +37,7 @@ class BarStatusFragmentActivity : BaseActivity() {
             R.id.barStatusFragmentNavigationCustom
     )
 
-    private val mFragmentList = ArrayList()
+    private val mFragmentList = ArrayList()
 
     private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener l@{ item ->
         when (item.itemId) {
@@ -78,8 +78,8 @@ class BarStatusFragmentActivity : BaseActivity() {
         mFragmentList.add(BarStatusCustomFragment.newInstance())
 
         barStatusFragmentVp.offscreenPageLimit = 3
-        barStatusFragmentVp.adapter = object : FragmentPagerAdapter(supportFragmentManager) {
-            override fun getItem(position: Int): Fragment {
+        barStatusFragmentVp.adapter = object : androidx.fragment.app.FragmentPagerAdapter(supportFragmentManager) {
+            override fun getItem(position: Int): androidx.fragment.app.Fragment {
                 return mFragmentList[position]
             }
 
@@ -88,7 +88,7 @@ class BarStatusFragmentActivity : BaseActivity() {
             }
         }
 
-        barStatusFragmentVp.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+        barStatusFragmentVp.addOnPageChangeListener(object : androidx.viewpager.widget.ViewPager.OnPageChangeListener {
             override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}
 
             override fun onPageSelected(position: Int) {
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt
index ca0289a158..117c7d121e 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt
@@ -2,8 +2,8 @@ package com.blankj.utilcode.pkg.feature.fragment
 
 import android.os.Build
 import android.os.Bundle
-import android.support.annotation.RequiresApi
-import android.support.v4.app.Fragment
+import androidx.annotation.RequiresApi
+import androidx.fragment.app.Fragment
 import android.transition.*
 import android.view.View
 import com.blankj.lib.base.BaseLazyFragment
@@ -129,7 +129,7 @@ class ContainerFragment : BaseLazyFragment(), FragmentUtils.OnBackClickListener
         }
     }
 
-    private fun addSharedElement(fragment: Fragment): Fragment {
+    private fun addSharedElement(fragment: androidx.fragment.app.Fragment): androidx.fragment.app.Fragment {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
             fragment.sharedElementEnterTransition = DetailTransition()
             fragment.enterTransition = Fade()
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt
index b768f563e5..6e3137b9c6 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt
@@ -4,8 +4,8 @@ import android.content.Context
 import android.content.Intent
 import android.os.Bundle
 import android.os.PersistableBundle
-import android.support.design.widget.BottomNavigationView
-import android.support.v4.app.Fragment
+import com.google.android.material.bottomnavigation.BottomNavigationView
+import androidx.fragment.app.Fragment
 import android.view.View
 import com.blankj.lib.base.BaseActivity
 import com.blankj.utilcode.pkg.R
@@ -30,7 +30,7 @@ class FragmentActivity : BaseActivity() {
         }
     }
 
-    private val mFragments = arrayListOf()
+    private val mFragments = arrayListOf()
     private var curIndex: Int = 0
 
     private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt
index 496c5a4032..636d92c030 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt
@@ -6,9 +6,9 @@ import android.graphics.Bitmap
 import android.graphics.Color
 import android.os.Build
 import android.os.Bundle
-import android.support.annotation.LayoutRes
-import android.support.annotation.StringRes
-import android.support.v7.widget.LinearLayoutManager
+import androidx.annotation.LayoutRes
+import androidx.annotation.StringRes
+import androidx.recyclerview.widget.LinearLayoutManager
 import android.view.View
 import android.widget.ImageView
 import android.widget.TextView
@@ -92,7 +92,7 @@ class ImageActivity : BaseActivity() {
         }
 
         imageRv.adapter = ImageAdapter(mList, R.layout.item_image)
-        imageRv.layoutManager = LinearLayoutManager(this)
+        imageRv.layoutManager = androidx.recyclerview.widget.LinearLayoutManager(this)
     }
 
     override fun doBusiness() {}
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt
index 4bd07d274e..34d3914fe1 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt
@@ -4,7 +4,7 @@ import android.content.Context
 import android.content.Intent
 import android.graphics.Color
 import android.os.Bundle
-import android.support.annotation.StringRes
+import androidx.annotation.StringRes
 import android.text.SpannableStringBuilder
 import android.view.View
 import android.view.ViewGroup
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt
index f3a1a3ee02..7c5fd45308 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt
@@ -5,7 +5,7 @@ import android.content.Context
 import android.content.Intent
 import android.graphics.*
 import android.os.Bundle
-import android.support.annotation.ColorInt
+import androidx.annotation.ColorInt
 import android.text.Layout
 import android.text.SpannableStringBuilder
 import android.text.TextPaint
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt
index 314ba33d59..458ecbb3fb 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt
@@ -2,7 +2,7 @@ package com.blankj.utilcode.pkg.feature.toast
 
 import android.os.Handler
 import android.os.Looper
-import android.support.annotation.StringRes
+import androidx.annotation.StringRes
 import android.widget.TextView
 import android.widget.Toast
 
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt
index ea6c10c24d..40055d14b9 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt
@@ -4,7 +4,7 @@ import android.content.Context
 import android.content.Intent
 import android.graphics.Color
 import android.os.Bundle
-import android.support.v4.content.ContextCompat
+import androidx.core.content.ContextCompat
 import android.view.Gravity
 import android.view.View
 import com.blankj.lib.base.BaseTitleBarActivity
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt
index 7e6094414a..c3247b1312 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.pkg.helper
 
-import android.support.v7.app.AlertDialog
+import androidx.appcompat.app.AlertDialog
 import android.text.method.ScrollingMovementMethod
 import android.view.LayoutInflater
 import android.view.View
diff --git a/utilcode/pkg/src/main/res/layout/activity_adaptscreen.xml b/utilcode/pkg/src/main/res/layout/activity_adaptscreen.xml
index 003c6f5840..e33848b84d 100644
--- a/utilcode/pkg/src/main/res/layout/activity_adaptscreen.xml
+++ b/utilcode/pkg/src/main/res/layout/activity_adaptscreen.xml
@@ -1,5 +1,5 @@
 
-
 
-
+
diff --git a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_close.xml b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_close.xml
index c3f88ecba3..e43cbb2bb5 100644
--- a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_close.xml
+++ b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_close.xml
@@ -8,7 +8,7 @@
     android:background="@color/white"
     tools:context=".feature.adaptScreen.CloseAdaptActivity">
 
-    
 
@@ -42,6 +42,6 @@
             android:textSize="30pt"
             app:layout_constraintTop_toBottomOf="@id/adaptScreenCloseAdaptDpTv" />
 
-    
+    
 
 
\ No newline at end of file
diff --git a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_height.xml b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_height.xml
index 0b207d97f5..07c76be55b 100644
--- a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_height.xml
+++ b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_height.xml
@@ -8,7 +8,7 @@
     android:background="@color/white"
     tools:context=".feature.adaptScreen.HeightActivity">
 
-    
 
@@ -94,6 +94,6 @@
         
 
 
-    
+    
 
 
\ No newline at end of file
diff --git a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_width.xml b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_width.xml
index 46e0f2f1a2..5a791d924f 100644
--- a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_width.xml
+++ b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_width.xml
@@ -8,7 +8,7 @@
     android:background="@color/white"
     tools:context=".feature.adaptScreen.WidthActivity">
 
-    
 
@@ -147,6 +147,6 @@
 
         
 
-    
+    
 
 
\ No newline at end of file
diff --git a/utilcode/pkg/src/main/res/layout/activity_bar_status_fragment.xml b/utilcode/pkg/src/main/res/layout/activity_bar_status_fragment.xml
index c5f975b58f..1a36770b58 100644
--- a/utilcode/pkg/src/main/res/layout/activity_bar_status_fragment.xml
+++ b/utilcode/pkg/src/main/res/layout/activity_bar_status_fragment.xml
@@ -7,7 +7,7 @@
     android:background="@color/white"
     android:orientation="vertical">
 
-    
 
-    
 
-    
 
-    

From 70b6089109b6e58734d0a500820f54cb41858eba Mon Sep 17 00:00:00 2001
From: Blankj <625783482@qq.com>
Date: Fri, 8 Mar 2019 18:07:14 +0800
Subject: [PATCH 002/181] see 03/08 log

---
 utilcode/README-CN.md | 3 +++
 utilcode/README.md    | 3 +++
 2 files changed, 6 insertions(+)

diff --git a/utilcode/README-CN.md b/utilcode/README-CN.md
index f3756be966..7fc06ebf99 100644
--- a/utilcode/README-CN.md
+++ b/utilcode/README-CN.md
@@ -3,6 +3,9 @@
 Gradle:
 ```groovy
 implementation 'com.blankj:utilcode:1.23.7'
+
+// if u use AndroidX, use the following
+implementation 'com.blankj:utilcodex:1.23.7'
 ```
 
 
diff --git a/utilcode/README.md b/utilcode/README.md
index 75d8757892..094cc44c08 100644
--- a/utilcode/README.md
+++ b/utilcode/README.md
@@ -3,6 +3,9 @@
 Gradle:
 ```groovy
 implementation 'com.blankj:utilcode:1.23.7'
+
+// if u use AndroidX, use the following
+implementation 'com.blankj:utilcodex:1.23.7'
 ```
 
 

From 2fa66306221456a5be12d9d201c7495958596fb4 Mon Sep 17 00:00:00 2001
From: Blankj <625783482@qq.com>
Date: Mon, 11 Mar 2019 20:45:31 +0800
Subject: [PATCH 003/181] see 03/11 log

---
 utilcode/lib/project.properties | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/utilcode/lib/project.properties b/utilcode/lib/project.properties
index d0f2a3f7e0..d238eda740 100644
--- a/utilcode/lib/project.properties
+++ b/utilcode/lib/project.properties
@@ -1,9 +1,9 @@
 #project
-project.name=UtilCode
+project.name=UtilCodeX
 project.groupId=com.blankj
 project.artifactId=utilcodex
 project.packaging=aar
 project.siteUrl=https://github.com/Blankj/AndroidUtilCode
 project.gitUrl=https://github.com/Blankj/AndroidUtilCode.git
 #javadoc
-javadoc.name=UtilCode
\ No newline at end of file
+javadoc.name=UtilCodeX
\ No newline at end of file

From 6b0ff9575675cf0ae15c9c9a85eb249b5591c3a8 Mon Sep 17 00:00:00 2001
From: Blankj <625783482@qq.com>
Date: Mon, 3 Jun 2019 20:49:21 +0800
Subject: [PATCH 004/181] see 06/03 log

---
 .gitignore                                    |  2 +-
 CHANGELOG.md                                  |  1 +
 gradle.properties                             |  8 +++++-
 gradle/config/config.gradle                   | 10 ++++----
 gradle/config/configApp.gradle                |  5 +++-
 launcher/app/build.gradle                     |  6 ++---
 launcher/pkg/build.gradle                     |  2 +-
 .../com/blankj/launcher/pkg/MainActivity.kt   |  2 +-
 .../pkg/src/main/res/layout/activity_main.xml | 18 ++++++-------
 lib/base/build.gradle                         |  2 +-
 .../com/blankj/lib/base/BaseActivity.java     |  5 ++--
 .../com/blankj/lib/base/BaseApplication.java  |  3 ++-
 .../blankj/lib/base/BaseDrawerActivity.java   | 11 ++++----
 .../com/blankj/lib/base/BaseFragment.java     | 13 +++++-----
 .../blankj/lib/base/BaseTitleActivity.java    |  9 ++++---
 .../java/com/blankj/lib/base/IBaseView.java   |  5 ++--
 .../com/blankj/lib/base/rv/BaseAdapter.java   |  5 ++--
 .../java/com/blankj/lib/base/rv/BaseCell.java |  3 ++-
 .../blankj/lib/base/rv/BaseViewHolder.java    |  4 +--
 .../lib/base/rv/RecycleViewDivider.java       | 10 ++++----
 .../main/res/layout/activity_base_title.xml   | 11 ++++----
 .../activity_base_title_stub_scroll.xml       |  4 +--
 .../src/main/res/layout/activity_drawer.xml   |  6 ++---
 subutil/app/build.gradle                      |  2 +-
 subutil/lib/build.gradle                      |  2 +-
 .../blankj/subutil/util/LocationUtils.java    |  2 +-
 .../com/blankj/subutil/util/PinyinUtils.java  |  2 +-
 .../java/com/blankj/subutil/util/Utils.java   |  4 +--
 .../subutil/util/http/ExecutorFactory.java    |  3 ++-
 .../blankj/subutil/util/http/HttpUtils.java   |  3 ++-
 .../com/blankj/subutil/util/http/Request.java |  3 ++-
 .../blankj/subutil/util/http/SSLConfig.java   |  3 ++-
 subutil/pkg/build.gradle                      |  2 +-
 .../blankj/subutil/pkg/helper/DialogHelper.kt |  2 +-
 utilcode/README-CN.md                         |  2 +-
 utilcode/README.md                            |  2 +-
 utilcode/app/build.gradle                     |  2 +-
 utilcode/lib/build.gradle                     |  2 +-
 utilcode/lib/project.properties               |  6 ++---
 .../utilcode/constant/MemoryConstants.java    |  2 +-
 .../constant/PermissionConstants.java         |  2 +-
 .../utilcode/constant/TimeConstants.java      |  2 +-
 .../blankj/utilcode/util/ActivityUtils.java   | 11 ++++----
 .../blankj/utilcode/util/AntiShakeUtils.java  |  5 ++--
 .../com/blankj/utilcode/util/AppUtils.java    |  5 ++--
 .../com/blankj/utilcode/util/BarUtils.java    | 11 ++++----
 .../blankj/utilcode/util/BrightnessUtils.java |  5 ++--
 .../com/blankj/utilcode/util/BusUtils.java    |  5 ++--
 .../utilcode/util/CacheDiskStaticUtils.java   |  3 ++-
 .../blankj/utilcode/util/CacheDiskUtils.java  |  3 ++-
 .../utilcode/util/CacheDoubleStaticUtils.java |  3 ++-
 .../utilcode/util/CacheDoubleUtils.java       |  2 +-
 .../utilcode/util/CacheMemoryStaticUtils.java |  2 +-
 .../utilcode/util/CacheMemoryUtils.java       |  4 +--
 .../com/blankj/utilcode/util/ColorUtils.java  | 12 ++++-----
 .../com/blankj/utilcode/util/CrashUtils.java  |  4 +--
 .../com/blankj/utilcode/util/DeviceUtils.java |  5 ++--
 .../blankj/utilcode/util/FragmentUtils.java   | 21 ++++++++--------
 .../com/blankj/utilcode/util/ImageUtils.java  | 14 +++++------
 .../com/blankj/utilcode/util/IntentUtils.java |  4 +--
 .../blankj/utilcode/util/KeyboardUtils.java   |  3 ++-
 .../com/blankj/utilcode/util/LogUtils.java    |  8 +++---
 .../blankj/utilcode/util/MetaDataUtils.java   |  2 +-
 .../blankj/utilcode/util/NetworkUtils.java    |  5 ++--
 .../utilcode/util/NotificationUtils.java      |  6 ++---
 .../com/blankj/utilcode/util/ObjectUtils.java |  6 ++---
 .../blankj/utilcode/util/PermissionUtils.java |  8 +++---
 .../com/blankj/utilcode/util/PhoneUtils.java  |  2 +-
 .../blankj/utilcode/util/ProcessUtils.java    |  4 +--
 .../com/blankj/utilcode/util/RegexUtils.java  |  2 +-
 .../blankj/utilcode/util/ResourceUtils.java   |  2 +-
 .../blankj/utilcode/util/SPStaticUtils.java   |  2 +-
 .../com/blankj/utilcode/util/SPUtils.java     |  2 +-
 .../com/blankj/utilcode/util/ScreenUtils.java |  4 +--
 .../com/blankj/utilcode/util/ShellUtils.java  |  2 +-
 .../blankj/utilcode/util/SnackbarUtils.java   | 14 +++++------
 .../com/blankj/utilcode/util/SpanUtils.java   | 16 ++++++------
 .../com/blankj/utilcode/util/StringUtils.java |  4 +--
 .../com/blankj/utilcode/util/ThreadUtils.java |  5 ++--
 .../com/blankj/utilcode/util/TimeUtils.java   |  2 +-
 .../com/blankj/utilcode/util/ToastUtils.java  | 10 ++++----
 .../com/blankj/utilcode/util/UriUtils.java    | 25 +++++++++++++------
 .../java/com/blankj/utilcode/util/Utils.java  |  3 ++-
 .../blankj/utilcode/util/VibrateUtils.java    |  2 +-
 .../com/blankj/utilcode/util/BaseTest.java    | 11 +++-----
 .../blankj/utilcode/util/ObjectUtilsTest.java |  5 ++--
 utilcode/pkg/build.gradle                     |  2 +-
 .../pkg/feature/activity/ActivityActivity.kt  |  2 +-
 .../feature/activity/SubActivityActivity.kt   |  2 +-
 .../feature/bar/BarStatusFragmentActivity.kt  | 16 ++++++------
 .../pkg/feature/fragment/ContainerFragment.kt |  6 ++---
 .../pkg/feature/fragment/FragmentActivity.kt  |  6 ++---
 .../pkg/feature/image/ImageActivity.kt        |  4 +--
 .../pkg/feature/snackbar/SnackbarActivity.kt  |  2 +-
 .../utilcode/pkg/feature/span/SpanActivity.kt |  2 +-
 .../utilcode/pkg/feature/toast/CustomToast.kt |  2 +-
 .../pkg/feature/toast/ToastActivity.kt        |  2 +-
 .../utilcode/pkg/helper/DialogHelper.kt       |  5 ++--
 .../main/res/layout/activity_adaptscreen.xml  |  4 +--
 .../res/layout/activity_adaptscreen_close.xml |  4 +--
 .../layout/activity_adaptscreen_height.xml    |  7 +++---
 .../res/layout/activity_adaptscreen_width.xml |  4 +--
 .../layout/activity_bar_status_fragment.xml   |  4 +--
 .../src/main/res/layout/activity_fragment.xml |  2 +-
 .../src/main/res/layout/activity_image.xml    |  3 +--
 105 files changed, 293 insertions(+), 253 deletions(-)

diff --git a/.gitignore b/.gitignore
index 201b88771a..193619553c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,4 +9,4 @@
 .externalNativeBuild
 /apk
 *.phrof
-/maven
+/busMaven
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 95dfb60cc3..9c48786e89 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,7 @@
 * `19/04/24` [upd] The swipe panel.
 * `19/03/17` [fix] The ugly UI.
 * `19/03/14` [fix] AdaptScreenUtils didn't work on some HaWei tablet.
+* `19/03/09` [fix] UriUtils#uri2File.
 * `19/03/08` [add] LogUtils support multi process. Publish v1.23.7.
 * `19/03/02` [fix] LogUtils#file.
 * `19/02/28` [fix] ImageUtils#calculateInSampleSize. Publish v1.23.6.
diff --git a/gradle.properties b/gradle.properties
index 110f0cb7ef..c209c08b84 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -19,4 +19,10 @@
 
 #org.gradle.jvmargs=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
 
-org.gradle.jvmargs=-XX:MaxHeapSize=1024m -Xmx1024m
\ No newline at end of file
+org.gradle.jvmargs=-Xmx8192m -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
+org.gradle.daemon=true
+org.gradle.configureondemand=true
+org.gradle.parallel=true
+
+android.enableJetifier=true
+android.useAndroidX=true
\ No newline at end of file
diff --git a/gradle/config/config.gradle b/gradle/config/config.gradle
index e455c4dba6..e8c793b6b3 100644
--- a/gradle/config/config.gradle
+++ b/gradle/config/config.gradle
@@ -5,7 +5,7 @@ gradle.ext {
     applicationId = 'com.blankj.androidutilcode'
     appName = 'Util'
 
-    compileSdkVersion = 27
+    compileSdkVersion = 28
     minSdkVersion = 14
     targetSdkVersion = 27
     versionCode = 1_024_000
@@ -13,8 +13,8 @@ gradle.ext {
 
     // lib version
     kotlin_version = '1.3.10'
-    support_version = '27.1.1'
     leakcanary_version = '1.6.3'
+    androidx_version = '1.0.0'
 
     dep = [:]
 
@@ -36,11 +36,11 @@ gradle.ext {
             subutil_lib                : new DepConfig(":subutil:lib"),
             subutil_pkg                : new DepConfig(":subutil:pkg"),
             utilcode_app               : new DepConfig(":utilcode:app"),
-            utilcode_lib               : new DepConfig(false, ":utilcode:lib", "com.blankj:utilcode:$versionName"),
+            utilcode_lib               : new DepConfig(true, ":utilcode:lib", "com.blankj:utilcode:$versionName"),
             utilcode_pkg               : new DepConfig(":utilcode:pkg"),
 
-            support_appcompat_v7       : new DepConfig("com.android.support:appcompat-v7:$support_version"),
-            support_design             : new DepConfig("com.android.support:design:$support_version"),
+            support_appcompat_v7       : new DepConfig("androidx.appcompat:appcompat:$androidx_version"),
+            support_material           : new DepConfig("com.google.android.material:material:$androidx_version"),
             support_multidex           : new DepConfig("com.android.support:multidex:1.0.2"),
 
             constraint                 : new DepConfig("com.android.support.constraint:constraint-layout:1.1.3"),
diff --git a/gradle/config/configApp.gradle b/gradle/config/configApp.gradle
index cb8d5a290a..809cb07cd4 100644
--- a/gradle/config/configApp.gradle
+++ b/gradle/config/configApp.gradle
@@ -42,8 +42,11 @@ android {
     }
 
     dexOptions {
+        preDexLibraries true
         javaMaxHeapSize "8g"
         maxProcessCount 8
+        incremental true
+        dexInProcess = true
     }
 }
 
@@ -57,7 +60,7 @@ dependencies {
 
 private String getSuffix() {
     if (project.path == ":launcher:app") return ""
-    return project.path.replace(":" , "_").substring(0, project.path.length() - 4)
+    return project.path.replace(":", "_").substring(0, project.path.length() - 4)
 }
 
 def configSigning(Project pro) {
diff --git a/launcher/app/build.gradle b/launcher/app/build.gradle
index eb9f8d906f..bf68fb45ff 100644
--- a/launcher/app/build.gradle
+++ b/launcher/app/build.gradle
@@ -4,7 +4,7 @@ apply {
 
 dependencies {
     implementation fileTree(dir: 'libs', include: ['*.jar'])
-    implementation project(':launcher:pkg')
-    implementation project(':subutil:pkg')
-    implementation project(':utilcode:pkg')
+    implementation gradle.ext.dep.launcher_pkg
+    implementation gradle.ext.dep.subutil_pkg
+    implementation gradle.ext.dep.utilcode_pkg
 }
\ No newline at end of file
diff --git a/launcher/pkg/build.gradle b/launcher/pkg/build.gradle
index 9fe360a5dd..881637b34a 100644
--- a/launcher/pkg/build.gradle
+++ b/launcher/pkg/build.gradle
@@ -4,5 +4,5 @@ apply {
 
 dependencies {
     implementation fileTree(dir: 'libs', include: ['*.jar'])
-    api project(':lib:base')
+    api gradle.ext.dep.lib_base
 }
\ No newline at end of file
diff --git a/launcher/pkg/src/main/java/com/blankj/launcher/pkg/MainActivity.kt b/launcher/pkg/src/main/java/com/blankj/launcher/pkg/MainActivity.kt
index 02491cd88d..0e9f0a8477 100644
--- a/launcher/pkg/src/main/java/com/blankj/launcher/pkg/MainActivity.kt
+++ b/launcher/pkg/src/main/java/com/blankj/launcher/pkg/MainActivity.kt
@@ -2,7 +2,7 @@ package com.blankj.launcher.pkg
 
 import android.graphics.Color
 import android.os.Bundle
-import android.support.v7.app.ActionBarDrawerToggle
+import androidx.appcompat.app.ActionBarDrawerToggle
 import android.view.View
 import android.widget.ImageView
 import com.blankj.lib.base.BaseDrawerActivity
diff --git a/launcher/pkg/src/main/res/layout/activity_main.xml b/launcher/pkg/src/main/res/layout/activity_main.xml
index 3b31dafe32..ee8b62a6fa 100644
--- a/launcher/pkg/src/main/res/layout/activity_main.xml
+++ b/launcher/pkg/src/main/res/layout/activity_main.xml
@@ -1,17 +1,17 @@
 
-
 
-    
 
-        
 
-            
 
-        
-    
+        
+    
 
     
 
-    
@@ -69,5 +69,5 @@
                 android:text="@string/sub_util" />
 
         
-    
-
+    
+
diff --git a/lib/base/build.gradle b/lib/base/build.gradle
index 370036c062..67f9762d82 100644
--- a/lib/base/build.gradle
+++ b/lib/base/build.gradle
@@ -8,7 +8,7 @@ dependencies {
     api gradle.ext.dep.subutil_lib
 
     api gradle.ext.dep.support_appcompat_v7
-    api gradle.ext.dep.support_design
+    api gradle.ext.dep.support_material
     api gradle.ext.dep.support_multidex
     api gradle.ext.dep.constraint
     api gradle.ext.dep.kotlin
diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.java b/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.java
index caae1d45cf..0c9d8fa419 100644
--- a/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/BaseActivity.java
@@ -3,11 +3,12 @@
 import android.annotation.SuppressLint;
 import android.app.Activity;
 import android.os.Bundle;
-import android.support.annotation.LayoutRes;
-import android.support.v7.app.AppCompatActivity;
 import android.view.LayoutInflater;
 import android.view.View;
 
+import androidx.annotation.LayoutRes;
+import androidx.appcompat.app.AppCompatActivity;
+
 import com.blankj.swipepanel.SwipePanel;
 import com.blankj.utilcode.util.AntiShakeUtils;
 import com.blankj.utilcode.util.AppUtils;
diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseApplication.java b/lib/base/src/main/java/com/blankj/lib/base/BaseApplication.java
index 1e0ddc0b27..5d2eba8260 100644
--- a/lib/base/src/main/java/com/blankj/lib/base/BaseApplication.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/BaseApplication.java
@@ -2,7 +2,8 @@
 
 import android.app.Application;
 import android.content.Context;
-import android.support.multidex.MultiDex;
+
+import androidx.multidex.MultiDex;
 
 import com.blankj.utilcode.util.AppUtils;
 import com.blankj.utilcode.util.CrashUtils;
diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseDrawerActivity.java b/lib/base/src/main/java/com/blankj/lib/base/BaseDrawerActivity.java
index c7f7f1daea..ec3c895f6e 100755
--- a/lib/base/src/main/java/com/blankj/lib/base/BaseDrawerActivity.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/BaseDrawerActivity.java
@@ -3,17 +3,18 @@
 import android.annotation.SuppressLint;
 import android.content.Intent;
 import android.net.Uri;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.NonNull;
-import android.support.annotation.StringRes;
-import android.support.design.widget.NavigationView;
-import android.support.v4.widget.DrawerLayout;
 import android.view.LayoutInflater;
 import android.view.MenuItem;
 import android.widget.FrameLayout;
 
+import androidx.annotation.LayoutRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.StringRes;
+import androidx.drawerlayout.widget.DrawerLayout;
+
 import com.blankj.utilcode.util.ActivityUtils;
 import com.blankj.utilcode.util.StringUtils;
+import com.google.android.material.navigation.NavigationView;
 
 
 /**
diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseFragment.java b/lib/base/src/main/java/com/blankj/lib/base/BaseFragment.java
index 5667f3f02c..0e4e7ba5cc 100755
--- a/lib/base/src/main/java/com/blankj/lib/base/BaseFragment.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/BaseFragment.java
@@ -4,17 +4,18 @@
 import android.app.Activity;
 import android.content.Context;
 import android.os.Bundle;
-import android.support.annotation.IdRes;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentTransaction;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 
+import androidx.annotation.IdRes;
+import androidx.annotation.LayoutRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentTransaction;
+
 import com.blankj.utilcode.util.AntiShakeUtils;
 
 /**
diff --git a/lib/base/src/main/java/com/blankj/lib/base/BaseTitleActivity.java b/lib/base/src/main/java/com/blankj/lib/base/BaseTitleActivity.java
index a40230420d..e0ed3ed10a 100644
--- a/lib/base/src/main/java/com/blankj/lib/base/BaseTitleActivity.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/BaseTitleActivity.java
@@ -1,16 +1,17 @@
 package com.blankj.lib.base;
 
 import android.annotation.SuppressLint;
-import android.support.annotation.LayoutRes;
-import android.support.design.widget.CoordinatorLayout;
-import android.support.v7.app.ActionBar;
-import android.support.v7.widget.Toolbar;
 import android.view.LayoutInflater;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewStub;
 import android.widget.FrameLayout;
 
+import androidx.annotation.LayoutRes;
+import androidx.appcompat.app.ActionBar;
+import androidx.appcompat.widget.Toolbar;
+import androidx.coordinatorlayout.widget.CoordinatorLayout;
+
 import com.blankj.utilcode.util.BarUtils;
 import com.blankj.utilcode.util.ColorUtils;
 
diff --git a/lib/base/src/main/java/com/blankj/lib/base/IBaseView.java b/lib/base/src/main/java/com/blankj/lib/base/IBaseView.java
index 29e8553899..b0550f126c 100644
--- a/lib/base/src/main/java/com/blankj/lib/base/IBaseView.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/IBaseView.java
@@ -1,10 +1,11 @@
 package com.blankj.lib.base;
 
 import android.os.Bundle;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.Nullable;
 import android.view.View;
 
+import androidx.annotation.LayoutRes;
+import androidx.annotation.Nullable;
+
 
 /**
  * 
diff --git a/lib/base/src/main/java/com/blankj/lib/base/rv/BaseAdapter.java b/lib/base/src/main/java/com/blankj/lib/base/rv/BaseAdapter.java
index 11aa94e015..e69be6c6df 100644
--- a/lib/base/src/main/java/com/blankj/lib/base/rv/BaseAdapter.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/rv/BaseAdapter.java
@@ -1,12 +1,13 @@
 package com.blankj.lib.base.rv;
 
 import android.content.Context;
-import android.support.annotation.NonNull;
-import android.support.v7.widget.RecyclerView;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 
+import androidx.annotation.NonNull;
+import androidx.recyclerview.widget.RecyclerView;
+
 import java.util.List;
 
 /**
diff --git a/lib/base/src/main/java/com/blankj/lib/base/rv/BaseCell.java b/lib/base/src/main/java/com/blankj/lib/base/rv/BaseCell.java
index cdf42c7882..332c4caee0 100644
--- a/lib/base/src/main/java/com/blankj/lib/base/rv/BaseCell.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/rv/BaseCell.java
@@ -1,10 +1,11 @@
 package com.blankj.lib.base.rv;
 
-import android.support.annotation.NonNull;
 import android.util.SparseArray;
 import android.util.SparseIntArray;
 import android.view.View;
 
+import androidx.annotation.NonNull;
+
 /**
  * 
  *     author: blankj
diff --git a/lib/base/src/main/java/com/blankj/lib/base/rv/BaseViewHolder.java b/lib/base/src/main/java/com/blankj/lib/base/rv/BaseViewHolder.java
index ceb1c46eac..0bd892f317 100644
--- a/lib/base/src/main/java/com/blankj/lib/base/rv/BaseViewHolder.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/rv/BaseViewHolder.java
@@ -1,7 +1,7 @@
 package com.blankj.lib.base.rv;
 
-import android.support.annotation.IdRes;
-import android.support.v7.widget.RecyclerView;
+import androidx.annotation.IdRes;
+import androidx.recyclerview.widget.RecyclerView;
 import android.util.SparseArray;
 import android.view.View;
 
diff --git a/lib/base/src/main/java/com/blankj/lib/base/rv/RecycleViewDivider.java b/lib/base/src/main/java/com/blankj/lib/base/rv/RecycleViewDivider.java
index 3d2b90f302..dd20894e10 100644
--- a/lib/base/src/main/java/com/blankj/lib/base/rv/RecycleViewDivider.java
+++ b/lib/base/src/main/java/com/blankj/lib/base/rv/RecycleViewDivider.java
@@ -5,11 +5,11 @@
 import android.graphics.Canvas;
 import android.graphics.Rect;
 import android.graphics.drawable.Drawable;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.NonNull;
-import android.support.v4.content.ContextCompat;
-import android.support.v4.view.ViewCompat;
-import android.support.v7.widget.RecyclerView;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.NonNull;
+import androidx.core.content.ContextCompat;
+import androidx.core.view.ViewCompat;
+import androidx.recyclerview.widget.RecyclerView;
 import android.view.View;
 import android.widget.LinearLayout;
 
diff --git a/lib/base/src/main/res/layout/activity_base_title.xml b/lib/base/src/main/res/layout/activity_base_title.xml
index b11ecf7341..986d3669b6 100644
--- a/lib/base/src/main/res/layout/activity_base_title.xml
+++ b/lib/base/src/main/res/layout/activity_base_title.xml
@@ -1,24 +1,23 @@
 
-
 
-    
 
-        
-    
+    
 
     
 
-
+
diff --git a/lib/base/src/main/res/layout/activity_base_title_stub_scroll.xml b/lib/base/src/main/res/layout/activity_base_title_stub_scroll.xml
index 96f5e09d49..bd031cfb67 100644
--- a/lib/base/src/main/res/layout/activity_base_title_stub_scroll.xml
+++ b/lib/base/src/main/res/layout/activity_base_title_stub_scroll.xml
@@ -1,5 +1,5 @@
 
-
 
-
+
 
diff --git a/lib/base/src/main/res/layout/activity_drawer.xml b/lib/base/src/main/res/layout/activity_drawer.xml
index 72f70ed969..be44cd718c 100644
--- a/lib/base/src/main/res/layout/activity_drawer.xml
+++ b/lib/base/src/main/res/layout/activity_drawer.xml
@@ -1,5 +1,5 @@
 
-
 
-    
 
-
+
diff --git a/subutil/app/build.gradle b/subutil/app/build.gradle
index a2e0172413..a7027c15ef 100644
--- a/subutil/app/build.gradle
+++ b/subutil/app/build.gradle
@@ -4,5 +4,5 @@ apply {
 
 dependencies {
     implementation fileTree(dir: 'libs', include: ['*.jar'])
-    implementation project(':subutil:pkg')
+    implementation gradle.ext.dep.subutil_pkg
 }
\ No newline at end of file
diff --git a/subutil/lib/build.gradle b/subutil/lib/build.gradle
index 9dcbe0b542..f3140b4f0b 100644
--- a/subutil/lib/build.gradle
+++ b/subutil/lib/build.gradle
@@ -14,7 +14,7 @@ readme {
 
 dependencies {
     compileOnly gradle.ext.dep.support_appcompat_v7
-    compileOnly gradle.ext.dep.support_design
+    compileOnly gradle.ext.dep.support_material
     api(gradle.ext.dep.glide) {
         exclude group: "com.android.support"
     }
diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/LocationUtils.java b/subutil/lib/src/main/java/com/blankj/subutil/util/LocationUtils.java
index 7ee8747902..0c177b534c 100755
--- a/subutil/lib/src/main/java/com/blankj/subutil/util/LocationUtils.java
+++ b/subutil/lib/src/main/java/com/blankj/subutil/util/LocationUtils.java
@@ -11,7 +11,7 @@
 import android.location.LocationProvider;
 import android.os.Bundle;
 import android.provider.Settings;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.RequiresPermission;
 import android.util.Log;
 
 import java.io.IOException;
diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/PinyinUtils.java b/subutil/lib/src/main/java/com/blankj/subutil/util/PinyinUtils.java
index 22486b3a91..934408c65e 100644
--- a/subutil/lib/src/main/java/com/blankj/subutil/util/PinyinUtils.java
+++ b/subutil/lib/src/main/java/com/blankj/subutil/util/PinyinUtils.java
@@ -1,6 +1,6 @@
 package com.blankj.subutil.util;
 
-import android.support.v4.util.SimpleArrayMap;
+import androidx.collection.SimpleArrayMap;
 
 /**
  * 
diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/Utils.java b/subutil/lib/src/main/java/com/blankj/subutil/util/Utils.java
index 9cbf4e06fd..91b336abcf 100644
--- a/subutil/lib/src/main/java/com/blankj/subutil/util/Utils.java
+++ b/subutil/lib/src/main/java/com/blankj/subutil/util/Utils.java
@@ -7,8 +7,8 @@
 import android.content.Context;
 import android.database.Cursor;
 import android.net.Uri;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 
 import java.lang.reflect.InvocationTargetException;
 
diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/http/ExecutorFactory.java b/subutil/lib/src/main/java/com/blankj/subutil/util/http/ExecutorFactory.java
index f5583397d9..2f26fb9c24 100644
--- a/subutil/lib/src/main/java/com/blankj/subutil/util/http/ExecutorFactory.java
+++ b/subutil/lib/src/main/java/com/blankj/subutil/util/http/ExecutorFactory.java
@@ -2,7 +2,8 @@
 
 import android.os.Handler;
 import android.os.Looper;
-import android.support.annotation.NonNull;
+
+import androidx.annotation.NonNull;
 
 import java.util.concurrent.Executor;
 import java.util.concurrent.LinkedBlockingQueue;
diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/http/HttpUtils.java b/subutil/lib/src/main/java/com/blankj/subutil/util/http/HttpUtils.java
index b952f318cb..bdd4174486 100644
--- a/subutil/lib/src/main/java/com/blankj/subutil/util/http/HttpUtils.java
+++ b/subutil/lib/src/main/java/com/blankj/subutil/util/http/HttpUtils.java
@@ -1,7 +1,8 @@
 package com.blankj.subutil.util.http;
 
 import android.accounts.NetworkErrorException;
-import android.support.annotation.NonNull;
+
+import androidx.annotation.NonNull;
 
 import java.io.BufferedOutputStream;
 import java.io.ByteArrayOutputStream;
diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/http/Request.java b/subutil/lib/src/main/java/com/blankj/subutil/util/http/Request.java
index fe39b1299c..c6eddf9b96 100644
--- a/subutil/lib/src/main/java/com/blankj/subutil/util/http/Request.java
+++ b/subutil/lib/src/main/java/com/blankj/subutil/util/http/Request.java
@@ -1,6 +1,7 @@
 package com.blankj.subutil.util.http;
 
-import android.support.annotation.NonNull;
+
+import androidx.annotation.NonNull;
 
 import java.io.BufferedInputStream;
 import java.io.ByteArrayInputStream;
diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/http/SSLConfig.java b/subutil/lib/src/main/java/com/blankj/subutil/util/http/SSLConfig.java
index b8624af490..0cf43662f2 100644
--- a/subutil/lib/src/main/java/com/blankj/subutil/util/http/SSLConfig.java
+++ b/subutil/lib/src/main/java/com/blankj/subutil/util/http/SSLConfig.java
@@ -2,7 +2,8 @@
 
 import android.annotation.SuppressLint;
 import android.os.Build;
-import android.support.annotation.NonNull;
+
+import androidx.annotation.NonNull;
 
 import java.io.IOException;
 import java.net.InetAddress;
diff --git a/subutil/pkg/build.gradle b/subutil/pkg/build.gradle
index 9fe360a5dd..881637b34a 100644
--- a/subutil/pkg/build.gradle
+++ b/subutil/pkg/build.gradle
@@ -4,5 +4,5 @@ apply {
 
 dependencies {
     implementation fileTree(dir: 'libs', include: ['*.jar'])
-    api project(':lib:base')
+    api gradle.ext.dep.lib_base
 }
\ No newline at end of file
diff --git a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt b/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt
index 45e67a4a0d..9eba25c622 100644
--- a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt
+++ b/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt
@@ -1,6 +1,6 @@
 package com.blankj.subutil.pkg.helper
 
-import android.support.v7.app.AlertDialog
+import androidx.appcompat.app.AlertDialog
 import com.blankj.subutil.pkg.R
 import com.blankj.utilcode.util.ActivityUtils
 import com.blankj.utilcode.util.PermissionUtils
diff --git a/utilcode/README-CN.md b/utilcode/README-CN.md
index 445f206121..0bdb622940 100644
--- a/utilcode/README-CN.md
+++ b/utilcode/README-CN.md
@@ -5,7 +5,7 @@ Gradle:
 implementation 'com.blankj:utilcode:1.24.0'
 
 // if u use AndroidX, use the following
-implementation 'com.blankj:utilcodex:1.23.7'
+implementation 'com.blankj:utilcodex:1.24.0'
 ```
 
 
diff --git a/utilcode/README.md b/utilcode/README.md
index f449736061..5a6a295b4c 100644
--- a/utilcode/README.md
+++ b/utilcode/README.md
@@ -5,7 +5,7 @@ Gradle:
 implementation 'com.blankj:utilcode:1.24.0'
 
 // if u use AndroidX, use the following
-implementation 'com.blankj:utilcodex:1.23.7'
+implementation 'com.blankj:utilcodex:1.24.0'
 ```
 
 
diff --git a/utilcode/app/build.gradle b/utilcode/app/build.gradle
index 5616386892..ea5c172cd7 100644
--- a/utilcode/app/build.gradle
+++ b/utilcode/app/build.gradle
@@ -4,5 +4,5 @@ apply {
 
 dependencies {
     implementation fileTree(dir: 'libs', include: ['*.jar'])
-    implementation project(':utilcode:pkg')
+    implementation gradle.ext.dep.utilcode_pkg
 }
\ No newline at end of file
diff --git a/utilcode/lib/build.gradle b/utilcode/lib/build.gradle
index e4dd3a6716..6d6c599298 100644
--- a/utilcode/lib/build.gradle
+++ b/utilcode/lib/build.gradle
@@ -18,7 +18,7 @@ dependencies {
     compile gradle.ext.dep.gson
 
     compileOnly gradle.ext.dep.support_appcompat_v7
-    compileOnly gradle.ext.dep.support_design
+    compileOnly gradle.ext.dep.support_material
 
     testImplementation gradle.ext.dep.junit
     testImplementation gradle.ext.dep.robolectric
diff --git a/utilcode/lib/project.properties b/utilcode/lib/project.properties
index 22ae3b8603..d238eda740 100644
--- a/utilcode/lib/project.properties
+++ b/utilcode/lib/project.properties
@@ -1,9 +1,9 @@
 #project
-project.name=UtilCode
+project.name=UtilCodeX
 project.groupId=com.blankj
-project.artifactId=utilcode
+project.artifactId=utilcodex
 project.packaging=aar
 project.siteUrl=https://github.com/Blankj/AndroidUtilCode
 project.gitUrl=https://github.com/Blankj/AndroidUtilCode.git
 #javadoc
-javadoc.name=UtilCode
\ No newline at end of file
+javadoc.name=UtilCodeX
\ No newline at end of file
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/MemoryConstants.java b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/MemoryConstants.java
index b68bfcb113..5c05c0163e 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/MemoryConstants.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/MemoryConstants.java
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.constant;
 
-import android.support.annotation.IntDef;
+import androidx.annotation.IntDef;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/PermissionConstants.java b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/PermissionConstants.java
index 76f7e9a217..6db826e4ab 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/PermissionConstants.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/PermissionConstants.java
@@ -4,7 +4,7 @@
 import android.Manifest.permission;
 import android.annotation.SuppressLint;
 import android.os.Build;
-import android.support.annotation.StringDef;
+import androidx.annotation.StringDef;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/TimeConstants.java b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/TimeConstants.java
index 9932037bf8..45090576e3 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/TimeConstants.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/constant/TimeConstants.java
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.constant;
 
-import android.support.annotation.IntDef;
+import androidx.annotation.IntDef;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ActivityUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ActivityUtils.java
index d6a671e4fe..de1bfeb005 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ActivityUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ActivityUtils.java
@@ -10,14 +10,15 @@
 import android.graphics.drawable.Drawable;
 import android.os.Build;
 import android.os.Bundle;
-import android.support.annotation.AnimRes;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.app.ActivityOptionsCompat;
-import android.support.v4.util.Pair;
 import android.util.Log;
 import android.view.View;
 
+import androidx.annotation.AnimRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.core.app.ActivityOptionsCompat;
+import androidx.core.util.Pair;
+
 import java.util.List;
 
 /**
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/AntiShakeUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/AntiShakeUtils.java
index 7e87e73474..ca9036225e 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/AntiShakeUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/AntiShakeUtils.java
@@ -1,9 +1,10 @@
 package com.blankj.utilcode.util;
 
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
 import android.view.View;
 
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+
 /**
  * 
  *     author: blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/AppUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/AppUtils.java
index a9368be59f..5a9194ce66 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/AppUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/AppUtils.java
@@ -17,8 +17,6 @@
 import android.net.Uri;
 import android.os.Build;
 import android.provider.Settings;
-import android.support.annotation.NonNull;
-import android.support.v4.content.FileProvider;
 import android.util.Log;
 
 import java.io.File;
@@ -27,6 +25,9 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import androidx.annotation.NonNull;
+import androidx.core.content.FileProvider;
+
 /**
  * 
  *     author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BarUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/BarUtils.java
index 7b5509b2b5..22178a5c20 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BarUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/BarUtils.java
@@ -8,11 +8,6 @@
 import android.graphics.Color;
 import android.graphics.Point;
 import android.os.Build;
-import android.support.annotation.ColorInt;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresApi;
-import android.support.annotation.RequiresPermission;
-import android.support.v4.widget.DrawerLayout;
 import android.util.Log;
 import android.util.TypedValue;
 import android.view.Display;
@@ -27,6 +22,12 @@
 
 import java.lang.reflect.Method;
 
+import androidx.annotation.ColorInt;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.annotation.RequiresPermission;
+import androidx.drawerlayout.widget.DrawerLayout;
+
 import static android.Manifest.permission.EXPAND_STATUS_BAR;
 
 /**
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java
index f9344b0a59..bacc519540 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java
@@ -2,11 +2,12 @@
 
 import android.content.ContentResolver;
 import android.provider.Settings;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
 import android.view.Window;
 import android.view.WindowManager;
 
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+
 /**
  * 
  *     author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BusUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/BusUtils.java
index f04202043e..d272c99b98 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BusUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/BusUtils.java
@@ -16,11 +16,12 @@
 import android.os.Message;
 import android.os.Messenger;
 import android.os.RemoteException;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
 import android.text.TextUtils;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java
index bb48a4b5cf..c5a9a17a6d 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java
@@ -3,13 +3,14 @@
 import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
 import android.os.Parcelable;
-import android.support.annotation.NonNull;
 
 import org.json.JSONArray;
 import org.json.JSONObject;
 
 import java.io.Serializable;
 
+import androidx.annotation.NonNull;
+
 /**
  * 
  *     author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskUtils.java
index 67e6b3fb0e..a8ae8afa5b 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskUtils.java
@@ -8,9 +8,10 @@
 import android.graphics.drawable.Drawable;
 import android.os.Parcel;
 import android.os.Parcelable;
-import android.support.annotation.NonNull;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
+
 import com.blankj.utilcode.constant.CacheConstants;
 
 import org.json.JSONArray;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleStaticUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleStaticUtils.java
index 2ef267bd01..6dbb9f7475 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleStaticUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleStaticUtils.java
@@ -3,13 +3,14 @@
 import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
 import android.os.Parcelable;
-import android.support.annotation.NonNull;
 
 import org.json.JSONArray;
 import org.json.JSONObject;
 
 import java.io.Serializable;
 
+import androidx.annotation.NonNull;
+
 /**
  * 
  *     author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java
index c800423c78..aca1c25837 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java
@@ -3,7 +3,7 @@
 import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
 import android.os.Parcelable;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 import com.blankj.utilcode.constant.CacheConstants;
 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryStaticUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryStaticUtils.java
index 56abfba117..aedcfa7fc4 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryStaticUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryStaticUtils.java
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.util;
 
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 /**
  * 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryUtils.java
index d0e06e394d..ddaa2baed9 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryUtils.java
@@ -1,7 +1,7 @@
 package com.blankj.utilcode.util;
 
-import android.support.annotation.NonNull;
-import android.support.v4.util.LruCache;
+import androidx.annotation.NonNull;
+import androidx.collection.LruCache;
 
 import com.blankj.utilcode.constant.CacheConstants;
 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ColorUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ColorUtils.java
index 4c0c22232b..a6603cfc44 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ColorUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ColorUtils.java
@@ -1,12 +1,12 @@
 package com.blankj.utilcode.util;
 
 import android.graphics.Color;
-import android.support.annotation.ColorInt;
-import android.support.annotation.ColorRes;
-import android.support.annotation.FloatRange;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
-import android.support.v4.content.ContextCompat;
+import androidx.annotation.ColorInt;
+import androidx.annotation.ColorRes;
+import androidx.annotation.FloatRange;
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+import androidx.core.content.ContextCompat;
 
 /**
  * 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CrashUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CrashUtils.java
index 18b5f814a3..081dd09761 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CrashUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/CrashUtils.java
@@ -5,8 +5,8 @@
 import android.content.pm.PackageManager;
 import android.os.Build;
 import android.os.Environment;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresPermission;
 import android.util.Log;
 
 import java.io.BufferedWriter;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/DeviceUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/DeviceUtils.java
index e6b1910cfc..c641c9bdae 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/DeviceUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/DeviceUtils.java
@@ -11,11 +11,12 @@
 import android.os.Debug;
 import android.os.PowerManager;
 import android.provider.Settings;
-import android.support.annotation.RequiresApi;
-import android.support.annotation.RequiresPermission;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
 
+import androidx.annotation.RequiresApi;
+import androidx.annotation.RequiresPermission;
+
 import java.io.File;
 import java.net.InetAddress;
 import java.net.NetworkInterface;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/FragmentUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/FragmentUtils.java
index 43b8537e75..9e8ae14ef1 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/FragmentUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/FragmentUtils.java
@@ -3,16 +3,6 @@
 import android.graphics.drawable.Drawable;
 import android.os.Build;
 import android.os.Bundle;
-import android.support.annotation.AnimRes;
-import android.support.annotation.AnimatorRes;
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.IdRes;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.support.v4.app.FragmentTransaction;
 import android.util.Log;
 import android.view.View;
 
@@ -20,6 +10,17 @@
 import java.util.Collections;
 import java.util.List;
 
+import androidx.annotation.AnimRes;
+import androidx.annotation.AnimatorRes;
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.IdRes;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
 /**
  * 
  *     author: Blankj
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ImageUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ImageUtils.java
index 83e01eb1ad..cbee7dd4bd 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ImageUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ImageUtils.java
@@ -27,13 +27,13 @@
 import android.renderscript.Element;
 import android.renderscript.RenderScript;
 import android.renderscript.ScriptIntrinsicBlur;
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.FloatRange;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresApi;
-import android.support.v4.content.ContextCompat;
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.FloatRange;
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresApi;
+import androidx.core.content.ContextCompat;
 import android.view.View;
 
 import java.io.BufferedOutputStream;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/IntentUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/IntentUtils.java
index 6faa37d043..1e26dc8a9a 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/IntentUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/IntentUtils.java
@@ -8,8 +8,8 @@
 import android.os.Bundle;
 import android.provider.MediaStore;
 import android.provider.Settings;
-import android.support.annotation.RequiresPermission;
-import android.support.v4.content.FileProvider;
+import androidx.annotation.RequiresPermission;
+import androidx.core.content.FileProvider;
 
 import java.io.File;
 import java.util.ArrayList;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java
index cfa568fa7c..de3eb285cc 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java
@@ -7,7 +7,6 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.ResultReceiver;
-import android.support.annotation.NonNull;
 import android.util.Log;
 import android.view.View;
 import android.view.ViewTreeObserver.OnGlobalLayoutListener;
@@ -16,6 +15,8 @@
 import android.view.inputmethod.InputMethodManager;
 import android.widget.FrameLayout;
 
+import androidx.annotation.NonNull;
+
 import java.lang.reflect.Field;
 
 /**
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java
index 1372ecd40b..9a7e11cbf5 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java
@@ -10,10 +10,10 @@
 import android.os.Build;
 import android.os.Bundle;
 import android.os.Environment;
-import android.support.annotation.IntDef;
-import android.support.annotation.IntRange;
-import android.support.annotation.RequiresApi;
-import android.support.v4.util.SimpleArrayMap;
+import androidx.annotation.IntDef;
+import androidx.annotation.IntRange;
+import androidx.annotation.RequiresApi;
+import androidx.collection.SimpleArrayMap;
 import android.util.Log;
 
 import com.google.gson.Gson;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java
index 6f6cf85b80..bd4b8da935 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java
@@ -8,7 +8,7 @@
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.ServiceInfo;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 /**
  * 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/NetworkUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/NetworkUtils.java
index d59eb28240..24a05a26b7 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/NetworkUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/NetworkUtils.java
@@ -7,13 +7,14 @@
 import android.net.NetworkInfo;
 import android.net.wifi.WifiManager;
 import android.os.Build;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresPermission;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
 import android.text.format.Formatter;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresPermission;
+
 import java.lang.reflect.Method;
 import java.net.InetAddress;
 import java.net.InterfaceAddress;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/NotificationUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/NotificationUtils.java
index b8163d2e66..73a900b465 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/NotificationUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/NotificationUtils.java
@@ -5,9 +5,9 @@
 import android.app.PendingIntent;
 import android.content.Context;
 import android.content.Intent;
-import android.support.annotation.Nullable;
-import android.support.v4.app.NotificationCompat;
-import android.support.v4.app.NotificationManagerCompat;
+import androidx.annotation.Nullable;
+import androidx.core.app.NotificationCompat;
+import androidx.core.app.NotificationManagerCompat;
 
 /**
  * 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ObjectUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ObjectUtils.java
index be5491ece0..3c0c087a39 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ObjectUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ObjectUtils.java
@@ -1,9 +1,9 @@
 package com.blankj.utilcode.util;
 
 import android.os.Build;
-import android.support.annotation.RequiresApi;
-import android.support.v4.util.LongSparseArray;
-import android.support.v4.util.SimpleArrayMap;
+import androidx.annotation.RequiresApi;
+import androidx.collection.LongSparseArray;
+import androidx.collection.SimpleArrayMap;
 import android.util.SparseArray;
 import android.util.SparseBooleanArray;
 import android.util.SparseIntArray;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/PermissionUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/PermissionUtils.java
index d35cbcc620..602efcb5db 100755
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/PermissionUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/PermissionUtils.java
@@ -9,10 +9,10 @@
 import android.os.Build;
 import android.os.Bundle;
 import android.provider.Settings;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.RequiresApi;
-import android.support.v4.content.ContextCompat;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.annotation.RequiresApi;
+import androidx.core.content.ContextCompat;
 import android.util.Log;
 import android.view.MotionEvent;
 import android.view.WindowManager;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/PhoneUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/PhoneUtils.java
index 99068781a4..f407f81b5f 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/PhoneUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/PhoneUtils.java
@@ -7,7 +7,7 @@
 import android.content.pm.PackageManager;
 import android.net.Uri;
 import android.os.Build;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.RequiresPermission;
 import android.telephony.SmsManager;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ProcessUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ProcessUtils.java
index adcd265f72..619b175549 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ProcessUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ProcessUtils.java
@@ -10,8 +10,8 @@
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.provider.Settings;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresPermission;
 import android.util.Log;
 
 import java.util.Arrays;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/RegexUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/RegexUtils.java
index ba57fab956..817a94149f 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/RegexUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/RegexUtils.java
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.util;
 
-import android.support.v4.util.SimpleArrayMap;
+import androidx.collection.SimpleArrayMap;
 
 import com.blankj.utilcode.constant.RegexConstants;
 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ResourceUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ResourceUtils.java
index 81d10f08cf..3fb515c06b 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ResourceUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ResourceUtils.java
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.util;
 
-import android.support.annotation.RawRes;
+import androidx.annotation.RawRes;
 
 import java.io.BufferedOutputStream;
 import java.io.BufferedReader;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPStaticUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPStaticUtils.java
index d3e21fb873..21274c3023 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPStaticUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPStaticUtils.java
@@ -1,7 +1,7 @@
 package com.blankj.utilcode.util;
 
 import android.content.SharedPreferences;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 import java.util.Map;
 import java.util.Set;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPUtils.java
index 554a2ed586..a9d18a1a55 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPUtils.java
@@ -3,7 +3,7 @@
 import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.SharedPreferences;
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 import java.util.Collections;
 import java.util.HashMap;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ScreenUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ScreenUtils.java
index 7390fceed0..3245eb115c 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ScreenUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ScreenUtils.java
@@ -10,8 +10,8 @@
 import android.graphics.Point;
 import android.os.Build;
 import android.provider.Settings;
-import android.support.annotation.NonNull;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.NonNull;
+import androidx.annotation.RequiresPermission;
 import android.util.DisplayMetrics;
 import android.view.Surface;
 import android.view.View;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ShellUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ShellUtils.java
index b7ad2fa9d2..fc10a601ae 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ShellUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ShellUtils.java
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.util;
 
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 import java.io.BufferedReader;
 import java.io.DataOutputStream;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java
index b164e6154e..eab1990d29 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java
@@ -1,12 +1,12 @@
 package com.blankj.utilcode.util;
 
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.IntDef;
-import android.support.annotation.IntRange;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.NonNull;
-import android.support.design.widget.Snackbar;
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.IntDef;
+import androidx.annotation.IntRange;
+import androidx.annotation.LayoutRes;
+import androidx.annotation.NonNull;
+import com.google.android.material.snackbar.Snackbar;
 import android.text.SpannableString;
 import android.text.Spanned;
 import android.text.style.ForegroundColorSpan;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SpanUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SpanUtils.java
index b8d9d53aed..4d49451ec0 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SpanUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/SpanUtils.java
@@ -14,14 +14,14 @@
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.FloatRange;
-import android.support.annotation.IntDef;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.v4.content.ContextCompat;
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.FloatRange;
+import androidx.annotation.IntDef;
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.core.content.ContextCompat;
 import android.text.Layout;
 import android.text.Layout.Alignment;
 import android.text.SpannableStringBuilder;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/StringUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/StringUtils.java
index c3254e3d32..70f0defe50 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/StringUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/StringUtils.java
@@ -1,8 +1,8 @@
 package com.blankj.utilcode.util;
 
 import android.content.res.Resources;
-import android.support.annotation.ArrayRes;
-import android.support.annotation.StringRes;
+import androidx.annotation.ArrayRes;
+import androidx.annotation.StringRes;
 
 /**
  * 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ThreadUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ThreadUtils.java
index 0545a27fa0..19de94ca33 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ThreadUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ThreadUtils.java
@@ -2,10 +2,11 @@
 
 import android.os.Handler;
 import android.os.Looper;
-import android.support.annotation.IntRange;
-import android.support.annotation.NonNull;
 import android.util.Log;
 
+import androidx.annotation.IntRange;
+import androidx.annotation.NonNull;
+
 import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.Executor;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/TimeUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/TimeUtils.java
index adaa920474..a5286b0fbe 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/TimeUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/TimeUtils.java
@@ -1,6 +1,6 @@
 package com.blankj.utilcode.util;
 
-import android.support.annotation.NonNull;
+import androidx.annotation.NonNull;
 
 import com.blankj.utilcode.constant.TimeConstants;
 
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java
index 150425cdba..0dd47cfa3e 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java
@@ -12,11 +12,11 @@
 import android.os.Build;
 import android.os.Handler;
 import android.os.Message;
-import android.support.annotation.ColorInt;
-import android.support.annotation.DrawableRes;
-import android.support.annotation.LayoutRes;
-import android.support.annotation.StringRes;
-import android.support.v4.app.NotificationManagerCompat;
+import androidx.annotation.ColorInt;
+import androidx.annotation.DrawableRes;
+import androidx.annotation.LayoutRes;
+import androidx.annotation.StringRes;
+import androidx.core.app.NotificationManagerCompat;
 import android.util.Log;
 import android.view.Gravity;
 import android.view.LayoutInflater;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/UriUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/UriUtils.java
index 9ad408912a..20fdc39b81 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/UriUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/UriUtils.java
@@ -8,12 +8,14 @@
 import android.os.Environment;
 import android.provider.DocumentsContract;
 import android.provider.MediaStore;
-import android.support.annotation.NonNull;
-import android.support.v4.content.FileProvider;
+import android.text.TextUtils;
 import android.util.Log;
 
 import java.io.File;
 
+import androidx.annotation.NonNull;
+import androidx.core.content.FileProvider;
+
 /**
  * 
  *     author: Blankj
@@ -75,12 +77,19 @@ public static File uri2File(@NonNull final Uri uri) {
                 Log.d("UriUtils", uri.toString() + " parse failed. -> 1");
                 return null;
             } else if ("com.android.providers.downloads.documents".equals(authority)) {
-                final String id = DocumentsContract.getDocumentId(uri);
-                final Uri contentUri = ContentUris.withAppendedId(
-                        Uri.parse("content://downloads/public_downloads"),
-                        Long.valueOf(id)
-                );
-                return getFileFromUri(contentUri, 2);
+                String id = DocumentsContract.getDocumentId(uri);
+                if (!TextUtils.isEmpty(id)) {
+                    if (id.startsWith("raw:")) {
+                        return new File(id.substring(4));
+                    }
+                    final Uri contentUri = ContentUris.withAppendedId(
+                            Uri.parse(Environment.DIRECTORY_DOWNLOADS),
+                            Long.valueOf(id)
+                    );
+                    return getFileFromUri(contentUri, 2);
+                }
+                Log.d("UriUtils", uri.toString() + " parse failed. -> 3");
+                return null;
             } else if ("com.android.providers.media.documents".equals(authority)) {
                 final String docId = DocumentsContract.getDocumentId(uri);
                 final String[] split = docId.split(":");
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/Utils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/Utils.java
index d0c98afc96..1992a2c902 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/Utils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/Utils.java
@@ -13,13 +13,14 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
-import android.support.v4.content.FileProvider;
 import android.text.TextUtils;
 import android.util.DisplayMetrics;
 import android.util.Log;
 import android.view.View;
 import android.view.inputmethod.InputMethodManager;
 
+import androidx.core.content.FileProvider;
+
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileReader;
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java b/utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java
index a57bbb8241..622d657817 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java
+++ b/utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java
@@ -2,7 +2,7 @@
 
 import android.content.Context;
 import android.os.Vibrator;
-import android.support.annotation.RequiresPermission;
+import androidx.annotation.RequiresPermission;
 
 import static android.Manifest.permission.VIBRATE;
 
diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/BaseTest.java b/utilcode/lib/src/test/java/com/blankj/utilcode/util/BaseTest.java
index 85bc9d8ac2..2dadedff8c 100644
--- a/utilcode/lib/src/test/java/com/blankj/utilcode/util/BaseTest.java
+++ b/utilcode/lib/src/test/java/com/blankj/utilcode/util/BaseTest.java
@@ -1,8 +1,5 @@
 package com.blankj.utilcode.util;
 
-
-import android.support.annotation.NonNull;
-
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.robolectric.RobolectricTestRunner;
@@ -29,7 +26,7 @@ public BaseTest() {
         ShadowLog.stream = System.out;
         ThreadUtils.setDeliver(new Executor() {
             @Override
-            public void execute(@NonNull Runnable command) {
+            public void execute(Runnable command) {
                 command.run();
             }
         });
@@ -201,8 +198,8 @@ public void onFail(Throwable t) {
     static class Person implements Comparable {
 
         String name;
-        int age;
-        int time;
+        int    age;
+        int    time;
 
         public Person(String name) {
             this.name = name;
@@ -220,7 +217,7 @@ public String toString() {
         }
 
         @Override
-        public int compareTo(@NonNull Person o) {
+        public int compareTo(Person o) {
             int res = o.age - age;
             if (res != 0) {
                 return res;
diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/ObjectUtilsTest.java b/utilcode/lib/src/test/java/com/blankj/utilcode/util/ObjectUtilsTest.java
index a0203f78fc..ed12c24d8d 100644
--- a/utilcode/lib/src/test/java/com/blankj/utilcode/util/ObjectUtilsTest.java
+++ b/utilcode/lib/src/test/java/com/blankj/utilcode/util/ObjectUtilsTest.java
@@ -1,7 +1,5 @@
 package com.blankj.utilcode.util;
 
-import android.support.v4.util.LongSparseArray;
-import android.support.v4.util.SimpleArrayMap;
 import android.util.SparseArray;
 import android.util.SparseBooleanArray;
 import android.util.SparseIntArray;
@@ -12,6 +10,9 @@
 import java.util.HashMap;
 import java.util.LinkedList;
 
+import androidx.collection.LongSparseArray;
+import androidx.collection.SimpleArrayMap;
+
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
diff --git a/utilcode/pkg/build.gradle b/utilcode/pkg/build.gradle
index 9fe360a5dd..881637b34a 100644
--- a/utilcode/pkg/build.gradle
+++ b/utilcode/pkg/build.gradle
@@ -4,5 +4,5 @@ apply {
 
 dependencies {
     implementation fileTree(dir: 'libs', include: ['*.jar'])
-    api project(':lib:base')
+    api gradle.ext.dep.lib_base
 }
\ No newline at end of file
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt
index e784f98401..9982c948b7 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt
@@ -6,7 +6,7 @@ import android.graphics.Bitmap
 import android.graphics.drawable.BitmapDrawable
 import android.os.Build
 import android.os.Bundle
-import android.support.v4.app.ActivityOptionsCompat
+import androidx.core.app.ActivityOptionsCompat
 import android.view.View
 import android.view.Window
 import com.blankj.lib.base.BaseTitleActivity
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt
index 0c63773639..abf0151bbc 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt
@@ -2,7 +2,7 @@ package com.blankj.utilcode.pkg.feature.activity
 
 import android.os.Build
 import android.os.Bundle
-import android.support.v4.app.ActivityCompat
+import androidx.core.app.ActivityCompat
 import android.view.View
 import android.view.Window
 import com.blankj.lib.base.BaseTitleActivity
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt
index d4f0d60530..fc8020b3e5 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt
@@ -3,10 +3,10 @@ package com.blankj.utilcode.pkg.feature.bar
 import android.content.Context
 import android.content.Intent
 import android.os.Bundle
-import android.support.design.widget.BottomNavigationView
-import android.support.v4.app.Fragment
-import android.support.v4.app.FragmentPagerAdapter
-import android.support.v4.view.ViewPager
+import com.google.android.material.bottomnavigation.BottomNavigationView
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentPagerAdapter
+import androidx.viewpager.widget.ViewPager
 import android.view.View
 import com.blankj.lib.base.BaseActivity
 import com.blankj.utilcode.pkg.R
@@ -37,7 +37,7 @@ class BarStatusFragmentActivity : BaseActivity() {
             R.id.barStatusFragmentNavigationCustom
     )
 
-    private val mFragmentList = ArrayList()
+    private val mFragmentList = ArrayList()
 
     private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener l@{ item ->
         when (item.itemId) {
@@ -78,8 +78,8 @@ class BarStatusFragmentActivity : BaseActivity() {
         mFragmentList.add(BarStatusCustomFragment.newInstance())
 
         barStatusFragmentVp.offscreenPageLimit = 3
-        barStatusFragmentVp.adapter = object : FragmentPagerAdapter(supportFragmentManager) {
-            override fun getItem(position: Int): Fragment {
+        barStatusFragmentVp.adapter = object : androidx.fragment.app.FragmentPagerAdapter(supportFragmentManager) {
+            override fun getItem(position: Int): androidx.fragment.app.Fragment {
                 return mFragmentList[position]
             }
 
@@ -88,7 +88,7 @@ class BarStatusFragmentActivity : BaseActivity() {
             }
         }
 
-        barStatusFragmentVp.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+        barStatusFragmentVp.addOnPageChangeListener(object : androidx.viewpager.widget.ViewPager.OnPageChangeListener {
             override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {}
 
             override fun onPageSelected(position: Int) {
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt
index ada9dd0d10..86972c449d 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt
@@ -2,8 +2,8 @@ package com.blankj.utilcode.pkg.feature.fragment
 
 import android.os.Build
 import android.os.Bundle
-import android.support.annotation.RequiresApi
-import android.support.v4.app.Fragment
+import androidx.annotation.RequiresApi
+import androidx.fragment.app.Fragment
 import android.transition.*
 import android.view.View
 import com.blankj.lib.base.BaseLazyFragment
@@ -128,7 +128,7 @@ class ContainerFragment : BaseLazyFragment(), FragmentUtils.OnBackClickListener
         }
     }
 
-    private fun addSharedElement(fragment: Fragment): Fragment {
+    private fun addSharedElement(fragment: androidx.fragment.app.Fragment): androidx.fragment.app.Fragment {
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
             fragment.sharedElementEnterTransition = DetailTransition()
             fragment.enterTransition = Fade()
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt
index 446271b366..b18a2e236b 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt
@@ -4,8 +4,8 @@ import android.content.Context
 import android.content.Intent
 import android.os.Bundle
 import android.os.PersistableBundle
-import android.support.design.widget.BottomNavigationView
-import android.support.v4.app.Fragment
+import com.google.android.material.bottomnavigation.BottomNavigationView
+import androidx.fragment.app.Fragment
 import android.view.View
 import com.blankj.lib.base.BaseActivity
 import com.blankj.utilcode.pkg.R
@@ -29,7 +29,7 @@ class FragmentActivity : BaseActivity() {
         }
     }
 
-    private val mFragments = arrayListOf()
+    private val mFragments = arrayListOf()
     private var curIndex: Int = 0
 
     private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt
index 0e092e0062..2c6656f220 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt
@@ -6,12 +6,12 @@ import android.graphics.Bitmap
 import android.graphics.Color
 import android.os.Build
 import android.os.Bundle
-import android.support.annotation.StringRes
-import android.support.v7.widget.LinearLayoutManager
 import android.view.View
 import android.widget.Button
 import android.widget.ImageView
 import android.widget.TextView
+import androidx.annotation.StringRes
+import androidx.recyclerview.widget.LinearLayoutManager
 import com.blankj.lib.base.BaseTaskActivity
 import com.blankj.lib.base.rv.BaseAdapter
 import com.blankj.lib.base.rv.BaseCell
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt
index a0ea36d528..cd1c1b0d99 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt
@@ -4,7 +4,7 @@ import android.content.Context
 import android.content.Intent
 import android.graphics.Color
 import android.os.Bundle
-import android.support.annotation.StringRes
+import androidx.annotation.StringRes
 import android.text.SpannableStringBuilder
 import android.view.View
 import android.view.ViewGroup
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt
index d84ced168c..202069ed61 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt
@@ -5,7 +5,7 @@ import android.content.Context
 import android.content.Intent
 import android.graphics.*
 import android.os.Bundle
-import android.support.annotation.ColorInt
+import androidx.annotation.ColorInt
 import android.text.Layout
 import android.text.SpannableStringBuilder
 import android.text.TextPaint
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt
index 314ba33d59..458ecbb3fb 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt
@@ -2,7 +2,7 @@ package com.blankj.utilcode.pkg.feature.toast
 
 import android.os.Handler
 import android.os.Looper
-import android.support.annotation.StringRes
+import androidx.annotation.StringRes
 import android.widget.TextView
 import android.widget.Toast
 
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt
index 51c9e53774..47f91e826e 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt
@@ -4,7 +4,7 @@ import android.content.Context
 import android.content.Intent
 import android.graphics.Color
 import android.os.Bundle
-import android.support.v4.content.ContextCompat
+import androidx.core.content.ContextCompat
 import android.view.Gravity
 import android.view.View
 import com.blankj.lib.base.BaseTitleActivity
diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt
index 344a69e448..a495a13013 100644
--- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt
+++ b/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt
@@ -3,7 +3,6 @@ package com.blankj.utilcode.pkg.helper
 import android.app.Dialog
 import android.graphics.Bitmap
 import android.graphics.drawable.ColorDrawable
-import android.support.v7.app.AlertDialog
 import android.text.method.ScrollingMovementMethod
 import android.view.Gravity
 import android.view.LayoutInflater
@@ -12,9 +11,9 @@ import android.widget.Button
 import android.widget.EditText
 import android.widget.ImageView
 import android.widget.TextView
+import androidx.appcompat.app.AlertDialog
 import com.blankj.utilcode.pkg.R
 import com.blankj.utilcode.util.*
-import com.blankj.utilcode.util.PermissionUtils.OnRationaleListener.ShouldRequest
 
 /**
  * ```
@@ -26,7 +25,7 @@ import com.blankj.utilcode.util.PermissionUtils.OnRationaleListener.ShouldReques
  */
 object DialogHelper {
 
-    fun showRationaleDialog(shouldRequest: ShouldRequest) {
+    fun showRationaleDialog(shouldRequest: PermissionUtils.OnRationaleListener.ShouldRequest) {
         val topActivity = ActivityUtils.getTopActivity()
         AlertDialog.Builder(topActivity)
                 .setTitle(android.R.string.dialog_alert_title)
diff --git a/utilcode/pkg/src/main/res/layout/activity_adaptscreen.xml b/utilcode/pkg/src/main/res/layout/activity_adaptscreen.xml
index 792ae5672e..9be8749952 100644
--- a/utilcode/pkg/src/main/res/layout/activity_adaptscreen.xml
+++ b/utilcode/pkg/src/main/res/layout/activity_adaptscreen.xml
@@ -1,5 +1,5 @@
 
-
 
-
+
diff --git a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_close.xml b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_close.xml
index ccc88dddb6..1522b0741b 100644
--- a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_close.xml
+++ b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_close.xml
@@ -8,7 +8,7 @@
     android:fillViewport="true"
     tools:context=".feature.adaptScreen.AdaptCloseActivity">
 
-    
 
@@ -43,6 +43,6 @@
             android:textSize="30pt"
             app:layout_constraintTop_toBottomOf="@id/adaptScreenCloseAdaptDpTv" />
 
-    
+    
 
 
\ No newline at end of file
diff --git a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_height.xml b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_height.xml
index 350921b04d..75fa87e8e5 100644
--- a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_height.xml
+++ b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_height.xml
@@ -1,13 +1,12 @@
 
-
 
-    
 
@@ -94,6 +93,6 @@
                 android:textSize="30pt" />
         
 
-    
+    
 
 
\ No newline at end of file
diff --git a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_width.xml b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_width.xml
index 121415e1b6..dd9f9f40c7 100644
--- a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_width.xml
+++ b/utilcode/pkg/src/main/res/layout/activity_adaptscreen_width.xml
@@ -8,7 +8,7 @@
     android:fillViewport="true"
     tools:context=".feature.adaptScreen.AdaptWidthActivity">
 
-    
 
@@ -149,6 +149,6 @@
 
         
 
-    
+    
 
 
\ No newline at end of file
diff --git a/utilcode/pkg/src/main/res/layout/activity_bar_status_fragment.xml b/utilcode/pkg/src/main/res/layout/activity_bar_status_fragment.xml
index 3ce196004b..bd6e43e7a7 100644
--- a/utilcode/pkg/src/main/res/layout/activity_bar_status_fragment.xml
+++ b/utilcode/pkg/src/main/res/layout/activity_bar_status_fragment.xml
@@ -6,7 +6,7 @@
     android:layout_height="match_parent"
     android:orientation="vertical">
 
-    
 
-    
 
-    
-
Date: Sat, 29 Jun 2019 19:59:42 +0800
Subject: [PATCH 005/181] see 06/29 log

---
 .../test/java/com/blankj/utilcode/util/TimeUtilsTest.java    | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/TimeUtilsTest.java b/utilcode/lib/src/test/java/com/blankj/utilcode/util/TimeUtilsTest.java
index 2ba0a41586..5ab8ee17eb 100644
--- a/utilcode/lib/src/test/java/com/blankj/utilcode/util/TimeUtilsTest.java
+++ b/utilcode/lib/src/test/java/com/blankj/utilcode/util/TimeUtilsTest.java
@@ -42,15 +42,14 @@ public class TimeUtilsTest  {
     public void millis2String() {
         assertEquals(timeString, TimeUtils.millis2String(timeMillis));
         assertEquals(timeStringFormat, TimeUtils.millis2String(timeMillis, mFormat));
-        assertEquals("2017年05月04日", TimeUtils.millis2String(timeMillis, "yyyy年MM月dd日"));
-        assertEquals("16时37分", TimeUtils.millis2String(timeMillis, "HH时mm分"));
+        assertEquals(timeStringFormat, TimeUtils.millis2String(timeMillis, "yyyy MM dd HH:mm:ss"));
     }
 
     @Test
     public void string2Millis() {
         assertEquals(timeMillis, TimeUtils.string2Millis(timeString));
         assertEquals(timeMillis, TimeUtils.string2Millis(timeStringFormat, mFormat));
-        assertEquals(timeMillis, TimeUtils.string2Millis(timeStringFormat, "yyyy年MM月dd日HH时mm分"));
+        assertEquals(timeMillis, TimeUtils.string2Millis(timeStringFormat, "yyyy MM dd HH:mm:ss"));
     }
 
     @Test

From ff046c3c8e552aa10167c053a666358f99dac38b Mon Sep 17 00:00:00 2001
From: Blankj <625783482@qq.com>
Date: Wed, 10 Jul 2019 19:46:10 +0800
Subject: [PATCH 006/181] see 07/10 log

---
 .gitignore                                    |   7 +-
 CHANGELOG.md                                  |   2 +-
 README-CN.md                                  |   4 +-
 README.md                                     |   4 +-
 {launcher => app/launcher}/app/.gitignore     |   0
 app/launcher/app/build.gradle                 |   8 +
 .../launcher}/app/proguard-rules.pro          |   0
 .../app/src/main/AndroidManifest.xml          |   2 +-
 .../com/blankj/launcher/app/LauncherApp.java  |  15 +
 {launcher => app/launcher}/pkg/.gitignore     |   0
 app/launcher/pkg/build.gradle                 |   8 +
 .../launcher}/pkg/proguard-rules.pro          |   0
 app/launcher/pkg/src/main/AndroidManifest.xml |   1 +
 .../com/blankj/launcher/pkg}/LauncherApp.java |   4 +-
 {subutil => app/main}/app/.gitignore          |   0
 app/main/app/build.gradle                     |   8 +
 {subutil => app/main}/app/proguard-rules.pro  |   0
 app/main/app/src/main/AndroidManifest.xml     |  27 ++
 .../java/com/blankj/main/app/MainApp.java     |  35 ++
 {subutil/export => app/main/pkg}/.gitignore   |   0
 app/main/pkg/build.gradle                     |   7 +
 .../main/pkg}/proguard-rules.pro              |   0
 .../main}/pkg/src/main/AndroidManifest.xml    |   2 +-
 .../java/com/blankj/main}/pkg/MainActivity.kt |  12 +-
 .../com/blankj/main}/pkg/SplashActivity.kt    |   2 +-
 .../pkg/src/main/res/layout/activity_main.xml |   0
 .../main}/pkg/src/main/res/values/strings.xml |   0
 {subutil/lib => app/mock}/.gitignore          |   0
 app/mock/build.gradle                         |  11 +
 {subutil/pkg => app/mock}/proguard-rules.pro  |   0
 app/mock/src/main/AndroidManifest.xml         |   1 +
 .../com/blankj/mock/api/SubUtilMockApi.java   |  25 +
 .../com/blankj/mock/api/UtilCodeMockApi.java  |  25 +
 {subutil/pkg => app/subutil/app}/.gitignore   |   0
 app/subutil/app/build.gradle                  |   8 +
 .../subutil}/app/proguard-rules.pro           |   0
 .../subutil}/app/src/main/AndroidManifest.xml |   0
 .../java/com/blankj/subutil/app/SubUtilApp.kt |   0
 .../app => app/subutil/export}/.gitignore     |   0
 app/subutil/export/build.gradle               |   7 +
 .../subutil}/export/proguard-rules.pro        |   0
 .../export/src/main/AndroidManifest.xml       |   0
 .../blankj/subutil/export/api/SubUtilApi.java |   8 +-
 .../export => app/subutil/pkg}/.gitignore     |   0
 app/subutil/pkg/build.gradle                  |   7 +
 .../subutil}/pkg/proguard-rules.pro           |   0
 .../subutil}/pkg/src/main/AndroidManifest.xml |   0
 .../pkg/src/main/assets/test_install_silent   | Bin
 .../java/com/blankj/subutil/pkg/Config.kt     |   0
 .../blankj/subutil/pkg}/SubUtilApiImpl.java   |   8 +-
 .../subutil/pkg/feature/SubUtilActivity.kt    |   1 -
 .../pkg/feature/appStore/AppStoreActivity.kt  |   0
 .../pkg/feature/country/CountryActivity.kt    |   0
 .../feature/dangerous/DangerousActivity.kt    |   0
 .../pkg/feature/location/LocationActivity.kt  |   0
 .../pkg/feature/location/LocationService.kt   |   0
 .../pkg/feature/pinyin/PinyinActivity.kt      |   0
 .../blankj/subutil/pkg/helper/DialogHelper.kt |   0
 .../subutil/pkg/helper/PermissionHelper.kt    |   0
 .../main/res/layout/activity_app_store.xml    |   0
 .../src/main/res/layout/activity_country.xml  |   0
 .../main/res/layout/activity_dangerous.xml    |   0
 .../src/main/res/layout/activity_location.xml |   0
 .../src/main/res/layout/activity_pinyin.xml   |   0
 .../src/main/res/layout/activity_util_sub.xml |   0
 .../pkg/src/main/res/values/strings.xml       |   0
 {utilcode/pkg => app/utilcode/app}/.gitignore |   0
 app/utilcode/app/build.gradle                 |   8 +
 app/utilcode/app/proguard-rules.pro           |  21 +
 .../app/src/main/AndroidManifest.xml          |   3 +-
 .../com/blankj/utilcode/app/UtilCodeApp.kt    |   0
 app/utilcode/export/.gitignore                |   1 +
 app/utilcode/export/build.gradle              |   7 +
 app/utilcode/export/proguard-rules.pro        |  21 +
 .../export/src/main/AndroidManifest.xml       |   0
 .../utilcode/export/api/UtilCodeApi.java      |  20 +
 app/utilcode/pkg/.gitignore                   |   1 +
 app/utilcode/pkg/build.gradle                 |   7 +
 app/utilcode/pkg/proguard-rules.pro           |  21 +
 .../pkg/src/main/AndroidManifest.xml          |  85 ++--
 .../pkg/src/main/assets/fonts/dnmbhs.ttf      | Bin
 .../pkg/src/main/assets/test/sub/test.txt     |   0
 .../pkg/src/main/assets/test/test.txt         |   0
 .../pkg/src/main/assets/test_install          | Bin
 .../java/com/blankj/utilcode/pkg/Config.kt    |   0
 .../blankj/utilcode/pkg/UtilCodeApiImpl.java  |  25 +
 .../utilcode/pkg/feature/CoreUtilActivity.kt  |   7 +-
 .../pkg/feature/activity/ActivityActivity.kt  |   0
 .../feature/activity/SubActivityActivity.kt   |   0
 .../feature/adaptScreen/AdaptCloseActivity.kt |   0
 .../adaptScreen/AdaptHeightActivity.kt        |   0
 .../adaptScreen/AdaptScreenActivity.kt        |   0
 .../feature/adaptScreen/AdaptWidthActivity.kt |   0
 .../utilcode/pkg/feature/api/ApiActivity.kt   |  65 +++
 .../api/other/export/OtherModuleApi.java      |  27 ++
 .../api/other/pkg/OtherPkgApiImpl.java        |  28 ++
 .../utilcode/pkg/feature/app/AppActivity.kt   |   0
 .../utilcode/pkg/feature/bar/BarActivity.kt   |   0
 .../pkg/feature/bar/BarNavActivity.kt         |   0
 .../feature/bar/BarNotificationActivity.kt    |   0
 .../pkg/feature/bar/BarStatusActivity.kt      |   0
 .../pkg/feature/bar/BarStatusAlphaActivity.kt |   0
 .../pkg/feature/bar/BarStatusAlphaFragment.kt |   0
 .../pkg/feature/bar/BarStatusColorActivity.kt |   0
 .../pkg/feature/bar/BarStatusColorFragment.kt |   0
 .../feature/bar/BarStatusCustomActivity.kt    |   0
 .../feature/bar/BarStatusCustomFragment.kt    |   0
 .../feature/bar/BarStatusDrawerActivity.kt    |   0
 .../feature/bar/BarStatusFragmentActivity.kt  |   0
 .../feature/bar/BarStatusImageViewActivity.kt |   0
 .../feature/bar/BarStatusImageViewFragment.kt |   0
 .../feature/brightness/BrightnessActivity.kt  |   0
 .../utilcode/pkg/feature/bus/BusActivity.kt   |   1 -
 .../pkg/feature/bus/BusRemoteActivity.kt      |   0
 .../pkg/feature/clean/CleanActivity.kt        |   0
 .../pkg/feature/click/ClickActivity.kt        |   0
 .../pkg/feature/device/DeviceActivity.kt      |   0
 .../feature/flashlight/FlashlightActivity.kt  |   0
 .../pkg/feature/fragment/ChildFragment.kt     |   0
 .../pkg/feature/fragment/ContainerFragment.kt |   0
 .../pkg/feature/fragment/FragmentActivity.kt  |   0
 .../pkg/feature/fragment/RootFragment.kt      |   0
 .../pkg/feature/image/ImageActivity.kt        |   0
 .../pkg/feature/keyboard/KeyboardActivity.kt  |  20 +-
 .../pkg/feature/language/LanguageActivity.kt  |   0
 .../utilcode/pkg/feature/log/LogActivity.kt   |   0
 .../pkg/feature/metaData/MetaDataActivity.kt  |   0
 .../pkg/feature/network/NetworkActivity.kt    |   0
 .../utilcode/pkg/feature/path/PathActivity.kt |   0
 .../feature/permission/PermissionActivity.kt  |   0
 .../pkg/feature/phone/PhoneActivity.kt        |   0
 .../pkg/feature/process/ProcessActivity.kt    |   0
 .../pkg/feature/reflect/ReflectActivity.kt    |   0
 .../pkg/feature/resource/ResourceActivity.kt  |   0
 .../utilcode/pkg/feature/rom/RomActivity.kt   |   0
 .../pkg/feature/screen/ScreenActivity.kt      |   0
 .../pkg/feature/sdcard/SDCardActivity.kt      |   0
 .../pkg/feature/snackbar/SnackbarActivity.kt  |   0
 .../pkg/feature/spStatic/SPStaticActivity.kt  |   0
 .../utilcode/pkg/feature/span/SpanActivity.kt |   0
 .../utilcode/pkg/feature/toast/CustomToast.kt |   0
 .../pkg/feature/toast/ToastActivity.kt        |   0
 .../pkg/feature/vibrate/VibrateActivity.kt    |   0
 .../utilcode/pkg/helper/DialogHelper.kt       |   0
 .../utilcode/pkg/helper/PermissionHelper.kt   |   0
 .../pkg/src/main/res/anim/fade_in_1000.xml    |   0
 .../pkg/src/main/res/anim/fade_out_1000.xml   |   0
 .../src/main/res/anim/slide_in_bottom_200.xml |   0
 .../src/main/res/anim/slide_in_right_1000.xml |   0
 .../main/res/anim/slide_out_bottom_200.xml    |   0
 .../src/main/res/anim/slide_out_left_1000.xml |   0
 .../animator/fragment_slide_left_enter.xml    |   0
 .../res/animator/fragment_slide_left_exit.xml |   0
 .../animator/fragment_slide_right_enter.xml   |   0
 .../animator/fragment_slide_right_exit.xml    |   0
 .../res/drawable/activity_activity_icon.png   | Bin
 .../res/drawable/activity_activity_logo.png   | Bin
 .../main/res/drawable/bar_status_custom.xml   |   0
 .../res/drawable/bar_status_nav_alpha.xml     |   0
 .../res/drawable/bar_status_nav_color.xml     |   0
 .../res/drawable/bar_status_nav_custom.xml    |   0
 .../res/drawable/bar_status_nav_image.xml     |   0
 .../res/drawable/click_shape_round_rect.xml   |   0
 .../src/main/res/drawable/fragment_nav.xml    |   0
 .../pkg/src/main/res/drawable/image_lena.jpg  | Bin
 .../main/res/drawable/snackbar_custom_bg.xml  |   0
 .../src/main/res/drawable/span_cheetah.png    | Bin
 .../res/drawable/span_shape_block_high.xml    |   0
 .../res/drawable/span_shape_block_low.xml     |   0
 .../res/drawable/toast_shape_round_rect.xml   |   0
 .../src/main/res/layout/activity_activity.xml |   0
 .../main/res/layout/activity_activity_sub.xml |   0
 .../main/res/layout/activity_adaptscreen.xml  |   0
 .../res/layout/activity_adaptscreen_close.xml |   0
 .../layout/activity_adaptscreen_height.xml    |   0
 .../res/layout/activity_adaptscreen_width.xml |   0
 .../pkg/src/main/res/layout/activity_api.xml  |  23 +
 .../pkg/src/main/res/layout/activity_app.xml  |   0
 .../pkg/src/main/res/layout/activity_bar.xml  |   0
 .../src/main/res/layout/activity_bar_nav.xml  |   0
 .../res/layout/activity_bar_notification.xml  |   0
 .../main/res/layout/activity_bar_status.xml   |   0
 .../res/layout/activity_bar_status_alpha.xml  |   0
 .../res/layout/activity_bar_status_color.xml  |   0
 .../res/layout/activity_bar_status_drawer.xml |   0
 .../layout/activity_bar_status_fragment.xml   |   0
 .../layout/activity_bar_status_image_view.xml |   0
 .../layout/activity_bar_status_swipe_back.xml |   0
 .../main/res/layout/activity_brightness.xml   |   0
 .../pkg/src/main/res/layout/activity_bus.xml  |   0
 .../main/res/layout/activity_bus_remote.xml   |   0
 .../src/main/res/layout/activity_clean.xml    |   0
 .../src/main/res/layout/activity_click.xml    |   0
 .../src/main/res/layout/activity_device.xml   |   0
 .../main/res/layout/activity_flashlight.xml   |   0
 .../src/main/res/layout/activity_fragment.xml |   0
 .../src/main/res/layout/activity_image.xml    |   0
 .../src/main/res/layout/activity_keyboard.xml |   2 +-
 .../src/main/res/layout/activity_language.xml |   0
 .../pkg/src/main/res/layout/activity_log.xml  |   0
 .../src/main/res/layout/activity_metadata.xml |   0
 .../src/main/res/layout/activity_network.xml  |   0
 .../pkg/src/main/res/layout/activity_path.xml |   0
 .../main/res/layout/activity_permission.xml   |   0
 .../src/main/res/layout/activity_phone.xml    |   0
 .../src/main/res/layout/activity_process.xml  |   0
 .../src/main/res/layout/activity_reflect.xml  |   0
 .../src/main/res/layout/activity_resource.xml |   0
 .../pkg/src/main/res/layout/activity_rom.xml  |   0
 .../src/main/res/layout/activity_screen.xml   |   0
 .../src/main/res/layout/activity_sdcard.xml   |   0
 .../src/main/res/layout/activity_snackbar.xml |   0
 .../pkg/src/main/res/layout/activity_span.xml |   0
 .../src/main/res/layout/activity_spstatic.xml |   0
 .../src/main/res/layout/activity_toast.xml    |   0
 .../main/res/layout/activity_util_core.xml    |   7 +
 .../src/main/res/layout/activity_vibrate.xml  |   0
 .../src/main/res/layout/dialog_fragment.xml   |   0
 .../src/main/res/layout/dialog_keyboard.xml   |   0
 .../pkg/src/main/res/layout/dialog_screen.xml |   0
 .../pkg/src/main/res/layout/dialog_toast.xml  |   0
 .../res/layout/fragment_bar_status_alpha.xml  |   0
 .../res/layout/fragment_bar_status_color.xml  |   0
 .../res/layout/fragment_bar_status_custom.xml |   0
 .../layout/fragment_bar_status_image_view.xml |   0
 .../src/main/res/layout/fragment_child.xml    |   0
 .../main/res/layout/fragment_container.xml    |   0
 .../pkg/src/main/res/layout/fragment_root.xml |   0
 .../pkg/src/main/res/layout/item_image.xml    |   0
 .../src/main/res/layout/item_image_header.xml |   0
 .../src/main/res/layout/snackbar_custom.xml   |   0
 .../pkg/src/main/res/layout/toast_custom.xml  |   0
 .../src/main/res/menu/navigation_fragment.xml |   0
 .../main/res/menu/navigation_status_bar.xml   |   0
 .../utilcode}/pkg/src/main/res/raw/test.txt   |   0
 .../src/main/res/transition/explode_1000.xml  |   0
 .../pkg/src/main/res/transition/fade_1000.xml |   0
 .../src/main/res/transition/slide_1000.xml    |   0
 .../src/main/res/values-en-rUS/strings.xml    |   0
 .../src/main/res/values-zh-rCN/strings.xml    |   0
 .../pkg/src/main/res/values/strings.xml       |   6 +
 .../pkg/src/main/res/values/styles.xml        |   0
 build.gradle                                  |  16 +-
 .../configApp.gradle => buildApp.gradle       |  51 +-
 buildLib.gradle                               |  49 ++
 buildSrc/build.gradle                         |  14 +-
 buildSrc/src/main/groovy/BuildConfig.groovy   | 109 +++++
 buildSrc/src/main/groovy/Config.groovy        |  76 +++
 buildSrc/src/main/groovy/DepConfig.groovy     |  62 +++
 buildSrc/src/main/groovy/GLog.groovy          | 160 +++++++
 .../com/blankj/plugin/FormatUtils.groovy      |   0
 .../com/blankj/plugin/ReadmeCorePlugin.groovy |   0
 .../com/blankj/plugin/ReadmeExtension.groovy  |   0
 .../com/blankj/plugin/ReadmeSubPlugin.groovy  |   2 +-
 bus-gradle-plugin/.gitignore                  |   2 -
 .../main/java/com/blankj/bus/BusInject.groovy |  87 ----
 .../main/java/com/blankj/bus/BusScan.groovy   | 124 -----
 .../com/blankj/util/JavassistUtils.groovy     |  36 --
 .../com/blankj/utilcode/util/BusUtils.java    |  17 -
 .../java/com/blankj/bus/BusScanTest.groovy    |  15 -
 .../src/test/java/com/blankj/bus/BusTest.java | 162 -------
 gradle.properties                             |   5 +-
 gradle/config/config.gradle                   | 152 ------
 gradle/config/configBuild.gradle              |  94 ----
 gradle/config/configLib.gradle                |  31 --
 gradle/util/utils.gradle                      | 132 -----
 launcher/app/build.gradle                     |  10 -
 launcher/pkg/build.gradle                     |   8 -
 lib/base/build.gradle                         |  22 +-
 .../com/blankj/lib/base/BaseApplication.java  |   3 +-
 lib/common/build.gradle                       |   4 +-
 lib/common/src/main/AndroidManifest.xml       |   2 +-
 .../blankj/lib/common/CommonApplication.java  |   2 +-
 .../blankj/lib/common/CommonBackActivity.java |   1 -
 .../lib/common/CommonDrawerActivity.java      |   1 -
 .../lib/common/CommonTitleActivity.java       |   1 -
 lib/common/src/main/res/values/strings.xml    |   2 -
 lib/subutil/.gitignore                        |   1 +
 {subutil => lib/subutil}/README-CN.md         |   0
 {subutil => lib/subutil}/README.md            |   0
 lib/subutil/build.gradle                      |  28 ++
 .../lib => lib/subutil}/proguard-rules.pro    |   0
 .../subutil}/src/main/AndroidManifest.xml     |   0
 .../blankj/subutil/util/AppStoreUtils.java    |   0
 .../com/blankj/subutil/util/BitUtils.java     |   0
 .../com/blankj/subutil/util/CameraUtils.java  |   0
 .../blankj/subutil/util/ClipboardUtils.java   |   0
 .../blankj/subutil/util/CoordinateUtils.java  |   0
 .../com/blankj/subutil/util/CountryUtils.java |   0
 .../blankj/subutil/util/DangerousUtils.java   |   0
 .../com/blankj/subutil/util/GlideUtils.java   |   0
 .../com/blankj/subutil/util/HttpsUtil.java    |   0
 .../blankj/subutil/util/LocationUtils.java    |   0
 .../com/blankj/subutil/util/LunarUtils.java   |   0
 .../com/blankj/subutil/util/PinyinUtils.java  |   0
 .../blankj/subutil/util/RetrofitUtils.java    |   0
 .../com/blankj/subutil/util/http/Chain.java   |   0
 .../subutil/util/http/ExecutorFactory.java    |   0
 .../com/blankj/subutil/util/http/Headers.java |   0
 .../blankj/subutil/util/http/HttpUtils.java   |   0
 .../blankj/subutil/util/http/Interceptor.java |   0
 .../com/blankj/subutil/util/http/Request.java |   0
 .../blankj/subutil/util/http/Response.java    |   0
 .../subutil/util/http/ResponseCallback.java   |   0
 .../blankj/subutil/util/http/SSLConfig.java   |   0
 .../com/blankj/subutil/util/BaseTest.java     |   0
 .../subutil/util/ClipboardUtilsTest.java      |   0
 .../subutil/util/CoordinateUtilsTest.java     |   0
 .../blankj/subutil/util/LunarUtilsTest.java   |   0
 .../com/blankj/subutil/util/TestConfig.java   |   0
 .../com/blankj/subutil/util/TestUtils.java    |   0
 .../subutil/util/http/HttpUtilsTest.java      |   0
 .../blankj/subutil/util/http/UserBean.java    |   0
 lib/utilcode/.gitignore                       |   1 +
 {utilcode => lib/utilcode}/README-CN.md       |   0
 .../utilcode}/README-STATIC-BUS.md            |   2 +-
 {utilcode => lib/utilcode}/README.md          |   0
 lib/utilcode/build.gradle                     |  27 ++
 .../lib => lib/utilcode}/proguard-rules.pro   |   0
 .../lib => lib/utilcode}/project.properties   |   0
 .../utilcode}/src/main/AndroidManifest.xml    |   0
 .../utilcode/constant/CacheConstants.java     |   0
 .../utilcode/constant/MemoryConstants.java    |   0
 .../constant/PermissionConstants.java         |   0
 .../utilcode/constant/RegexConstants.java     |   0
 .../utilcode/constant/TimeConstants.java      |   0
 .../blankj/utilcode/util/ActivityUtils.java   |   2 +-
 .../utilcode/util/AdaptScreenUtils.java       |   0
 .../com/blankj/utilcode/util/ApiUtils.java    | 101 ++++
 .../com/blankj/utilcode/util/AppUtils.java    |   0
 .../com/blankj/utilcode/util/BarUtils.java    |   0
 .../blankj/utilcode/util/BrightnessUtils.java |   0
 .../com/blankj/utilcode/util/BusUtils.java    | 123 +++++
 .../utilcode/util/CacheDiskStaticUtils.java   |   0
 .../blankj/utilcode/util/CacheDiskUtils.java  |   0
 .../utilcode/util/CacheDoubleStaticUtils.java |   0
 .../utilcode/util/CacheDoubleUtils.java       |   0
 .../utilcode/util/CacheMemoryStaticUtils.java |   0
 .../utilcode/util/CacheMemoryUtils.java       |   0
 .../com/blankj/utilcode/util/CleanUtils.java  |   0
 .../com/blankj/utilcode/util/ClickUtils.java  |   0
 .../com/blankj/utilcode/util/CloneUtils.java  |   0
 .../com/blankj/utilcode/util/CloseUtils.java  |   0
 .../com/blankj/utilcode/util/ColorUtils.java  |   0
 .../blankj/utilcode/util/ConvertUtils.java    |   0
 .../com/blankj/utilcode/util/CrashUtils.java  |   0
 .../com/blankj/utilcode/util/DeviceUtils.java |   0
 .../com/blankj/utilcode/util/EncodeUtils.java |   0
 .../blankj/utilcode/util/EncryptUtils.java    |   0
 .../com/blankj/utilcode/util/FileIOUtils.java |   0
 .../com/blankj/utilcode/util/FileUtils.java   |   0
 .../blankj/utilcode/util/FlashlightUtils.java |   0
 .../blankj/utilcode/util/FragmentUtils.java   |   0
 .../com/blankj/utilcode/util/GsonUtils.java   |   0
 .../com/blankj/utilcode/util/ImageUtils.java  |   0
 .../com/blankj/utilcode/util/IntentUtils.java |   0
 .../com/blankj/utilcode/util/JsonUtils.java   |   0
 .../blankj/utilcode/util/KeyboardUtils.java   |  81 ++--
 .../blankj/utilcode/util/LanguageUtils.java   |   0
 .../com/blankj/utilcode/util/LogUtils.java    |  21 +-
 .../blankj/utilcode/util/MessengerUtils.java  | 144 +-----
 .../blankj/utilcode/util/MetaDataUtils.java   |   0
 .../blankj/utilcode/util/NetworkUtils.java    |   2 +-
 .../utilcode/util/NotificationUtils.java      |   0
 .../com/blankj/utilcode/util/ObjectUtils.java |   0
 .../com/blankj/utilcode/util/PathUtils.java   |   0
 .../blankj/utilcode/util/PermissionUtils.java |   0
 .../com/blankj/utilcode/util/PhoneUtils.java  |   0
 .../blankj/utilcode/util/ProcessUtils.java    |   0
 .../blankj/utilcode/util/ReflectUtils.java    |   0
 .../com/blankj/utilcode/util/RegexUtils.java  |   0
 .../blankj/utilcode/util/ResourceUtils.java   |   0
 .../com/blankj/utilcode/util/RomUtils.java    |   0
 .../com/blankj/utilcode/util/SDCardUtils.java |   0
 .../blankj/utilcode/util/SPStaticUtils.java   |   0
 .../com/blankj/utilcode/util/SPUtils.java     |   0
 .../com/blankj/utilcode/util/ScreenUtils.java |   0
 .../blankj/utilcode/util/ServiceUtils.java    |   0
 .../com/blankj/utilcode/util/ShellUtils.java  |   0
 .../com/blankj/utilcode/util/SizeUtils.java   |   0
 .../blankj/utilcode/util/SnackbarUtils.java   |   0
 .../com/blankj/utilcode/util/SpanUtils.java   |   0
 .../com/blankj/utilcode/util/StringUtils.java |   0
 .../com/blankj/utilcode/util/ThreadUtils.java | 419 ++++++++--------
 .../blankj/utilcode/util/ThrowableUtils.java  |   0
 .../com/blankj/utilcode/util/TimeUtils.java   |   4 +-
 .../com/blankj/utilcode/util/ToastUtils.java  |   7 +
 .../com/blankj/utilcode/util/UriUtils.java    |   0
 .../java/com/blankj/utilcode/util/Utils.java  |  82 ++--
 .../blankj/utilcode/util/VibrateUtils.java    |   0
 .../com/blankj/utilcode/util/ViewUtils.java   |  28 ++
 .../com/blankj/utilcode/util/ZipUtils.java    |   0
 .../src/main/res/values-v21/styles.xml        |   0
 .../main/res/xml/util_code_provider_paths.xml |   0
 .../com/blankj/utilcode/util/BaseTest.java    |  42 ++
 .../util/CacheDiskStaticUtilsTest.java        |   0
 .../utilcode/util/CacheDiskUtilsTest.java     |   0
 .../util/CacheDoubleStaticUtilsTest.java      |   0
 .../utilcode/util/CacheDoubleUtilsTest.java   |   0
 .../util/CacheMemoryStaticUtilsTest.java      |   0
 .../utilcode/util/CacheMemoryUtilsTest.java   |   0
 .../blankj/utilcode/util/CloneUtilsTest.java  |   0
 .../blankj/utilcode/util/ColorUtilsTest.java  |   0
 .../utilcode/util/ConvertUtilsTest.java       |   0
 .../blankj/utilcode/util/EncodeUtilsTest.java |   0
 .../utilcode/util/EncryptUtilsTest.java       |   0
 .../blankj/utilcode/util/FileIOUtilsTest.java |   0
 .../blankj/utilcode/util/FileUtilsTest.java   |   0
 .../blankj/utilcode/util/GsonUtilsTest.java   |   0
 .../blankj/utilcode/util/LogUtilsTest.java    |   0
 .../blankj/utilcode/util/ObjectUtilsTest.java |   0
 .../blankj/utilcode/util/RegexUtilsTest.java  |   0
 .../blankj/utilcode/util/StringUtilsTest.java |   0
 .../com/blankj/utilcode/util/TestConfig.java  |   0
 .../blankj/utilcode/util/ThreadUtilsTest.java |   0
 .../blankj/utilcode/util/TimeUtilsTest.java   |   0
 .../blankj/utilcode/util/ZipUtilsTest.java    |   0
 .../util/reflect/PrivateConstructors.java     |   0
 .../util/reflect/ReflectUtilsTest.java        |   0
 .../blankj/utilcode/util/reflect/Test1.java   |   0
 .../blankj/utilcode/util/reflect/Test10.java  |   0
 .../blankj/utilcode/util/reflect/Test2.java   |   0
 .../blankj/utilcode/util/reflect/Test3.java   |   0
 .../blankj/utilcode/util/reflect/Test4.java   |   0
 .../blankj/utilcode/util/reflect/Test5.java   |   0
 .../blankj/utilcode/util/reflect/Test6.java   |   0
 .../blankj/utilcode/util/reflect/Test7.java   |   0
 .../blankj/utilcode/util/reflect/Test8.java   |   0
 .../blankj/utilcode/util/reflect/Test9.java   |   0
 .../reflect/TestHierarchicalMethodsBase.java  |   0
 .../TestHierarchicalMethodsSubclass.java      |   0
 .../util/reflect/TestPrivateStaticFinal.java  |   0
 .../utilcode}/src/test/res/encrypt/MD5.txt    |   0
 .../utilcode}/src/test/res/file/GBK.txt       |   0
 .../utilcode}/src/test/res/file/UTF16BE.txt   | Bin
 .../utilcode}/src/test/res/file/UTF8.txt      |   0
 .../utilcode}/src/test/res/file/Unicode.txt   | Bin
 .../src/test/res/file/recuresive/UTF8.txt     |   0
 .../utilcode}/src/test/res/zip/test.txt       |   0
 .../src/test/res/zip/testDir/test.txt         |   0
 .../res/zip/\346\265\213\350\257\225.txt"     |   0
 .../\346\265\213\350\257\225.txt"             |   0
 plugin/api-gradle-plugin/.gitignore           |   1 +
 plugin/api-gradle-plugin/CHANGELOG.md         |   4 +
 plugin/api-gradle-plugin/build.gradle         |  66 +++
 .../api-gradle-plugin}/project.properties     |   6 +-
 .../com/blankj/api/ApiClassVisitor.groovy     |  69 +++
 .../java/com/blankj/api/ApiExtension.groovy   |   5 +
 .../main/java/com/blankj/api/ApiInject.groovy |  31 ++
 .../main/java/com/blankj/api/ApiPlugin.groovy |  28 ++
 .../main/java/com/blankj/api/ApiScan.groovy   |  45 ++
 .../java/com/blankj/api/ApiTransform.groovy   | 103 ++--
 .../blankj/api/ApiUtilsClassVisitor.groovy    |  62 +++
 .../main/java/com/blankj/api/Config.groovy    |  19 +
 .../java/com/blankj/util/JsonUtils.groovy     |   0
 .../main/java/com/blankj/util/LogUtils.groovy |  34 ++
 .../main/java/com/blankj/util/ZipUtils.java   |   0
 .../src/test/java/com/blankj/api/Test.java    | 133 +++++
 .../com/blankj/utilcode/util/ApiUtils.java    | 125 +++++
 plugin/bus-gradle-plugin/.gitignore           |   1 +
 .../bus-gradle-plugin}/CHANGELOG.md           |   2 +-
 .../bus-gradle-plugin}/build.gradle           |  19 +-
 plugin/bus-gradle-plugin/project.properties   |   9 +
 .../com/blankj/bus/BusClassVisitor.groovy     |  54 +++
 .../java/com/blankj/bus/BusExtension.groovy   |   0
 .../main/java/com/blankj/bus/BusInject.groovy |  31 ++
 .../main/java/com/blankj/bus/BusPlugin.groovy |   5 +-
 .../main/java/com/blankj/bus/BusScan.groovy   |  44 ++
 .../java/com/blankj/bus/BusTransform.groovy   |  35 +-
 .../blankj/bus/BusUtilsClassVisitor.groovy    |  62 +++
 .../main/java/com/blankj/bus/Config.groovy    |   3 +-
 .../java/com/blankj/util/JsonUtils.groovy     |  21 +
 .../main/java/com/blankj/util/LogUtils.groovy |   0
 .../main/java/com/blankj/util/ZipUtils.java   | 453 ++++++++++++++++++
 settings.gradle                               |   4 +-
 subutil/app/build.gradle                      |   8 -
 subutil/export/build.gradle                   |   3 -
 subutil/lib/build.gradle                      |  28 --
 subutil/pkg/build.gradle                      |   9 -
 utilcode/app/build.gradle                     |   8 -
 utilcode/export/build.gradle                  |   3 -
 utilcode/lib/.gitignore                       |   2 -
 utilcode/lib/build.gradle                     |  26 -
 .../com/blankj/utilcode/util/BaseTest.java    | 230 ---------
 utilcode/pkg/build.gradle                     |   9 -
 485 files changed, 3166 insertions(+), 1856 deletions(-)
 rename {launcher => app/launcher}/app/.gitignore (100%)
 create mode 100644 app/launcher/app/build.gradle
 rename {launcher => app/launcher}/app/proguard-rules.pro (100%)
 rename {launcher => app/launcher}/app/src/main/AndroidManifest.xml (93%)
 create mode 100644 app/launcher/app/src/main/java/com/blankj/launcher/app/LauncherApp.java
 rename {launcher => app/launcher}/pkg/.gitignore (100%)
 create mode 100644 app/launcher/pkg/build.gradle
 rename {launcher => app/launcher}/pkg/proguard-rules.pro (100%)
 create mode 100644 app/launcher/pkg/src/main/AndroidManifest.xml
 rename {launcher/app/src/main/java/com/blankj/launcher/app => app/launcher/pkg/src/main/java/com/blankj/launcher/pkg}/LauncherApp.java (90%)
 rename {subutil => app/main}/app/.gitignore (100%)
 create mode 100644 app/main/app/build.gradle
 rename {subutil => app/main}/app/proguard-rules.pro (100%)
 create mode 100644 app/main/app/src/main/AndroidManifest.xml
 create mode 100644 app/main/app/src/main/java/com/blankj/main/app/MainApp.java
 rename {subutil/export => app/main/pkg}/.gitignore (100%)
 create mode 100644 app/main/pkg/build.gradle
 rename {subutil/export => app/main/pkg}/proguard-rules.pro (100%)
 rename {launcher => app/main}/pkg/src/main/AndroidManifest.xml (89%)
 rename {launcher/pkg/src/main/java/com/blankj/launcher => app/main/pkg/src/main/java/com/blankj/main}/pkg/MainActivity.kt (83%)
 rename {launcher/pkg/src/main/java/com/blankj/launcher => app/main/pkg/src/main/java/com/blankj/main}/pkg/SplashActivity.kt (97%)
 rename {launcher => app/main}/pkg/src/main/res/layout/activity_main.xml (100%)
 rename {launcher => app/main}/pkg/src/main/res/values/strings.xml (100%)
 rename {subutil/lib => app/mock}/.gitignore (100%)
 create mode 100644 app/mock/build.gradle
 rename {subutil/pkg => app/mock}/proguard-rules.pro (100%)
 create mode 100644 app/mock/src/main/AndroidManifest.xml
 create mode 100644 app/mock/src/main/java/com/blankj/mock/api/SubUtilMockApi.java
 create mode 100644 app/mock/src/main/java/com/blankj/mock/api/UtilCodeMockApi.java
 rename {subutil/pkg => app/subutil/app}/.gitignore (100%)
 create mode 100644 app/subutil/app/build.gradle
 rename {utilcode => app/subutil}/app/proguard-rules.pro (100%)
 rename {subutil => app/subutil}/app/src/main/AndroidManifest.xml (100%)
 rename {subutil => app/subutil}/app/src/main/java/com/blankj/subutil/app/SubUtilApp.kt (100%)
 rename {utilcode/app => app/subutil/export}/.gitignore (100%)
 create mode 100644 app/subutil/export/build.gradle
 rename {utilcode => app/subutil}/export/proguard-rules.pro (100%)
 rename {subutil => app/subutil}/export/src/main/AndroidManifest.xml (100%)
 rename {subutil => app/subutil}/export/src/main/java/com/blankj/subutil/export/api/SubUtilApi.java (54%)
 rename {utilcode/export => app/subutil/pkg}/.gitignore (100%)
 create mode 100644 app/subutil/pkg/build.gradle
 rename {utilcode => app/subutil}/pkg/proguard-rules.pro (100%)
 rename {subutil => app/subutil}/pkg/src/main/AndroidManifest.xml (100%)
 rename {subutil => app/subutil}/pkg/src/main/assets/test_install_silent (100%)
 rename {subutil => app/subutil}/pkg/src/main/java/com/blankj/subutil/pkg/Config.kt (100%)
 rename {subutil/pkg/src/main/java/com/blankj/subutil/pkg/impl => app/subutil/pkg/src/main/java/com/blankj/subutil/pkg}/SubUtilApiImpl.java (69%)
 rename {subutil => app/subutil}/pkg/src/main/java/com/blankj/subutil/pkg/feature/SubUtilActivity.kt (97%)
 rename {subutil => app/subutil}/pkg/src/main/java/com/blankj/subutil/pkg/feature/appStore/AppStoreActivity.kt (100%)
 rename {subutil => app/subutil}/pkg/src/main/java/com/blankj/subutil/pkg/feature/country/CountryActivity.kt (100%)
 rename {subutil => app/subutil}/pkg/src/main/java/com/blankj/subutil/pkg/feature/dangerous/DangerousActivity.kt (100%)
 rename {subutil => app/subutil}/pkg/src/main/java/com/blankj/subutil/pkg/feature/location/LocationActivity.kt (100%)
 rename {subutil => app/subutil}/pkg/src/main/java/com/blankj/subutil/pkg/feature/location/LocationService.kt (100%)
 rename {subutil => app/subutil}/pkg/src/main/java/com/blankj/subutil/pkg/feature/pinyin/PinyinActivity.kt (100%)
 rename {subutil => app/subutil}/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt (100%)
 rename {subutil => app/subutil}/pkg/src/main/java/com/blankj/subutil/pkg/helper/PermissionHelper.kt (100%)
 rename {subutil => app/subutil}/pkg/src/main/res/layout/activity_app_store.xml (100%)
 rename {subutil => app/subutil}/pkg/src/main/res/layout/activity_country.xml (100%)
 rename {subutil => app/subutil}/pkg/src/main/res/layout/activity_dangerous.xml (100%)
 rename {subutil => app/subutil}/pkg/src/main/res/layout/activity_location.xml (100%)
 rename {subutil => app/subutil}/pkg/src/main/res/layout/activity_pinyin.xml (100%)
 rename {subutil => app/subutil}/pkg/src/main/res/layout/activity_util_sub.xml (100%)
 rename {subutil => app/subutil}/pkg/src/main/res/values/strings.xml (100%)
 rename {utilcode/pkg => app/utilcode/app}/.gitignore (100%)
 create mode 100644 app/utilcode/app/build.gradle
 create mode 100644 app/utilcode/app/proguard-rules.pro
 rename {utilcode => app/utilcode}/app/src/main/AndroidManifest.xml (89%)
 rename {utilcode => app/utilcode}/app/src/main/java/com/blankj/utilcode/app/UtilCodeApp.kt (100%)
 create mode 100644 app/utilcode/export/.gitignore
 create mode 100644 app/utilcode/export/build.gradle
 create mode 100644 app/utilcode/export/proguard-rules.pro
 rename {utilcode => app/utilcode}/export/src/main/AndroidManifest.xml (100%)
 create mode 100644 app/utilcode/export/src/main/java/com/blankj/utilcode/export/api/UtilCodeApi.java
 create mode 100644 app/utilcode/pkg/.gitignore
 create mode 100644 app/utilcode/pkg/build.gradle
 create mode 100644 app/utilcode/pkg/proguard-rules.pro
 rename {utilcode => app/utilcode}/pkg/src/main/AndroidManifest.xml (97%)
 rename {utilcode => app/utilcode}/pkg/src/main/assets/fonts/dnmbhs.ttf (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/assets/test/sub/test.txt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/assets/test/test.txt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/assets/test_install (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/Config.kt (100%)
 create mode 100644 app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/UtilCodeApiImpl.java
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/CoreUtilActivity.kt (96%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptCloseActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptHeightActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptScreenActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptWidthActivity.kt (100%)
 create mode 100644 app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/api/ApiActivity.kt
 create mode 100644 app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/api/other/export/OtherModuleApi.java
 create mode 100644 app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/api/other/pkg/OtherPkgApiImpl.java
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/app/AppActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNavActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNotificationActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaFragment.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorFragment.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomFragment.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusDrawerActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewFragment.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/brightness/BrightnessActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusActivity.kt (97%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusRemoteActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/clean/CleanActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/click/ClickActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/device/DeviceActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/flashlight/FlashlightActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ChildFragment.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/RootFragment.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/keyboard/KeyboardActivity.kt (88%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/language/LanguageActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/log/LogActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/metaData/MetaDataActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/network/NetworkActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/path/PathActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/permission/PermissionActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/phone/PhoneActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/process/ProcessActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/reflect/ReflectActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/resource/ResourceActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/rom/RomActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/screen/ScreenActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/sdcard/SDCardActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/spStatic/SPStaticActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/feature/vibrate/VibrateActivity.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/java/com/blankj/utilcode/pkg/helper/PermissionHelper.kt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/anim/fade_in_1000.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/anim/fade_out_1000.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/anim/slide_in_bottom_200.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/anim/slide_in_right_1000.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/anim/slide_out_bottom_200.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/anim/slide_out_left_1000.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/animator/fragment_slide_left_enter.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/animator/fragment_slide_left_exit.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/animator/fragment_slide_right_enter.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/animator/fragment_slide_right_exit.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/drawable/activity_activity_icon.png (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/drawable/activity_activity_logo.png (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/drawable/bar_status_custom.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/drawable/bar_status_nav_alpha.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/drawable/bar_status_nav_color.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/drawable/bar_status_nav_custom.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/drawable/bar_status_nav_image.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/drawable/click_shape_round_rect.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/drawable/fragment_nav.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/drawable/image_lena.jpg (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/drawable/snackbar_custom_bg.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/drawable/span_cheetah.png (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/drawable/span_shape_block_high.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/drawable/span_shape_block_low.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/drawable/toast_shape_round_rect.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_activity.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_activity_sub.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_adaptscreen.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_adaptscreen_close.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_adaptscreen_height.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_adaptscreen_width.xml (100%)
 create mode 100644 app/utilcode/pkg/src/main/res/layout/activity_api.xml
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_app.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_bar.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_bar_nav.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_bar_notification.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_bar_status.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_bar_status_alpha.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_bar_status_color.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_bar_status_drawer.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_bar_status_fragment.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_bar_status_image_view.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_bar_status_swipe_back.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_brightness.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_bus.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_bus_remote.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_clean.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_click.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_device.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_flashlight.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_fragment.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_image.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_keyboard.xml (98%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_language.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_log.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_metadata.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_network.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_path.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_permission.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_phone.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_process.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_reflect.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_resource.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_rom.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_screen.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_sdcard.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_snackbar.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_span.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_spstatic.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_toast.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_util_core.xml (97%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/activity_vibrate.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/dialog_fragment.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/dialog_keyboard.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/dialog_screen.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/dialog_toast.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/fragment_bar_status_alpha.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/fragment_bar_status_color.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/fragment_bar_status_custom.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/fragment_bar_status_image_view.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/fragment_child.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/fragment_container.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/fragment_root.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/item_image.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/item_image_header.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/snackbar_custom.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/layout/toast_custom.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/menu/navigation_fragment.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/menu/navigation_status_bar.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/raw/test.txt (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/transition/explode_1000.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/transition/fade_1000.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/transition/slide_1000.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/values-en-rUS/strings.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/values-zh-rCN/strings.xml (100%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/values/strings.xml (98%)
 rename {utilcode => app/utilcode}/pkg/src/main/res/values/styles.xml (100%)
 rename gradle/config/configApp.gradle => buildApp.gradle (63%)
 create mode 100644 buildLib.gradle
 create mode 100644 buildSrc/src/main/groovy/BuildConfig.groovy
 create mode 100644 buildSrc/src/main/groovy/Config.groovy
 create mode 100644 buildSrc/src/main/groovy/DepConfig.groovy
 create mode 100644 buildSrc/src/main/groovy/GLog.groovy
 rename buildSrc/src/main/{groovy => java}/com/blankj/plugin/FormatUtils.groovy (100%)
 rename buildSrc/src/main/{groovy => java}/com/blankj/plugin/ReadmeCorePlugin.groovy (100%)
 rename buildSrc/src/main/{groovy => java}/com/blankj/plugin/ReadmeExtension.groovy (100%)
 rename buildSrc/src/main/{groovy => java}/com/blankj/plugin/ReadmeSubPlugin.groovy (97%)
 delete mode 100755 bus-gradle-plugin/.gitignore
 delete mode 100755 bus-gradle-plugin/src/main/java/com/blankj/bus/BusInject.groovy
 delete mode 100755 bus-gradle-plugin/src/main/java/com/blankj/bus/BusScan.groovy
 delete mode 100644 bus-gradle-plugin/src/main/java/com/blankj/util/JavassistUtils.groovy
 delete mode 100755 bus-gradle-plugin/src/main/java/com/blankj/utilcode/util/BusUtils.java
 delete mode 100644 bus-gradle-plugin/src/test/java/com/blankj/bus/BusScanTest.groovy
 delete mode 100755 bus-gradle-plugin/src/test/java/com/blankj/bus/BusTest.java
 delete mode 100644 gradle/config/config.gradle
 delete mode 100644 gradle/config/configBuild.gradle
 delete mode 100644 gradle/config/configLib.gradle
 delete mode 100644 gradle/util/utils.gradle
 delete mode 100644 launcher/app/build.gradle
 delete mode 100644 launcher/pkg/build.gradle
 create mode 100644 lib/subutil/.gitignore
 rename {subutil => lib/subutil}/README-CN.md (100%)
 rename {subutil => lib/subutil}/README.md (100%)
 create mode 100644 lib/subutil/build.gradle
 rename {subutil/lib => lib/subutil}/proguard-rules.pro (100%)
 rename {subutil/lib => lib/subutil}/src/main/AndroidManifest.xml (100%)
 rename {subutil/lib => lib/subutil}/src/main/java/com/blankj/subutil/util/AppStoreUtils.java (100%)
 rename {subutil/lib => lib/subutil}/src/main/java/com/blankj/subutil/util/BitUtils.java (100%)
 rename {subutil/lib => lib/subutil}/src/main/java/com/blankj/subutil/util/CameraUtils.java (100%)
 rename {subutil/lib => lib/subutil}/src/main/java/com/blankj/subutil/util/ClipboardUtils.java (100%)
 rename {subutil/lib => lib/subutil}/src/main/java/com/blankj/subutil/util/CoordinateUtils.java (100%)
 rename {subutil/lib => lib/subutil}/src/main/java/com/blankj/subutil/util/CountryUtils.java (100%)
 rename {subutil/lib => lib/subutil}/src/main/java/com/blankj/subutil/util/DangerousUtils.java (100%)
 rename {subutil/lib => lib/subutil}/src/main/java/com/blankj/subutil/util/GlideUtils.java (100%)
 rename {subutil/lib => lib/subutil}/src/main/java/com/blankj/subutil/util/HttpsUtil.java (100%)
 rename {subutil/lib => lib/subutil}/src/main/java/com/blankj/subutil/util/LocationUtils.java (100%)
 rename {subutil/lib => lib/subutil}/src/main/java/com/blankj/subutil/util/LunarUtils.java (100%)
 rename {subutil/lib => lib/subutil}/src/main/java/com/blankj/subutil/util/PinyinUtils.java (100%)
 rename {subutil/lib => lib/subutil}/src/main/java/com/blankj/subutil/util/RetrofitUtils.java (100%)
 rename {subutil/lib => lib/subutil}/src/main/java/com/blankj/subutil/util/http/Chain.java (100%)
 rename {subutil/lib => lib/subutil}/src/main/java/com/blankj/subutil/util/http/ExecutorFactory.java (100%)
 rename {subutil/lib => lib/subutil}/src/main/java/com/blankj/subutil/util/http/Headers.java (100%)
 rename {subutil/lib => lib/subutil}/src/main/java/com/blankj/subutil/util/http/HttpUtils.java (100%)
 rename {subutil/lib => lib/subutil}/src/main/java/com/blankj/subutil/util/http/Interceptor.java (100%)
 rename {subutil/lib => lib/subutil}/src/main/java/com/blankj/subutil/util/http/Request.java (100%)
 rename {subutil/lib => lib/subutil}/src/main/java/com/blankj/subutil/util/http/Response.java (100%)
 rename {subutil/lib => lib/subutil}/src/main/java/com/blankj/subutil/util/http/ResponseCallback.java (100%)
 rename {subutil/lib => lib/subutil}/src/main/java/com/blankj/subutil/util/http/SSLConfig.java (100%)
 rename {subutil/lib => lib/subutil}/src/test/java/com/blankj/subutil/util/BaseTest.java (100%)
 rename {subutil/lib => lib/subutil}/src/test/java/com/blankj/subutil/util/ClipboardUtilsTest.java (100%)
 rename {subutil/lib => lib/subutil}/src/test/java/com/blankj/subutil/util/CoordinateUtilsTest.java (100%)
 rename {subutil/lib => lib/subutil}/src/test/java/com/blankj/subutil/util/LunarUtilsTest.java (100%)
 rename {subutil/lib => lib/subutil}/src/test/java/com/blankj/subutil/util/TestConfig.java (100%)
 rename {subutil/lib => lib/subutil}/src/test/java/com/blankj/subutil/util/TestUtils.java (100%)
 rename {subutil/lib => lib/subutil}/src/test/java/com/blankj/subutil/util/http/HttpUtilsTest.java (100%)
 rename {subutil/lib => lib/subutil}/src/test/java/com/blankj/subutil/util/http/UserBean.java (100%)
 create mode 100644 lib/utilcode/.gitignore
 rename {utilcode => lib/utilcode}/README-CN.md (100%)
 rename {utilcode => lib/utilcode}/README-STATIC-BUS.md (98%)
 rename {utilcode => lib/utilcode}/README.md (100%)
 create mode 100644 lib/utilcode/build.gradle
 rename {utilcode/lib => lib/utilcode}/proguard-rules.pro (100%)
 rename {utilcode/lib => lib/utilcode}/project.properties (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/AndroidManifest.xml (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/constant/CacheConstants.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/constant/MemoryConstants.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/constant/PermissionConstants.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/constant/RegexConstants.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/constant/TimeConstants.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/ActivityUtils.java (99%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/AdaptScreenUtils.java (100%)
 create mode 100644 lib/utilcode/src/main/java/com/blankj/utilcode/util/ApiUtils.java
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/AppUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/BarUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java (100%)
 create mode 100644 lib/utilcode/src/main/java/com/blankj/utilcode/util/BusUtils.java
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/CacheDiskUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/CacheDoubleStaticUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/CacheMemoryStaticUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/CacheMemoryUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/CleanUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/ClickUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/CloneUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/CloseUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/ColorUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/ConvertUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/CrashUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/DeviceUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/EncodeUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/EncryptUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/FileIOUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/FileUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/FlashlightUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/FragmentUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/GsonUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/ImageUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/IntentUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/JsonUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java (84%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/LanguageUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/LogUtils.java (98%)
 rename utilcode/lib/src/main/java/com/blankj/utilcode/util/BusUtils.java => lib/utilcode/src/main/java/com/blankj/utilcode/util/MessengerUtils.java (72%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/NetworkUtils.java (99%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/NotificationUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/ObjectUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/PathUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/PermissionUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/PhoneUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/ProcessUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/ReflectUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/RegexUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/ResourceUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/RomUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/SDCardUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/SPStaticUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/SPUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/ScreenUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/ServiceUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/ShellUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/SizeUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/SpanUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/StringUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/ThreadUtils.java (86%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/ThrowableUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/TimeUtils.java (99%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/ToastUtils.java (98%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/UriUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/Utils.java (88%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/VibrateUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/ViewUtils.java (68%)
 rename {utilcode/lib => lib/utilcode}/src/main/java/com/blankj/utilcode/util/ZipUtils.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/res/values-v21/styles.xml (100%)
 rename {utilcode/lib => lib/utilcode}/src/main/res/xml/util_code_provider_paths.xml (100%)
 create mode 100644 lib/utilcode/src/test/java/com/blankj/utilcode/util/BaseTest.java
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/CacheDiskStaticUtilsTest.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/CacheDiskUtilsTest.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/CacheDoubleStaticUtilsTest.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/CacheDoubleUtilsTest.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/CacheMemoryStaticUtilsTest.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/CacheMemoryUtilsTest.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/CloneUtilsTest.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/ColorUtilsTest.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/ConvertUtilsTest.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/EncodeUtilsTest.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/EncryptUtilsTest.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/FileIOUtilsTest.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/FileUtilsTest.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/GsonUtilsTest.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/LogUtilsTest.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/ObjectUtilsTest.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/RegexUtilsTest.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/StringUtilsTest.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/TestConfig.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/ThreadUtilsTest.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/TimeUtilsTest.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/ZipUtilsTest.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/reflect/PrivateConstructors.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/reflect/ReflectUtilsTest.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/reflect/Test1.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/reflect/Test10.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/reflect/Test2.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/reflect/Test3.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/reflect/Test4.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/reflect/Test5.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/reflect/Test6.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/reflect/Test7.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/reflect/Test8.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/reflect/Test9.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/reflect/TestHierarchicalMethodsBase.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/reflect/TestHierarchicalMethodsSubclass.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/java/com/blankj/utilcode/util/reflect/TestPrivateStaticFinal.java (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/res/encrypt/MD5.txt (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/res/file/GBK.txt (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/res/file/UTF16BE.txt (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/res/file/UTF8.txt (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/res/file/Unicode.txt (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/res/file/recuresive/UTF8.txt (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/res/zip/test.txt (100%)
 rename {utilcode/lib => lib/utilcode}/src/test/res/zip/testDir/test.txt (100%)
 rename "utilcode/lib/src/test/res/zip/\346\265\213\350\257\225.txt" => "lib/utilcode/src/test/res/zip/\346\265\213\350\257\225.txt" (100%)
 rename "utilcode/lib/src/test/res/zip/\346\265\213\350\257\225\346\226\207\344\273\266\345\244\271/\346\265\213\350\257\225.txt" => "lib/utilcode/src/test/res/zip/\346\265\213\350\257\225\346\226\207\344\273\266\345\244\271/\346\265\213\350\257\225.txt" (100%)
 create mode 100755 plugin/api-gradle-plugin/.gitignore
 create mode 100644 plugin/api-gradle-plugin/CHANGELOG.md
 create mode 100755 plugin/api-gradle-plugin/build.gradle
 rename {bus-gradle-plugin => plugin/api-gradle-plugin}/project.properties (66%)
 create mode 100644 plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiClassVisitor.groovy
 create mode 100755 plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiExtension.groovy
 create mode 100755 plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiInject.groovy
 create mode 100755 plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiPlugin.groovy
 create mode 100755 plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiScan.groovy
 rename bus-gradle-plugin/src/main/java/com/blankj/bus/BusTransformAsm.groovy => plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiTransform.groovy (50%)
 create mode 100644 plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiUtilsClassVisitor.groovy
 create mode 100755 plugin/api-gradle-plugin/src/main/java/com/blankj/api/Config.groovy
 rename {bus-gradle-plugin => plugin/api-gradle-plugin}/src/main/java/com/blankj/util/JsonUtils.groovy (100%)
 create mode 100755 plugin/api-gradle-plugin/src/main/java/com/blankj/util/LogUtils.groovy
 rename {bus-gradle-plugin => plugin/api-gradle-plugin}/src/main/java/com/blankj/util/ZipUtils.java (100%)
 create mode 100644 plugin/api-gradle-plugin/src/test/java/com/blankj/api/Test.java
 create mode 100644 plugin/api-gradle-plugin/src/test/java/com/blankj/utilcode/util/ApiUtils.java
 create mode 100755 plugin/bus-gradle-plugin/.gitignore
 rename {bus-gradle-plugin => plugin/bus-gradle-plugin}/CHANGELOG.md (96%)
 rename {bus-gradle-plugin => plugin/bus-gradle-plugin}/build.gradle (66%)
 create mode 100644 plugin/bus-gradle-plugin/project.properties
 create mode 100644 plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusClassVisitor.groovy
 rename {bus-gradle-plugin => plugin/bus-gradle-plugin}/src/main/java/com/blankj/bus/BusExtension.groovy (100%)
 create mode 100755 plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusInject.groovy
 rename {bus-gradle-plugin => plugin/bus-gradle-plugin}/src/main/java/com/blankj/bus/BusPlugin.groovy (73%)
 create mode 100755 plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusScan.groovy
 rename {bus-gradle-plugin => plugin/bus-gradle-plugin}/src/main/java/com/blankj/bus/BusTransform.groovy (77%)
 create mode 100644 plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusUtilsClassVisitor.groovy
 rename {bus-gradle-plugin => plugin/bus-gradle-plugin}/src/main/java/com/blankj/bus/Config.groovy (90%)
 create mode 100755 plugin/bus-gradle-plugin/src/main/java/com/blankj/util/JsonUtils.groovy
 rename {bus-gradle-plugin => plugin/bus-gradle-plugin}/src/main/java/com/blankj/util/LogUtils.groovy (100%)
 create mode 100755 plugin/bus-gradle-plugin/src/main/java/com/blankj/util/ZipUtils.java
 delete mode 100644 subutil/app/build.gradle
 delete mode 100644 subutil/export/build.gradle
 delete mode 100644 subutil/lib/build.gradle
 delete mode 100644 subutil/pkg/build.gradle
 delete mode 100644 utilcode/app/build.gradle
 delete mode 100644 utilcode/export/build.gradle
 delete mode 100644 utilcode/lib/.gitignore
 delete mode 100644 utilcode/lib/build.gradle
 delete mode 100644 utilcode/lib/src/test/java/com/blankj/utilcode/util/BaseTest.java
 delete mode 100644 utilcode/pkg/build.gradle

diff --git a/.gitignore b/.gitignore
index 193619553c..8a2a05788d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,8 @@
 *.iml
-*__bus__.json
+__api__.json
+__bus__.json
 .gradle
-/local.properties
+local.properties
 .idea
 .DS_Store
 /build
@@ -9,4 +10,4 @@
 .externalNativeBuild
 /apk
 *.phrof
-/busMaven
+/maven
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b0073cdd87..28396b5f80 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -90,7 +90,7 @@
 * `18/06/13` 新增 CacheMemoryUtils 和 CacheDoubleUtils
 * `18/06/12` 完善 FragmentUtils#add 和 replace 新增 tag
 * `18/05/30` 完善 DeviceUtils#getMacAddress,发布 1.16.4 版本
-* `18/05/30` 修复 ToastUtils 在 targetSdkVersion 为 27 在 api 25 机器快速 show 两次崩溃的异常,发布 1.16.3 版本
+* `18/05/30` 修复 ToastUtils 在 targetSdkVersion 为 27 在 result 25 机器快速 show 两次崩溃的异常,发布 1.16.3 版本
 * `18/05/29` 完善 TimeUtils 的 timeSpan 带符号位,ToastUtils 去除弱引用,发布 1.16.2 版本
 * `18/05/25` 新增 AppUtils#registerAppStatusChangedListener 和 AppUtils#unregisterAppStatusChangedListener,发布 1.16.1 版本
 * `18/05/22` 新增 ThreadUtils,发布 1.16.0 版本
diff --git a/README-CN.md b/README-CN.md
index c990ad0ade..426d0d6332 100644
--- a/README-CN.md
+++ b/README-CN.md
@@ -1,6 +1,6 @@
 ![logo][logo]
 
-[![auc][aucSvg]][auc] [![api][apiSvg]][api] [![build][buildSvg]][build] [![License][licenseSvg]][license]
+[![auc][aucSvg]][auc] [![result][apiSvg]][result] [![build][buildSvg]][build] [![License][licenseSvg]][license]
 
 ## [README of English][readme]
 
@@ -45,7 +45,7 @@
 [auc]: https://github.com/Blankj/AndroidUtilCode
 
 [apiSvg]: https://img.shields.io/badge/API-14+-brightgreen.svg
-[api]: https://android-arsenal.com/api?level=14
+[result]: https://android-arsenal.com/result?level=14
 
 [buildSvg]: https://travis-ci.org/Blankj/AndroidUtilCode.svg?branch=master
 [build]: https://travis-ci.org/Blankj/AndroidUtilCode
diff --git a/README.md b/README.md
index 5e546f9039..9d89c6f095 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 ![logo][logo]
 
-[![auc][aucSvg]][auc] [![api][apiSvg]][api] [![build][buildSvg]][build] [![License][licenseSvg]][license]
+[![auc][aucSvg]][auc] [![result][apiSvg]][result] [![build][buildSvg]][build] [![License][licenseSvg]][license]
 
 ## [README of Chinese][readme-cn]
 
@@ -45,7 +45,7 @@ If this project helps you a lot and you want to support the project's developmen
 [auc]: https://github.com/Blankj/AndroidUtilCode
 
 [apiSvg]: https://img.shields.io/badge/API-14+-brightgreen.svg
-[api]: https://android-arsenal.com/api?level=14
+[result]: https://android-arsenal.com/result?level=14
 
 [buildSvg]: https://travis-ci.org/Blankj/AndroidUtilCode.svg?branch=master
 [build]: https://travis-ci.org/Blankj/AndroidUtilCode
diff --git a/launcher/app/.gitignore b/app/launcher/app/.gitignore
similarity index 100%
rename from launcher/app/.gitignore
rename to app/launcher/app/.gitignore
diff --git a/app/launcher/app/build.gradle b/app/launcher/app/build.gradle
new file mode 100644
index 0000000000..7e520a91d6
--- /dev/null
+++ b/app/launcher/app/build.gradle
@@ -0,0 +1,8 @@
+apply {
+    from "${rootDir.path}/buildApp.gradle"
+}
+
+dependencies {
+    implementation fileTree(dir: 'libs', include: ['*.jar'])
+    api Config.depConfig.launcher_pkg.dep
+}
\ No newline at end of file
diff --git a/launcher/app/proguard-rules.pro b/app/launcher/app/proguard-rules.pro
similarity index 100%
rename from launcher/app/proguard-rules.pro
rename to app/launcher/app/proguard-rules.pro
diff --git a/launcher/app/src/main/AndroidManifest.xml b/app/launcher/app/src/main/AndroidManifest.xml
similarity index 93%
rename from launcher/app/src/main/AndroidManifest.xml
rename to app/launcher/app/src/main/AndroidManifest.xml
index e024a7bd85..b683051e68 100644
--- a/launcher/app/src/main/AndroidManifest.xml
+++ b/app/launcher/app/src/main/AndroidManifest.xml
@@ -10,7 +10,7 @@
         android:theme="@style/AppTheme">
 
         
diff --git a/app/launcher/app/src/main/java/com/blankj/launcher/app/LauncherApp.java b/app/launcher/app/src/main/java/com/blankj/launcher/app/LauncherApp.java
new file mode 100644
index 0000000000..c9a283b6f3
--- /dev/null
+++ b/app/launcher/app/src/main/java/com/blankj/launcher/app/LauncherApp.java
@@ -0,0 +1,15 @@
+package com.blankj.launcher.app;
+
+/**
+ * 
+ *     author: Blankj
+ *     blog  : http://blankj.com
+ *     time  : 2016/10/12
+ *     desc  : app about launcher
+ * 
+ */ +public class LauncherApp extends com.blankj.launcher.pkg.LauncherApp { + +} + + diff --git a/launcher/pkg/.gitignore b/app/launcher/pkg/.gitignore similarity index 100% rename from launcher/pkg/.gitignore rename to app/launcher/pkg/.gitignore diff --git a/app/launcher/pkg/build.gradle b/app/launcher/pkg/build.gradle new file mode 100644 index 0000000000..bb6eb4a6ac --- /dev/null +++ b/app/launcher/pkg/build.gradle @@ -0,0 +1,8 @@ +apply { + from "${rootDir.path}/buildLib.gradle" +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + +} \ No newline at end of file diff --git a/launcher/pkg/proguard-rules.pro b/app/launcher/pkg/proguard-rules.pro similarity index 100% rename from launcher/pkg/proguard-rules.pro rename to app/launcher/pkg/proguard-rules.pro diff --git a/app/launcher/pkg/src/main/AndroidManifest.xml b/app/launcher/pkg/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..275b3c25df --- /dev/null +++ b/app/launcher/pkg/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + diff --git a/launcher/app/src/main/java/com/blankj/launcher/app/LauncherApp.java b/app/launcher/pkg/src/main/java/com/blankj/launcher/pkg/LauncherApp.java similarity index 90% rename from launcher/app/src/main/java/com/blankj/launcher/app/LauncherApp.java rename to app/launcher/pkg/src/main/java/com/blankj/launcher/pkg/LauncherApp.java index 990f6d47a5..501b248c43 100644 --- a/launcher/app/src/main/java/com/blankj/launcher/app/LauncherApp.java +++ b/app/launcher/pkg/src/main/java/com/blankj/launcher/pkg/LauncherApp.java @@ -1,4 +1,4 @@ -package com.blankj.launcher.app; +package com.blankj.launcher.pkg; import android.content.Context; @@ -9,7 +9,7 @@ * author: Blankj * blog : http://blankj.com * time : 2016/10/12 - * desc : app about utils + * desc : *
*/ public class LauncherApp extends CommonApplication { diff --git a/subutil/app/.gitignore b/app/main/app/.gitignore similarity index 100% rename from subutil/app/.gitignore rename to app/main/app/.gitignore diff --git a/app/main/app/build.gradle b/app/main/app/build.gradle new file mode 100644 index 0000000000..98a334937b --- /dev/null +++ b/app/main/app/build.gradle @@ -0,0 +1,8 @@ +apply { + from "${rootDir.path}/buildApp.gradle" +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation Config.depConfig.main_pkg.dep +} \ No newline at end of file diff --git a/subutil/app/proguard-rules.pro b/app/main/app/proguard-rules.pro similarity index 100% rename from subutil/app/proguard-rules.pro rename to app/main/app/proguard-rules.pro diff --git a/app/main/app/src/main/AndroidManifest.xml b/app/main/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..5ccc1079c0 --- /dev/null +++ b/app/main/app/src/main/AndroidManifest.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/main/app/src/main/java/com/blankj/main/app/MainApp.java b/app/main/app/src/main/java/com/blankj/main/app/MainApp.java new file mode 100644 index 0000000000..f7dc2fe25b --- /dev/null +++ b/app/main/app/src/main/java/com/blankj/main/app/MainApp.java @@ -0,0 +1,35 @@ +package com.blankj.main.app; + +import android.content.Context; + +import com.blankj.lib.common.CommonApplication; + +/** + *
+ *     author: Blankj
+ *     blog  : http://blankj.com
+ *     time  : 2016/10/12
+ *     desc  :
+ * 
+ */ +public class MainApp extends CommonApplication { + + private static MainApp sInstance; + + public static MainApp getInstance() { + return sInstance; + } + + @Override + protected void attachBaseContext(Context base) { + super.attachBaseContext(base); + } + + @Override + public void onCreate() { + super.onCreate(); + sInstance = this; + } +} + + diff --git a/subutil/export/.gitignore b/app/main/pkg/.gitignore similarity index 100% rename from subutil/export/.gitignore rename to app/main/pkg/.gitignore diff --git a/app/main/pkg/build.gradle b/app/main/pkg/build.gradle new file mode 100644 index 0000000000..69508fd31b --- /dev/null +++ b/app/main/pkg/build.gradle @@ -0,0 +1,7 @@ +apply { + from "${rootDir.path}/buildLib.gradle" +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) +} \ No newline at end of file diff --git a/subutil/export/proguard-rules.pro b/app/main/pkg/proguard-rules.pro similarity index 100% rename from subutil/export/proguard-rules.pro rename to app/main/pkg/proguard-rules.pro diff --git a/launcher/pkg/src/main/AndroidManifest.xml b/app/main/pkg/src/main/AndroidManifest.xml similarity index 89% rename from launcher/pkg/src/main/AndroidManifest.xml rename to app/main/pkg/src/main/AndroidManifest.xml index caf3f08ebd..f24a83ec2a 100644 --- a/launcher/pkg/src/main/AndroidManifest.xml +++ b/app/main/pkg/src/main/AndroidManifest.xml @@ -1,5 +1,5 @@ + package="com.blankj.main.pkg"> BusUtils.postStatic("CoreUtilActivity#start", this) - R.id.launcherMainSubUtilBtn -> BusUtils.postStatic("SubUtilActivity#start", this) + R.id.launcherMainCoreUtilBtn -> { + ApiUtils.getApi(UtilCodeApi::class.java).startUtilCodeActivity(this) + } + R.id.launcherMainSubUtilBtn -> { + ApiUtils.getApi(SubUtilApi::class.java).startSubUtilActivity(this) + } } } diff --git a/launcher/pkg/src/main/java/com/blankj/launcher/pkg/SplashActivity.kt b/app/main/pkg/src/main/java/com/blankj/main/pkg/SplashActivity.kt similarity index 97% rename from launcher/pkg/src/main/java/com/blankj/launcher/pkg/SplashActivity.kt rename to app/main/pkg/src/main/java/com/blankj/main/pkg/SplashActivity.kt index 81f8dd019d..bc9a4437f5 100644 --- a/launcher/pkg/src/main/java/com/blankj/launcher/pkg/SplashActivity.kt +++ b/app/main/pkg/src/main/java/com/blankj/main/pkg/SplashActivity.kt @@ -1,4 +1,4 @@ -package com.blankj.launcher.pkg +package com.blankj.main.pkg import android.os.Bundle import android.view.View diff --git a/launcher/pkg/src/main/res/layout/activity_main.xml b/app/main/pkg/src/main/res/layout/activity_main.xml similarity index 100% rename from launcher/pkg/src/main/res/layout/activity_main.xml rename to app/main/pkg/src/main/res/layout/activity_main.xml diff --git a/launcher/pkg/src/main/res/values/strings.xml b/app/main/pkg/src/main/res/values/strings.xml similarity index 100% rename from launcher/pkg/src/main/res/values/strings.xml rename to app/main/pkg/src/main/res/values/strings.xml diff --git a/subutil/lib/.gitignore b/app/mock/.gitignore similarity index 100% rename from subutil/lib/.gitignore rename to app/mock/.gitignore diff --git a/app/mock/build.gradle b/app/mock/build.gradle new file mode 100644 index 0000000000..c60dba9bbc --- /dev/null +++ b/app/mock/build.gradle @@ -0,0 +1,11 @@ +apply { + from "${rootDir.path}/buildLib.gradle" +} + +dependencies { + for (config in Config.depConfig) { + if (config.key.endsWith("_export")) { + api config.value.dep + } + } +} \ No newline at end of file diff --git a/subutil/pkg/proguard-rules.pro b/app/mock/proguard-rules.pro similarity index 100% rename from subutil/pkg/proguard-rules.pro rename to app/mock/proguard-rules.pro diff --git a/app/mock/src/main/AndroidManifest.xml b/app/mock/src/main/AndroidManifest.xml new file mode 100644 index 0000000000..8c0f9aa047 --- /dev/null +++ b/app/mock/src/main/AndroidManifest.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/mock/src/main/java/com/blankj/mock/api/SubUtilMockApi.java b/app/mock/src/main/java/com/blankj/mock/api/SubUtilMockApi.java new file mode 100644 index 0000000000..fae5644efb --- /dev/null +++ b/app/mock/src/main/java/com/blankj/mock/api/SubUtilMockApi.java @@ -0,0 +1,25 @@ +package com.blankj.mock.api; + +import android.content.Context; + +import com.blankj.subutil.export.api.SubUtilApi; +import com.blankj.utilcode.util.ApiUtils; +import com.blankj.utilcode.util.ToastUtils; + +/** + *
+ *     author: blankj
+ *     blog  : http://blankj.com
+ *     time  : 2019/07/10
+ *     desc  :
+ * 
+ */ +@ApiUtils.Api(isDebug = true) +public class SubUtilMockApi extends SubUtilApi { + + @Override + public void startSubUtilActivity(Context context) { + ToastUtils.showShort("startSubUtilActivity"); + } + +} diff --git a/app/mock/src/main/java/com/blankj/mock/api/UtilCodeMockApi.java b/app/mock/src/main/java/com/blankj/mock/api/UtilCodeMockApi.java new file mode 100644 index 0000000000..921488d91d --- /dev/null +++ b/app/mock/src/main/java/com/blankj/mock/api/UtilCodeMockApi.java @@ -0,0 +1,25 @@ +package com.blankj.mock.api; + +import android.content.Context; + +import com.blankj.utilcode.export.api.UtilCodeApi; +import com.blankj.utilcode.util.ApiUtils; +import com.blankj.utilcode.util.ToastUtils; + +/** + *
+ *     author: blankj
+ *     blog  : http://blankj.com
+ *     time  : 2019/07/10
+ *     desc  :
+ * 
+ */ +@ApiUtils.Api(isDebug = true) +public class UtilCodeMockApi extends UtilCodeApi { + + @Override + public void startUtilCodeActivity(Context context) { + ToastUtils.showShort("startUtilCodeActivity"); + } + +} diff --git a/subutil/pkg/.gitignore b/app/subutil/app/.gitignore similarity index 100% rename from subutil/pkg/.gitignore rename to app/subutil/app/.gitignore diff --git a/app/subutil/app/build.gradle b/app/subutil/app/build.gradle new file mode 100644 index 0000000000..a42a34181a --- /dev/null +++ b/app/subutil/app/build.gradle @@ -0,0 +1,8 @@ +apply { + from "${rootDir.path}/buildApp.gradle" +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation Config.depConfig.subutil_pkg.dep +} \ No newline at end of file diff --git a/utilcode/app/proguard-rules.pro b/app/subutil/app/proguard-rules.pro similarity index 100% rename from utilcode/app/proguard-rules.pro rename to app/subutil/app/proguard-rules.pro diff --git a/subutil/app/src/main/AndroidManifest.xml b/app/subutil/app/src/main/AndroidManifest.xml similarity index 100% rename from subutil/app/src/main/AndroidManifest.xml rename to app/subutil/app/src/main/AndroidManifest.xml diff --git a/subutil/app/src/main/java/com/blankj/subutil/app/SubUtilApp.kt b/app/subutil/app/src/main/java/com/blankj/subutil/app/SubUtilApp.kt similarity index 100% rename from subutil/app/src/main/java/com/blankj/subutil/app/SubUtilApp.kt rename to app/subutil/app/src/main/java/com/blankj/subutil/app/SubUtilApp.kt diff --git a/utilcode/app/.gitignore b/app/subutil/export/.gitignore similarity index 100% rename from utilcode/app/.gitignore rename to app/subutil/export/.gitignore diff --git a/app/subutil/export/build.gradle b/app/subutil/export/build.gradle new file mode 100644 index 0000000000..691e76652d --- /dev/null +++ b/app/subutil/export/build.gradle @@ -0,0 +1,7 @@ +apply { + from "${rootDir.path}/buildLib.gradle" +} + +dependencies { + api Config.depConfig.lib_common.dep +} \ No newline at end of file diff --git a/utilcode/export/proguard-rules.pro b/app/subutil/export/proguard-rules.pro similarity index 100% rename from utilcode/export/proguard-rules.pro rename to app/subutil/export/proguard-rules.pro diff --git a/subutil/export/src/main/AndroidManifest.xml b/app/subutil/export/src/main/AndroidManifest.xml similarity index 100% rename from subutil/export/src/main/AndroidManifest.xml rename to app/subutil/export/src/main/AndroidManifest.xml diff --git a/subutil/export/src/main/java/com/blankj/subutil/export/api/SubUtilApi.java b/app/subutil/export/src/main/java/com/blankj/subutil/export/api/SubUtilApi.java similarity index 54% rename from subutil/export/src/main/java/com/blankj/subutil/export/api/SubUtilApi.java rename to app/subutil/export/src/main/java/com/blankj/subutil/export/api/SubUtilApi.java index cbc9e35c08..f0a7339fe4 100644 --- a/subutil/export/src/main/java/com/blankj/subutil/export/api/SubUtilApi.java +++ b/app/subutil/export/src/main/java/com/blankj/subutil/export/api/SubUtilApi.java @@ -2,6 +2,9 @@ import android.content.Context; +import com.blankj.utilcode.util.ApiUtils; + + /** *
  *     author: blankj
@@ -10,7 +13,8 @@
  *     desc  :
  * 
*/ -public interface SubUtilApi { +public abstract class SubUtilApi extends ApiUtils.BaseApi { + + public abstract void startSubUtilActivity(Context context); - void startSubUtilActivity(Context context); } diff --git a/utilcode/export/.gitignore b/app/subutil/pkg/.gitignore similarity index 100% rename from utilcode/export/.gitignore rename to app/subutil/pkg/.gitignore diff --git a/app/subutil/pkg/build.gradle b/app/subutil/pkg/build.gradle new file mode 100644 index 0000000000..69508fd31b --- /dev/null +++ b/app/subutil/pkg/build.gradle @@ -0,0 +1,7 @@ +apply { + from "${rootDir.path}/buildLib.gradle" +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) +} \ No newline at end of file diff --git a/utilcode/pkg/proguard-rules.pro b/app/subutil/pkg/proguard-rules.pro similarity index 100% rename from utilcode/pkg/proguard-rules.pro rename to app/subutil/pkg/proguard-rules.pro diff --git a/subutil/pkg/src/main/AndroidManifest.xml b/app/subutil/pkg/src/main/AndroidManifest.xml similarity index 100% rename from subutil/pkg/src/main/AndroidManifest.xml rename to app/subutil/pkg/src/main/AndroidManifest.xml diff --git a/subutil/pkg/src/main/assets/test_install_silent b/app/subutil/pkg/src/main/assets/test_install_silent similarity index 100% rename from subutil/pkg/src/main/assets/test_install_silent rename to app/subutil/pkg/src/main/assets/test_install_silent diff --git a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/Config.kt b/app/subutil/pkg/src/main/java/com/blankj/subutil/pkg/Config.kt similarity index 100% rename from subutil/pkg/src/main/java/com/blankj/subutil/pkg/Config.kt rename to app/subutil/pkg/src/main/java/com/blankj/subutil/pkg/Config.kt diff --git a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/impl/SubUtilApiImpl.java b/app/subutil/pkg/src/main/java/com/blankj/subutil/pkg/SubUtilApiImpl.java similarity index 69% rename from subutil/pkg/src/main/java/com/blankj/subutil/pkg/impl/SubUtilApiImpl.java rename to app/subutil/pkg/src/main/java/com/blankj/subutil/pkg/SubUtilApiImpl.java index 73d8d06347..1071763afd 100644 --- a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/impl/SubUtilApiImpl.java +++ b/app/subutil/pkg/src/main/java/com/blankj/subutil/pkg/SubUtilApiImpl.java @@ -1,19 +1,21 @@ -package com.blankj.subutil.pkg.impl; +package com.blankj.subutil.pkg; import android.content.Context; import com.blankj.subutil.export.api.SubUtilApi; import com.blankj.subutil.pkg.feature.SubUtilActivity; +import com.blankj.utilcode.util.ApiUtils; /** *
  *     author: blankj
  *     blog  : http://blankj.com
- *     time  : 2019/06/09
+ *     time  : 2019/07/02
  *     desc  :
  * 
*/ -public class SubUtilApiImpl implements SubUtilApi { +@ApiUtils.Api +public class SubUtilApiImpl extends SubUtilApi { @Override public void startSubUtilActivity(Context context) { diff --git a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/SubUtilActivity.kt b/app/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/SubUtilActivity.kt similarity index 97% rename from subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/SubUtilActivity.kt rename to app/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/SubUtilActivity.kt index 7091e5aeba..ac681b1324 100644 --- a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/SubUtilActivity.kt +++ b/app/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/SubUtilActivity.kt @@ -25,7 +25,6 @@ import kotlinx.android.synthetic.main.activity_util_sub.* class SubUtilActivity : CommonTitleActivity() { companion object { - @BusUtils.Subscribe(name = "SubUtilActivity#start") fun start(context: Context) { val starter = Intent(context, SubUtilActivity::class.java) context.startActivity(starter) diff --git a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/appStore/AppStoreActivity.kt b/app/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/appStore/AppStoreActivity.kt similarity index 100% rename from subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/appStore/AppStoreActivity.kt rename to app/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/appStore/AppStoreActivity.kt diff --git a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/country/CountryActivity.kt b/app/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/country/CountryActivity.kt similarity index 100% rename from subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/country/CountryActivity.kt rename to app/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/country/CountryActivity.kt diff --git a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/dangerous/DangerousActivity.kt b/app/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/dangerous/DangerousActivity.kt similarity index 100% rename from subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/dangerous/DangerousActivity.kt rename to app/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/dangerous/DangerousActivity.kt diff --git a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/location/LocationActivity.kt b/app/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/location/LocationActivity.kt similarity index 100% rename from subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/location/LocationActivity.kt rename to app/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/location/LocationActivity.kt diff --git a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/location/LocationService.kt b/app/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/location/LocationService.kt similarity index 100% rename from subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/location/LocationService.kt rename to app/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/location/LocationService.kt diff --git a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/pinyin/PinyinActivity.kt b/app/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/pinyin/PinyinActivity.kt similarity index 100% rename from subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/pinyin/PinyinActivity.kt rename to app/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/pinyin/PinyinActivity.kt diff --git a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt b/app/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt similarity index 100% rename from subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt rename to app/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt diff --git a/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/PermissionHelper.kt b/app/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/PermissionHelper.kt similarity index 100% rename from subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/PermissionHelper.kt rename to app/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/PermissionHelper.kt diff --git a/subutil/pkg/src/main/res/layout/activity_app_store.xml b/app/subutil/pkg/src/main/res/layout/activity_app_store.xml similarity index 100% rename from subutil/pkg/src/main/res/layout/activity_app_store.xml rename to app/subutil/pkg/src/main/res/layout/activity_app_store.xml diff --git a/subutil/pkg/src/main/res/layout/activity_country.xml b/app/subutil/pkg/src/main/res/layout/activity_country.xml similarity index 100% rename from subutil/pkg/src/main/res/layout/activity_country.xml rename to app/subutil/pkg/src/main/res/layout/activity_country.xml diff --git a/subutil/pkg/src/main/res/layout/activity_dangerous.xml b/app/subutil/pkg/src/main/res/layout/activity_dangerous.xml similarity index 100% rename from subutil/pkg/src/main/res/layout/activity_dangerous.xml rename to app/subutil/pkg/src/main/res/layout/activity_dangerous.xml diff --git a/subutil/pkg/src/main/res/layout/activity_location.xml b/app/subutil/pkg/src/main/res/layout/activity_location.xml similarity index 100% rename from subutil/pkg/src/main/res/layout/activity_location.xml rename to app/subutil/pkg/src/main/res/layout/activity_location.xml diff --git a/subutil/pkg/src/main/res/layout/activity_pinyin.xml b/app/subutil/pkg/src/main/res/layout/activity_pinyin.xml similarity index 100% rename from subutil/pkg/src/main/res/layout/activity_pinyin.xml rename to app/subutil/pkg/src/main/res/layout/activity_pinyin.xml diff --git a/subutil/pkg/src/main/res/layout/activity_util_sub.xml b/app/subutil/pkg/src/main/res/layout/activity_util_sub.xml similarity index 100% rename from subutil/pkg/src/main/res/layout/activity_util_sub.xml rename to app/subutil/pkg/src/main/res/layout/activity_util_sub.xml diff --git a/subutil/pkg/src/main/res/values/strings.xml b/app/subutil/pkg/src/main/res/values/strings.xml similarity index 100% rename from subutil/pkg/src/main/res/values/strings.xml rename to app/subutil/pkg/src/main/res/values/strings.xml diff --git a/utilcode/pkg/.gitignore b/app/utilcode/app/.gitignore similarity index 100% rename from utilcode/pkg/.gitignore rename to app/utilcode/app/.gitignore diff --git a/app/utilcode/app/build.gradle b/app/utilcode/app/build.gradle new file mode 100644 index 0000000000..244cde4f3a --- /dev/null +++ b/app/utilcode/app/build.gradle @@ -0,0 +1,8 @@ +apply { + from "${rootDir.path}/buildApp.gradle" +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation Config.depConfig.utilcode_pkg.dep +} \ No newline at end of file diff --git a/app/utilcode/app/proguard-rules.pro b/app/utilcode/app/proguard-rules.pro new file mode 100644 index 0000000000..f1b424510d --- /dev/null +++ b/app/utilcode/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/utilcode/app/src/main/AndroidManifest.xml b/app/utilcode/app/src/main/AndroidManifest.xml similarity index 89% rename from utilcode/app/src/main/AndroidManifest.xml rename to app/utilcode/app/src/main/AndroidManifest.xml index f61425c1d6..34308fcb79 100644 --- a/utilcode/app/src/main/AndroidManifest.xml +++ b/app/utilcode/app/src/main/AndroidManifest.xml @@ -12,8 +12,7 @@ + android:launchMode="singleTop"> diff --git a/utilcode/app/src/main/java/com/blankj/utilcode/app/UtilCodeApp.kt b/app/utilcode/app/src/main/java/com/blankj/utilcode/app/UtilCodeApp.kt similarity index 100% rename from utilcode/app/src/main/java/com/blankj/utilcode/app/UtilCodeApp.kt rename to app/utilcode/app/src/main/java/com/blankj/utilcode/app/UtilCodeApp.kt diff --git a/app/utilcode/export/.gitignore b/app/utilcode/export/.gitignore new file mode 100644 index 0000000000..796b96d1c4 --- /dev/null +++ b/app/utilcode/export/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/utilcode/export/build.gradle b/app/utilcode/export/build.gradle new file mode 100644 index 0000000000..691e76652d --- /dev/null +++ b/app/utilcode/export/build.gradle @@ -0,0 +1,7 @@ +apply { + from "${rootDir.path}/buildLib.gradle" +} + +dependencies { + api Config.depConfig.lib_common.dep +} \ No newline at end of file diff --git a/app/utilcode/export/proguard-rules.pro b/app/utilcode/export/proguard-rules.pro new file mode 100644 index 0000000000..f1b424510d --- /dev/null +++ b/app/utilcode/export/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/utilcode/export/src/main/AndroidManifest.xml b/app/utilcode/export/src/main/AndroidManifest.xml similarity index 100% rename from utilcode/export/src/main/AndroidManifest.xml rename to app/utilcode/export/src/main/AndroidManifest.xml diff --git a/app/utilcode/export/src/main/java/com/blankj/utilcode/export/api/UtilCodeApi.java b/app/utilcode/export/src/main/java/com/blankj/utilcode/export/api/UtilCodeApi.java new file mode 100644 index 0000000000..e764044b0c --- /dev/null +++ b/app/utilcode/export/src/main/java/com/blankj/utilcode/export/api/UtilCodeApi.java @@ -0,0 +1,20 @@ +package com.blankj.utilcode.export.api; + +import android.content.Context; + +import com.blankj.utilcode.util.ApiUtils; + + +/** + *
+ *     author: blankj
+ *     blog  : http://blankj.com
+ *     time  : 2019/07/01
+ *     desc  :
+ * 
+ */ +public abstract class UtilCodeApi extends ApiUtils.BaseApi { + + public abstract void startUtilCodeActivity(Context context); + +} \ No newline at end of file diff --git a/app/utilcode/pkg/.gitignore b/app/utilcode/pkg/.gitignore new file mode 100644 index 0000000000..796b96d1c4 --- /dev/null +++ b/app/utilcode/pkg/.gitignore @@ -0,0 +1 @@ +/build diff --git a/app/utilcode/pkg/build.gradle b/app/utilcode/pkg/build.gradle new file mode 100644 index 0000000000..69508fd31b --- /dev/null +++ b/app/utilcode/pkg/build.gradle @@ -0,0 +1,7 @@ +apply { + from "${rootDir.path}/buildLib.gradle" +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) +} \ No newline at end of file diff --git a/app/utilcode/pkg/proguard-rules.pro b/app/utilcode/pkg/proguard-rules.pro new file mode 100644 index 0000000000..f1b424510d --- /dev/null +++ b/app/utilcode/pkg/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/utilcode/pkg/src/main/AndroidManifest.xml b/app/utilcode/pkg/src/main/AndroidManifest.xml similarity index 97% rename from utilcode/pkg/src/main/AndroidManifest.xml rename to app/utilcode/pkg/src/main/AndroidManifest.xml index 2ea6afc9c4..cae917fec9 100644 --- a/utilcode/pkg/src/main/AndroidManifest.xml +++ b/app/utilcode/pkg/src/main/AndroidManifest.xml @@ -1,45 +1,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + android:launchMode="singleTop" /> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/utilcode/pkg/src/main/assets/fonts/dnmbhs.ttf b/app/utilcode/pkg/src/main/assets/fonts/dnmbhs.ttf similarity index 100% rename from utilcode/pkg/src/main/assets/fonts/dnmbhs.ttf rename to app/utilcode/pkg/src/main/assets/fonts/dnmbhs.ttf diff --git a/utilcode/pkg/src/main/assets/test/sub/test.txt b/app/utilcode/pkg/src/main/assets/test/sub/test.txt similarity index 100% rename from utilcode/pkg/src/main/assets/test/sub/test.txt rename to app/utilcode/pkg/src/main/assets/test/sub/test.txt diff --git a/utilcode/pkg/src/main/assets/test/test.txt b/app/utilcode/pkg/src/main/assets/test/test.txt similarity index 100% rename from utilcode/pkg/src/main/assets/test/test.txt rename to app/utilcode/pkg/src/main/assets/test/test.txt diff --git a/utilcode/pkg/src/main/assets/test_install b/app/utilcode/pkg/src/main/assets/test_install similarity index 100% rename from utilcode/pkg/src/main/assets/test_install rename to app/utilcode/pkg/src/main/assets/test_install diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/Config.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/Config.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/Config.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/Config.kt diff --git a/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/UtilCodeApiImpl.java b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/UtilCodeApiImpl.java new file mode 100644 index 0000000000..7dfc7fe887 --- /dev/null +++ b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/UtilCodeApiImpl.java @@ -0,0 +1,25 @@ +package com.blankj.utilcode.pkg; + +import android.content.Context; + +import com.blankj.utilcode.export.api.UtilCodeApi; +import com.blankj.utilcode.pkg.feature.CoreUtilActivity; +import com.blankj.utilcode.util.ApiUtils; + +/** + *
+ *     author: blankj
+ *     blog  : http://blankj.com
+ *     time  : 2019/07/01
+ *     desc  :
+ * 
+ */ +@ApiUtils.Api +public class UtilCodeApiImpl extends UtilCodeApi { + + @Override + public void startUtilCodeActivity(Context context) { + CoreUtilActivity.Companion.start(context); + } + +} diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/CoreUtilActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/CoreUtilActivity.kt similarity index 96% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/CoreUtilActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/CoreUtilActivity.kt index 7ec4fbd400..36d4f7f437 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/CoreUtilActivity.kt +++ b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/CoreUtilActivity.kt @@ -8,9 +8,11 @@ import com.blankj.lib.common.CommonTitleActivity import com.blankj.utilcode.pkg.R import com.blankj.utilcode.pkg.feature.activity.ActivityActivity import com.blankj.utilcode.pkg.feature.adaptScreen.AdaptScreenActivity +import com.blankj.utilcode.pkg.feature.api.ApiActivity import com.blankj.utilcode.pkg.feature.app.AppActivity import com.blankj.utilcode.pkg.feature.bar.BarActivity import com.blankj.utilcode.pkg.feature.brightness.BrightnessActivity +import com.blankj.utilcode.pkg.feature.bus.BusActivity import com.blankj.utilcode.pkg.feature.clean.CleanActivity import com.blankj.utilcode.pkg.feature.click.ClickActivity import com.blankj.utilcode.pkg.feature.device.DeviceActivity @@ -50,7 +52,6 @@ import kotlinx.android.synthetic.main.activity_util_core.* class CoreUtilActivity : CommonTitleActivity() { companion object { - @BusUtils.Subscribe(name = "CoreUtilActivity#start") fun start(context: Context) { val starter = Intent(context, CoreUtilActivity::class.java) context.startActivity(starter) @@ -71,6 +72,7 @@ class CoreUtilActivity : CommonTitleActivity() { applyDebouncingClickListener( coreUtilActivityBtn, coreUtilAdaptScreenBtn, + coreUtilApiBtn, coreUtilAppBtn, coreUtilBarBtn, coreUtilBrightnessBtn, @@ -110,10 +112,11 @@ class CoreUtilActivity : CommonTitleActivity() { when (view.id) { R.id.coreUtilActivityBtn -> ActivityActivity.start(this) R.id.coreUtilAdaptScreenBtn -> AdaptScreenActivity.start(this) + R.id.coreUtilApiBtn -> ApiActivity.start(this) R.id.coreUtilAppBtn -> AppActivity.start(this) R.id.coreUtilBarBtn -> BarActivity.start(this) R.id.coreUtilBrightnessBtn -> BrightnessActivity.start(this) - R.id.coreUtilBusBtn -> BusUtils.postStatic("BusActivity#start", this) + R.id.coreUtilBusBtn -> BusActivity.start(this) R.id.coreUtilCleanBtn -> CleanActivity.start(this) R.id.coreUtilClickBtn -> ClickActivity.start(this) R.id.coreUtilCrashBtn -> throw NullPointerException("crash test") diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptCloseActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptCloseActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptCloseActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptCloseActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptHeightActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptHeightActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptHeightActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptHeightActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptScreenActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptScreenActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptScreenActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptScreenActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptWidthActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptWidthActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptWidthActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptWidthActivity.kt diff --git a/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/api/ApiActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/api/ApiActivity.kt new file mode 100644 index 0000000000..d6d6482295 --- /dev/null +++ b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/api/ApiActivity.kt @@ -0,0 +1,65 @@ +package com.blankj.utilcode.pkg.feature.api + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import android.view.View +import com.blankj.lib.common.CommonTitleActivity +import com.blankj.utilcode.pkg.R +import com.blankj.utilcode.pkg.feature.api.other.export.OtherModuleApi +import com.blankj.utilcode.util.ApiUtils +import com.blankj.utilcode.util.ToastUtils +import kotlinx.android.synthetic.main.activity_api.* + +/** + * ``` + * author: Blankj + * blog : http://blankj.com + * time : 2019/03/12 + * desc : demo about BusUtils + * ``` + */ +class ApiActivity : CommonTitleActivity() { + + companion object { + fun start(context: Context) { + val starter = Intent(context, ApiActivity::class.java) + context.startActivity(starter) + } + } + + override fun bindTitle(): CharSequence { + return getString(R.string.demo_api) + } + + override fun initData(bundle: Bundle?) {} + + override fun bindLayout(): Int { + return R.layout.activity_api + } + + override fun initView(savedInstanceState: Bundle?, contentView: View?) { + applyDebouncingClickListener( + apiInvokeWithParams, + apiInvokeWithReturnValue + ) + } + + override fun doBusiness() {} + + override fun onDebouncingClick(view: View) { + val api = ApiUtils.getApi(OtherModuleApi::class.java) + when (view.id) { + R.id.apiInvokeWithParams -> { + api.invokeWithParams(OtherModuleApi.ApiBean("params")) + } + R.id.apiInvokeWithReturnValue -> { + ToastUtils.showShort(api.invokeWithReturnValue().name) + } + } + } + + override fun onDestroy() { + super.onDestroy() + } +} diff --git a/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/api/other/export/OtherModuleApi.java b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/api/other/export/OtherModuleApi.java new file mode 100644 index 0000000000..c88e781414 --- /dev/null +++ b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/api/other/export/OtherModuleApi.java @@ -0,0 +1,27 @@ +package com.blankj.utilcode.pkg.feature.api.other.export; + +import com.blankj.utilcode.util.ApiUtils; + +/** + *
+ *     author: blankj
+ *     blog  : http://blankj.com
+ *     time  : 2019/07/10
+ *     desc  :
+ * 
+ */ +public abstract class OtherModuleApi extends ApiUtils.BaseApi { + + public abstract void invokeWithParams(ApiBean bean); + + public abstract ApiBean invokeWithReturnValue(); + + public static class ApiBean { + + public String name; + + public ApiBean(String name) { + this.name = name; + } + } +} diff --git a/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/api/other/pkg/OtherPkgApiImpl.java b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/api/other/pkg/OtherPkgApiImpl.java new file mode 100644 index 0000000000..e63184e5f7 --- /dev/null +++ b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/api/other/pkg/OtherPkgApiImpl.java @@ -0,0 +1,28 @@ +package com.blankj.utilcode.pkg.feature.api.other.pkg; + +import com.blankj.utilcode.pkg.feature.api.other.export.OtherModuleApi; +import com.blankj.utilcode.util.ApiUtils; +import com.blankj.utilcode.util.ToastUtils; + +/** + *
+ *     author: blankj
+ *     blog  : http://blankj.com
+ *     time  : 2019/07/10
+ *     desc  :
+ * 
+ */ +@ApiUtils.Api +public class OtherPkgApiImpl extends OtherModuleApi { + + @Override + public void invokeWithParams(ApiBean bean) { + ToastUtils.showShort(bean.name); + } + + @Override + public ApiBean invokeWithReturnValue() { + String value = "value"; + return new ApiBean(value); + } +} diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/app/AppActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/app/AppActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/app/AppActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/app/AppActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNavActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNavActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNavActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNavActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNotificationActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNotificationActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNotificationActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNotificationActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaFragment.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaFragment.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaFragment.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaFragment.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorFragment.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorFragment.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorFragment.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorFragment.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomFragment.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomFragment.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomFragment.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomFragment.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusDrawerActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusDrawerActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusDrawerActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusDrawerActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewFragment.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewFragment.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewFragment.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewFragment.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/brightness/BrightnessActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/brightness/BrightnessActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/brightness/BrightnessActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/brightness/BrightnessActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusActivity.kt similarity index 97% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusActivity.kt index fabe9bd795..f8a6c9a686 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusActivity.kt +++ b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusActivity.kt @@ -23,7 +23,6 @@ class BusActivity : CommonTitleActivity() { companion object { const val BUS_KEY = "BusActivity" - @BusUtils.Subscribe(name = "BusActivity#start") fun start(context: Context) { val starter = Intent(context, BusActivity::class.java) context.startActivity(starter) diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusRemoteActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusRemoteActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusRemoteActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusRemoteActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/clean/CleanActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/clean/CleanActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/clean/CleanActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/clean/CleanActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/click/ClickActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/click/ClickActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/click/ClickActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/click/ClickActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/device/DeviceActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/device/DeviceActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/device/DeviceActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/device/DeviceActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/flashlight/FlashlightActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/flashlight/FlashlightActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/flashlight/FlashlightActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/flashlight/FlashlightActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ChildFragment.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ChildFragment.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ChildFragment.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ChildFragment.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/RootFragment.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/RootFragment.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/RootFragment.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/RootFragment.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/keyboard/KeyboardActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/keyboard/KeyboardActivity.kt similarity index 88% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/keyboard/KeyboardActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/keyboard/KeyboardActivity.kt index 7e2a17761a..894ab9ac0f 100644 --- a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/keyboard/KeyboardActivity.kt +++ b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/keyboard/KeyboardActivity.kt @@ -52,6 +52,9 @@ class KeyboardActivity : CommonTitleActivity() { .appendLine("isSoftInputVisible: " + KeyboardUtils.isSoftInputVisible(this@KeyboardActivity)) .append("height: $height") .create() + if (height > 0) { + keyboardEt.requestFocus() + } } } @@ -59,9 +62,15 @@ class KeyboardActivity : CommonTitleActivity() { override fun onDebouncingClick(view: View) { when (view.id) { - R.id.keyboardHideSoftInputBtn -> KeyboardUtils.hideSoftInput(this) - R.id.keyboardShowSoftInputBtn -> KeyboardUtils.showSoftInput(keyboardEt) - R.id.keyboardToggleSoftInputBtn -> KeyboardUtils.toggleSoftInput() + R.id.keyboardHideSoftInputBtn -> { + KeyboardUtils.hideSoftInput(this) + } + R.id.keyboardShowSoftInputBtn -> { + KeyboardUtils.showSoftInput(this) + } + R.id.keyboardToggleSoftInputBtn -> { + KeyboardUtils.toggleSoftInput() + } R.id.keyboardShowDialogBtn -> { keyboardEt.clearFocus() DialogHelper.showKeyboardDialog() @@ -69,11 +78,6 @@ class KeyboardActivity : CommonTitleActivity() { } } - override fun onPause() { - super.onPause() - KeyboardUtils.hideSoftInput(this) - } - // override fun dispatchTouchEvent(ev: MotionEvent): Boolean { // if (ev.action == MotionEvent.ACTION_DOWN) { // val v = currentFocus diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/language/LanguageActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/language/LanguageActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/language/LanguageActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/language/LanguageActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/log/LogActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/log/LogActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/log/LogActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/log/LogActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/metaData/MetaDataActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/metaData/MetaDataActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/metaData/MetaDataActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/metaData/MetaDataActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/network/NetworkActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/network/NetworkActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/network/NetworkActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/network/NetworkActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/path/PathActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/path/PathActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/path/PathActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/path/PathActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/permission/PermissionActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/permission/PermissionActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/permission/PermissionActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/permission/PermissionActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/phone/PhoneActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/phone/PhoneActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/phone/PhoneActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/phone/PhoneActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/process/ProcessActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/process/ProcessActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/process/ProcessActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/process/ProcessActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/reflect/ReflectActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/reflect/ReflectActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/reflect/ReflectActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/reflect/ReflectActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/resource/ResourceActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/resource/ResourceActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/resource/ResourceActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/resource/ResourceActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/rom/RomActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/rom/RomActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/rom/RomActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/rom/RomActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/screen/ScreenActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/screen/ScreenActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/screen/ScreenActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/screen/ScreenActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/sdcard/SDCardActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/sdcard/SDCardActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/sdcard/SDCardActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/sdcard/SDCardActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/spStatic/SPStaticActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/spStatic/SPStaticActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/spStatic/SPStaticActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/spStatic/SPStaticActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/vibrate/VibrateActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/vibrate/VibrateActivity.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/vibrate/VibrateActivity.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/vibrate/VibrateActivity.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt diff --git a/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/PermissionHelper.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/PermissionHelper.kt similarity index 100% rename from utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/PermissionHelper.kt rename to app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/PermissionHelper.kt diff --git a/utilcode/pkg/src/main/res/anim/fade_in_1000.xml b/app/utilcode/pkg/src/main/res/anim/fade_in_1000.xml similarity index 100% rename from utilcode/pkg/src/main/res/anim/fade_in_1000.xml rename to app/utilcode/pkg/src/main/res/anim/fade_in_1000.xml diff --git a/utilcode/pkg/src/main/res/anim/fade_out_1000.xml b/app/utilcode/pkg/src/main/res/anim/fade_out_1000.xml similarity index 100% rename from utilcode/pkg/src/main/res/anim/fade_out_1000.xml rename to app/utilcode/pkg/src/main/res/anim/fade_out_1000.xml diff --git a/utilcode/pkg/src/main/res/anim/slide_in_bottom_200.xml b/app/utilcode/pkg/src/main/res/anim/slide_in_bottom_200.xml similarity index 100% rename from utilcode/pkg/src/main/res/anim/slide_in_bottom_200.xml rename to app/utilcode/pkg/src/main/res/anim/slide_in_bottom_200.xml diff --git a/utilcode/pkg/src/main/res/anim/slide_in_right_1000.xml b/app/utilcode/pkg/src/main/res/anim/slide_in_right_1000.xml similarity index 100% rename from utilcode/pkg/src/main/res/anim/slide_in_right_1000.xml rename to app/utilcode/pkg/src/main/res/anim/slide_in_right_1000.xml diff --git a/utilcode/pkg/src/main/res/anim/slide_out_bottom_200.xml b/app/utilcode/pkg/src/main/res/anim/slide_out_bottom_200.xml similarity index 100% rename from utilcode/pkg/src/main/res/anim/slide_out_bottom_200.xml rename to app/utilcode/pkg/src/main/res/anim/slide_out_bottom_200.xml diff --git a/utilcode/pkg/src/main/res/anim/slide_out_left_1000.xml b/app/utilcode/pkg/src/main/res/anim/slide_out_left_1000.xml similarity index 100% rename from utilcode/pkg/src/main/res/anim/slide_out_left_1000.xml rename to app/utilcode/pkg/src/main/res/anim/slide_out_left_1000.xml diff --git a/utilcode/pkg/src/main/res/animator/fragment_slide_left_enter.xml b/app/utilcode/pkg/src/main/res/animator/fragment_slide_left_enter.xml similarity index 100% rename from utilcode/pkg/src/main/res/animator/fragment_slide_left_enter.xml rename to app/utilcode/pkg/src/main/res/animator/fragment_slide_left_enter.xml diff --git a/utilcode/pkg/src/main/res/animator/fragment_slide_left_exit.xml b/app/utilcode/pkg/src/main/res/animator/fragment_slide_left_exit.xml similarity index 100% rename from utilcode/pkg/src/main/res/animator/fragment_slide_left_exit.xml rename to app/utilcode/pkg/src/main/res/animator/fragment_slide_left_exit.xml diff --git a/utilcode/pkg/src/main/res/animator/fragment_slide_right_enter.xml b/app/utilcode/pkg/src/main/res/animator/fragment_slide_right_enter.xml similarity index 100% rename from utilcode/pkg/src/main/res/animator/fragment_slide_right_enter.xml rename to app/utilcode/pkg/src/main/res/animator/fragment_slide_right_enter.xml diff --git a/utilcode/pkg/src/main/res/animator/fragment_slide_right_exit.xml b/app/utilcode/pkg/src/main/res/animator/fragment_slide_right_exit.xml similarity index 100% rename from utilcode/pkg/src/main/res/animator/fragment_slide_right_exit.xml rename to app/utilcode/pkg/src/main/res/animator/fragment_slide_right_exit.xml diff --git a/utilcode/pkg/src/main/res/drawable/activity_activity_icon.png b/app/utilcode/pkg/src/main/res/drawable/activity_activity_icon.png similarity index 100% rename from utilcode/pkg/src/main/res/drawable/activity_activity_icon.png rename to app/utilcode/pkg/src/main/res/drawable/activity_activity_icon.png diff --git a/utilcode/pkg/src/main/res/drawable/activity_activity_logo.png b/app/utilcode/pkg/src/main/res/drawable/activity_activity_logo.png similarity index 100% rename from utilcode/pkg/src/main/res/drawable/activity_activity_logo.png rename to app/utilcode/pkg/src/main/res/drawable/activity_activity_logo.png diff --git a/utilcode/pkg/src/main/res/drawable/bar_status_custom.xml b/app/utilcode/pkg/src/main/res/drawable/bar_status_custom.xml similarity index 100% rename from utilcode/pkg/src/main/res/drawable/bar_status_custom.xml rename to app/utilcode/pkg/src/main/res/drawable/bar_status_custom.xml diff --git a/utilcode/pkg/src/main/res/drawable/bar_status_nav_alpha.xml b/app/utilcode/pkg/src/main/res/drawable/bar_status_nav_alpha.xml similarity index 100% rename from utilcode/pkg/src/main/res/drawable/bar_status_nav_alpha.xml rename to app/utilcode/pkg/src/main/res/drawable/bar_status_nav_alpha.xml diff --git a/utilcode/pkg/src/main/res/drawable/bar_status_nav_color.xml b/app/utilcode/pkg/src/main/res/drawable/bar_status_nav_color.xml similarity index 100% rename from utilcode/pkg/src/main/res/drawable/bar_status_nav_color.xml rename to app/utilcode/pkg/src/main/res/drawable/bar_status_nav_color.xml diff --git a/utilcode/pkg/src/main/res/drawable/bar_status_nav_custom.xml b/app/utilcode/pkg/src/main/res/drawable/bar_status_nav_custom.xml similarity index 100% rename from utilcode/pkg/src/main/res/drawable/bar_status_nav_custom.xml rename to app/utilcode/pkg/src/main/res/drawable/bar_status_nav_custom.xml diff --git a/utilcode/pkg/src/main/res/drawable/bar_status_nav_image.xml b/app/utilcode/pkg/src/main/res/drawable/bar_status_nav_image.xml similarity index 100% rename from utilcode/pkg/src/main/res/drawable/bar_status_nav_image.xml rename to app/utilcode/pkg/src/main/res/drawable/bar_status_nav_image.xml diff --git a/utilcode/pkg/src/main/res/drawable/click_shape_round_rect.xml b/app/utilcode/pkg/src/main/res/drawable/click_shape_round_rect.xml similarity index 100% rename from utilcode/pkg/src/main/res/drawable/click_shape_round_rect.xml rename to app/utilcode/pkg/src/main/res/drawable/click_shape_round_rect.xml diff --git a/utilcode/pkg/src/main/res/drawable/fragment_nav.xml b/app/utilcode/pkg/src/main/res/drawable/fragment_nav.xml similarity index 100% rename from utilcode/pkg/src/main/res/drawable/fragment_nav.xml rename to app/utilcode/pkg/src/main/res/drawable/fragment_nav.xml diff --git a/utilcode/pkg/src/main/res/drawable/image_lena.jpg b/app/utilcode/pkg/src/main/res/drawable/image_lena.jpg similarity index 100% rename from utilcode/pkg/src/main/res/drawable/image_lena.jpg rename to app/utilcode/pkg/src/main/res/drawable/image_lena.jpg diff --git a/utilcode/pkg/src/main/res/drawable/snackbar_custom_bg.xml b/app/utilcode/pkg/src/main/res/drawable/snackbar_custom_bg.xml similarity index 100% rename from utilcode/pkg/src/main/res/drawable/snackbar_custom_bg.xml rename to app/utilcode/pkg/src/main/res/drawable/snackbar_custom_bg.xml diff --git a/utilcode/pkg/src/main/res/drawable/span_cheetah.png b/app/utilcode/pkg/src/main/res/drawable/span_cheetah.png similarity index 100% rename from utilcode/pkg/src/main/res/drawable/span_cheetah.png rename to app/utilcode/pkg/src/main/res/drawable/span_cheetah.png diff --git a/utilcode/pkg/src/main/res/drawable/span_shape_block_high.xml b/app/utilcode/pkg/src/main/res/drawable/span_shape_block_high.xml similarity index 100% rename from utilcode/pkg/src/main/res/drawable/span_shape_block_high.xml rename to app/utilcode/pkg/src/main/res/drawable/span_shape_block_high.xml diff --git a/utilcode/pkg/src/main/res/drawable/span_shape_block_low.xml b/app/utilcode/pkg/src/main/res/drawable/span_shape_block_low.xml similarity index 100% rename from utilcode/pkg/src/main/res/drawable/span_shape_block_low.xml rename to app/utilcode/pkg/src/main/res/drawable/span_shape_block_low.xml diff --git a/utilcode/pkg/src/main/res/drawable/toast_shape_round_rect.xml b/app/utilcode/pkg/src/main/res/drawable/toast_shape_round_rect.xml similarity index 100% rename from utilcode/pkg/src/main/res/drawable/toast_shape_round_rect.xml rename to app/utilcode/pkg/src/main/res/drawable/toast_shape_round_rect.xml diff --git a/utilcode/pkg/src/main/res/layout/activity_activity.xml b/app/utilcode/pkg/src/main/res/layout/activity_activity.xml similarity index 100% rename from utilcode/pkg/src/main/res/layout/activity_activity.xml rename to app/utilcode/pkg/src/main/res/layout/activity_activity.xml diff --git a/utilcode/pkg/src/main/res/layout/activity_activity_sub.xml b/app/utilcode/pkg/src/main/res/layout/activity_activity_sub.xml similarity index 100% rename from utilcode/pkg/src/main/res/layout/activity_activity_sub.xml rename to app/utilcode/pkg/src/main/res/layout/activity_activity_sub.xml diff --git a/utilcode/pkg/src/main/res/layout/activity_adaptscreen.xml b/app/utilcode/pkg/src/main/res/layout/activity_adaptscreen.xml similarity index 100% rename from utilcode/pkg/src/main/res/layout/activity_adaptscreen.xml rename to app/utilcode/pkg/src/main/res/layout/activity_adaptscreen.xml diff --git a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_close.xml b/app/utilcode/pkg/src/main/res/layout/activity_adaptscreen_close.xml similarity index 100% rename from utilcode/pkg/src/main/res/layout/activity_adaptscreen_close.xml rename to app/utilcode/pkg/src/main/res/layout/activity_adaptscreen_close.xml diff --git a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_height.xml b/app/utilcode/pkg/src/main/res/layout/activity_adaptscreen_height.xml similarity index 100% rename from utilcode/pkg/src/main/res/layout/activity_adaptscreen_height.xml rename to app/utilcode/pkg/src/main/res/layout/activity_adaptscreen_height.xml diff --git a/utilcode/pkg/src/main/res/layout/activity_adaptscreen_width.xml b/app/utilcode/pkg/src/main/res/layout/activity_adaptscreen_width.xml similarity index 100% rename from utilcode/pkg/src/main/res/layout/activity_adaptscreen_width.xml rename to app/utilcode/pkg/src/main/res/layout/activity_adaptscreen_width.xml diff --git a/app/utilcode/pkg/src/main/res/layout/activity_api.xml b/app/utilcode/pkg/src/main/res/layout/activity_api.xml new file mode 100644 index 0000000000..1d8324110c --- /dev/null +++ b/app/utilcode/pkg/src/main/res/layout/activity_api.xml @@ -0,0 +1,23 @@ + + + +
*/ public class CommonApplication extends BaseApplication { diff --git a/lib/common/src/main/java/com/blankj/lib/common/CommonBackActivity.java b/lib/common/src/main/java/com/blankj/lib/common/CommonBackActivity.java index 76cfc09f36..349e6081db 100644 --- a/lib/common/src/main/java/com/blankj/lib/common/CommonBackActivity.java +++ b/lib/common/src/main/java/com/blankj/lib/common/CommonBackActivity.java @@ -2,7 +2,6 @@ import android.os.Bundle; -import com.blankj.common.R; import com.blankj.lib.base.BaseActivity; import com.blankj.swipepanel.SwipePanel; import com.blankj.utilcode.util.SizeUtils; diff --git a/lib/common/src/main/java/com/blankj/lib/common/CommonDrawerActivity.java b/lib/common/src/main/java/com/blankj/lib/common/CommonDrawerActivity.java index efb9f52854..f09fef8683 100755 --- a/lib/common/src/main/java/com/blankj/lib/common/CommonDrawerActivity.java +++ b/lib/common/src/main/java/com/blankj/lib/common/CommonDrawerActivity.java @@ -12,7 +12,6 @@ import android.view.MenuItem; import android.widget.FrameLayout; -import com.blankj.common.R; import com.blankj.utilcode.util.ActivityUtils; import com.blankj.utilcode.util.StringUtils; diff --git a/lib/common/src/main/java/com/blankj/lib/common/CommonTitleActivity.java b/lib/common/src/main/java/com/blankj/lib/common/CommonTitleActivity.java index 66d7f97970..56264d7e99 100644 --- a/lib/common/src/main/java/com/blankj/lib/common/CommonTitleActivity.java +++ b/lib/common/src/main/java/com/blankj/lib/common/CommonTitleActivity.java @@ -11,7 +11,6 @@ import android.view.ViewStub; import android.widget.FrameLayout; -import com.blankj.common.R; import com.blankj.utilcode.util.BarUtils; import com.blankj.utilcode.util.ColorUtils; diff --git a/lib/common/src/main/res/values/strings.xml b/lib/common/src/main/res/values/strings.xml index bd03140d88..a3ce462324 100644 --- a/lib/common/src/main/res/values/strings.xml +++ b/lib/common/src/main/res/values/strings.xml @@ -14,6 +14,4 @@ You have rejected us to apply for authorization, please agree to authorization, otherwise the function can\'t be used normally! We need some of the permissions you rejected or the system failed to apply failed, please manually set to the page authorize, otherwise the function can\'t be used normally! - - The application crashes, does it need to be restarted? diff --git a/lib/subutil/.gitignore b/lib/subutil/.gitignore new file mode 100644 index 0000000000..796b96d1c4 --- /dev/null +++ b/lib/subutil/.gitignore @@ -0,0 +1 @@ +/build diff --git a/subutil/README-CN.md b/lib/subutil/README-CN.md similarity index 100% rename from subutil/README-CN.md rename to lib/subutil/README-CN.md diff --git a/subutil/README.md b/lib/subutil/README.md similarity index 100% rename from subutil/README.md rename to lib/subutil/README.md diff --git a/lib/subutil/build.gradle b/lib/subutil/build.gradle new file mode 100644 index 0000000000..49d56e5ee6 --- /dev/null +++ b/lib/subutil/build.gradle @@ -0,0 +1,28 @@ +apply { + from "${rootDir.path}/buildLib.gradle" + + plugin "tech.harmonysoft.oss.traute" + plugin "com.github.dcendents.android-maven" + plugin "com.jfrog.bintray" + plugin "readme-sub" +} + +readme { + readmeFile file('./README.md') + readmeCnFile file('./README-CN.md') +} + +dependencies { + compileOnly Config.depConfig.support_appcompat_v7.dep + compileOnly Config.depConfig.support_design.dep + compileOnly Config.depConfig.lib_utilcode.dep + api(Config.depConfig.glide.dep) { + exclude group: "com.android.support" + } + api Config.depConfig.retrofit.dep + api Config.depConfig.gson.dep + + testImplementation Config.depConfig.junit.dep + testImplementation Config.depConfig.robolectric.dep + testImplementation Config.depConfig.lib_utilcode.dep +} \ No newline at end of file diff --git a/subutil/lib/proguard-rules.pro b/lib/subutil/proguard-rules.pro similarity index 100% rename from subutil/lib/proguard-rules.pro rename to lib/subutil/proguard-rules.pro diff --git a/subutil/lib/src/main/AndroidManifest.xml b/lib/subutil/src/main/AndroidManifest.xml similarity index 100% rename from subutil/lib/src/main/AndroidManifest.xml rename to lib/subutil/src/main/AndroidManifest.xml diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/AppStoreUtils.java b/lib/subutil/src/main/java/com/blankj/subutil/util/AppStoreUtils.java similarity index 100% rename from subutil/lib/src/main/java/com/blankj/subutil/util/AppStoreUtils.java rename to lib/subutil/src/main/java/com/blankj/subutil/util/AppStoreUtils.java diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/BitUtils.java b/lib/subutil/src/main/java/com/blankj/subutil/util/BitUtils.java similarity index 100% rename from subutil/lib/src/main/java/com/blankj/subutil/util/BitUtils.java rename to lib/subutil/src/main/java/com/blankj/subutil/util/BitUtils.java diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/CameraUtils.java b/lib/subutil/src/main/java/com/blankj/subutil/util/CameraUtils.java similarity index 100% rename from subutil/lib/src/main/java/com/blankj/subutil/util/CameraUtils.java rename to lib/subutil/src/main/java/com/blankj/subutil/util/CameraUtils.java diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/ClipboardUtils.java b/lib/subutil/src/main/java/com/blankj/subutil/util/ClipboardUtils.java similarity index 100% rename from subutil/lib/src/main/java/com/blankj/subutil/util/ClipboardUtils.java rename to lib/subutil/src/main/java/com/blankj/subutil/util/ClipboardUtils.java diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/CoordinateUtils.java b/lib/subutil/src/main/java/com/blankj/subutil/util/CoordinateUtils.java similarity index 100% rename from subutil/lib/src/main/java/com/blankj/subutil/util/CoordinateUtils.java rename to lib/subutil/src/main/java/com/blankj/subutil/util/CoordinateUtils.java diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/CountryUtils.java b/lib/subutil/src/main/java/com/blankj/subutil/util/CountryUtils.java similarity index 100% rename from subutil/lib/src/main/java/com/blankj/subutil/util/CountryUtils.java rename to lib/subutil/src/main/java/com/blankj/subutil/util/CountryUtils.java diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/DangerousUtils.java b/lib/subutil/src/main/java/com/blankj/subutil/util/DangerousUtils.java similarity index 100% rename from subutil/lib/src/main/java/com/blankj/subutil/util/DangerousUtils.java rename to lib/subutil/src/main/java/com/blankj/subutil/util/DangerousUtils.java diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/GlideUtils.java b/lib/subutil/src/main/java/com/blankj/subutil/util/GlideUtils.java similarity index 100% rename from subutil/lib/src/main/java/com/blankj/subutil/util/GlideUtils.java rename to lib/subutil/src/main/java/com/blankj/subutil/util/GlideUtils.java diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/HttpsUtil.java b/lib/subutil/src/main/java/com/blankj/subutil/util/HttpsUtil.java similarity index 100% rename from subutil/lib/src/main/java/com/blankj/subutil/util/HttpsUtil.java rename to lib/subutil/src/main/java/com/blankj/subutil/util/HttpsUtil.java diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/LocationUtils.java b/lib/subutil/src/main/java/com/blankj/subutil/util/LocationUtils.java similarity index 100% rename from subutil/lib/src/main/java/com/blankj/subutil/util/LocationUtils.java rename to lib/subutil/src/main/java/com/blankj/subutil/util/LocationUtils.java diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/LunarUtils.java b/lib/subutil/src/main/java/com/blankj/subutil/util/LunarUtils.java similarity index 100% rename from subutil/lib/src/main/java/com/blankj/subutil/util/LunarUtils.java rename to lib/subutil/src/main/java/com/blankj/subutil/util/LunarUtils.java diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/PinyinUtils.java b/lib/subutil/src/main/java/com/blankj/subutil/util/PinyinUtils.java similarity index 100% rename from subutil/lib/src/main/java/com/blankj/subutil/util/PinyinUtils.java rename to lib/subutil/src/main/java/com/blankj/subutil/util/PinyinUtils.java diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/RetrofitUtils.java b/lib/subutil/src/main/java/com/blankj/subutil/util/RetrofitUtils.java similarity index 100% rename from subutil/lib/src/main/java/com/blankj/subutil/util/RetrofitUtils.java rename to lib/subutil/src/main/java/com/blankj/subutil/util/RetrofitUtils.java diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/http/Chain.java b/lib/subutil/src/main/java/com/blankj/subutil/util/http/Chain.java similarity index 100% rename from subutil/lib/src/main/java/com/blankj/subutil/util/http/Chain.java rename to lib/subutil/src/main/java/com/blankj/subutil/util/http/Chain.java diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/http/ExecutorFactory.java b/lib/subutil/src/main/java/com/blankj/subutil/util/http/ExecutorFactory.java similarity index 100% rename from subutil/lib/src/main/java/com/blankj/subutil/util/http/ExecutorFactory.java rename to lib/subutil/src/main/java/com/blankj/subutil/util/http/ExecutorFactory.java diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/http/Headers.java b/lib/subutil/src/main/java/com/blankj/subutil/util/http/Headers.java similarity index 100% rename from subutil/lib/src/main/java/com/blankj/subutil/util/http/Headers.java rename to lib/subutil/src/main/java/com/blankj/subutil/util/http/Headers.java diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/http/HttpUtils.java b/lib/subutil/src/main/java/com/blankj/subutil/util/http/HttpUtils.java similarity index 100% rename from subutil/lib/src/main/java/com/blankj/subutil/util/http/HttpUtils.java rename to lib/subutil/src/main/java/com/blankj/subutil/util/http/HttpUtils.java diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/http/Interceptor.java b/lib/subutil/src/main/java/com/blankj/subutil/util/http/Interceptor.java similarity index 100% rename from subutil/lib/src/main/java/com/blankj/subutil/util/http/Interceptor.java rename to lib/subutil/src/main/java/com/blankj/subutil/util/http/Interceptor.java diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/http/Request.java b/lib/subutil/src/main/java/com/blankj/subutil/util/http/Request.java similarity index 100% rename from subutil/lib/src/main/java/com/blankj/subutil/util/http/Request.java rename to lib/subutil/src/main/java/com/blankj/subutil/util/http/Request.java diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/http/Response.java b/lib/subutil/src/main/java/com/blankj/subutil/util/http/Response.java similarity index 100% rename from subutil/lib/src/main/java/com/blankj/subutil/util/http/Response.java rename to lib/subutil/src/main/java/com/blankj/subutil/util/http/Response.java diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/http/ResponseCallback.java b/lib/subutil/src/main/java/com/blankj/subutil/util/http/ResponseCallback.java similarity index 100% rename from subutil/lib/src/main/java/com/blankj/subutil/util/http/ResponseCallback.java rename to lib/subutil/src/main/java/com/blankj/subutil/util/http/ResponseCallback.java diff --git a/subutil/lib/src/main/java/com/blankj/subutil/util/http/SSLConfig.java b/lib/subutil/src/main/java/com/blankj/subutil/util/http/SSLConfig.java similarity index 100% rename from subutil/lib/src/main/java/com/blankj/subutil/util/http/SSLConfig.java rename to lib/subutil/src/main/java/com/blankj/subutil/util/http/SSLConfig.java diff --git a/subutil/lib/src/test/java/com/blankj/subutil/util/BaseTest.java b/lib/subutil/src/test/java/com/blankj/subutil/util/BaseTest.java similarity index 100% rename from subutil/lib/src/test/java/com/blankj/subutil/util/BaseTest.java rename to lib/subutil/src/test/java/com/blankj/subutil/util/BaseTest.java diff --git a/subutil/lib/src/test/java/com/blankj/subutil/util/ClipboardUtilsTest.java b/lib/subutil/src/test/java/com/blankj/subutil/util/ClipboardUtilsTest.java similarity index 100% rename from subutil/lib/src/test/java/com/blankj/subutil/util/ClipboardUtilsTest.java rename to lib/subutil/src/test/java/com/blankj/subutil/util/ClipboardUtilsTest.java diff --git a/subutil/lib/src/test/java/com/blankj/subutil/util/CoordinateUtilsTest.java b/lib/subutil/src/test/java/com/blankj/subutil/util/CoordinateUtilsTest.java similarity index 100% rename from subutil/lib/src/test/java/com/blankj/subutil/util/CoordinateUtilsTest.java rename to lib/subutil/src/test/java/com/blankj/subutil/util/CoordinateUtilsTest.java diff --git a/subutil/lib/src/test/java/com/blankj/subutil/util/LunarUtilsTest.java b/lib/subutil/src/test/java/com/blankj/subutil/util/LunarUtilsTest.java similarity index 100% rename from subutil/lib/src/test/java/com/blankj/subutil/util/LunarUtilsTest.java rename to lib/subutil/src/test/java/com/blankj/subutil/util/LunarUtilsTest.java diff --git a/subutil/lib/src/test/java/com/blankj/subutil/util/TestConfig.java b/lib/subutil/src/test/java/com/blankj/subutil/util/TestConfig.java similarity index 100% rename from subutil/lib/src/test/java/com/blankj/subutil/util/TestConfig.java rename to lib/subutil/src/test/java/com/blankj/subutil/util/TestConfig.java diff --git a/subutil/lib/src/test/java/com/blankj/subutil/util/TestUtils.java b/lib/subutil/src/test/java/com/blankj/subutil/util/TestUtils.java similarity index 100% rename from subutil/lib/src/test/java/com/blankj/subutil/util/TestUtils.java rename to lib/subutil/src/test/java/com/blankj/subutil/util/TestUtils.java diff --git a/subutil/lib/src/test/java/com/blankj/subutil/util/http/HttpUtilsTest.java b/lib/subutil/src/test/java/com/blankj/subutil/util/http/HttpUtilsTest.java similarity index 100% rename from subutil/lib/src/test/java/com/blankj/subutil/util/http/HttpUtilsTest.java rename to lib/subutil/src/test/java/com/blankj/subutil/util/http/HttpUtilsTest.java diff --git a/subutil/lib/src/test/java/com/blankj/subutil/util/http/UserBean.java b/lib/subutil/src/test/java/com/blankj/subutil/util/http/UserBean.java similarity index 100% rename from subutil/lib/src/test/java/com/blankj/subutil/util/http/UserBean.java rename to lib/subutil/src/test/java/com/blankj/subutil/util/http/UserBean.java diff --git a/lib/utilcode/.gitignore b/lib/utilcode/.gitignore new file mode 100644 index 0000000000..42afabfd2a --- /dev/null +++ b/lib/utilcode/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/utilcode/README-CN.md b/lib/utilcode/README-CN.md similarity index 100% rename from utilcode/README-CN.md rename to lib/utilcode/README-CN.md diff --git a/utilcode/README-STATIC-BUS.md b/lib/utilcode/README-STATIC-BUS.md similarity index 98% rename from utilcode/README-STATIC-BUS.md rename to lib/utilcode/README-STATIC-BUS.md index cee8b68c3e..805b7e7354 100644 --- a/utilcode/README-STATIC-BUS.md +++ b/lib/utilcode/README-STATIC-BUS.md @@ -27,7 +27,7 @@ apply plugin: "com.blankj.bus" 给 base 模块添加 [AndroidUtilCode](https://github.com/Blankj/AndroidUtilCode) 依赖: ```groovy -api "com.blankj:utilcode:1.24.7" +result "com.blankj:utilcode:1.24.7" ``` 比如 module0 中存在的 `Module0Activity.java`,我们通常都是在它内部写一个 `start` 函数来启动它,现在我们给它添加 `@BusUtils.Subscribe` 注解,并给注解的 `name` 赋唯一值,要注意,函数务必要 `public static` 哦: diff --git a/utilcode/README.md b/lib/utilcode/README.md similarity index 100% rename from utilcode/README.md rename to lib/utilcode/README.md diff --git a/lib/utilcode/build.gradle b/lib/utilcode/build.gradle new file mode 100644 index 0000000000..c28114b5aa --- /dev/null +++ b/lib/utilcode/build.gradle @@ -0,0 +1,27 @@ +apply { + from "${rootDir.path}/buildLib.gradle" + + plugin "tech.harmonysoft.oss.traute" + plugin "com.github.dcendents.android-maven" + plugin "com.jfrog.bintray" + plugin "readme-core" +} + +readme { + readmeFile file('./README.md') + readmeCnFile file('./README-CN.md') +} + +apply from: "${rootDir.path}/gradle/upload/bintrayUploadAndroid.gradle" + +dependencies { + compile Config.depConfig.gson.dep + + compileOnly Config.depConfig.support_appcompat_v7.dep + compileOnly Config.depConfig.support_design.dep + + testImplementation Config.depConfig.junit.dep + testImplementation Config.depConfig.robolectric.dep + testImplementation Config.depConfig.support_appcompat_v7.dep + testImplementation Config.depConfig.lib_base.dep +} \ No newline at end of file diff --git a/utilcode/lib/proguard-rules.pro b/lib/utilcode/proguard-rules.pro similarity index 100% rename from utilcode/lib/proguard-rules.pro rename to lib/utilcode/proguard-rules.pro diff --git a/utilcode/lib/project.properties b/lib/utilcode/project.properties similarity index 100% rename from utilcode/lib/project.properties rename to lib/utilcode/project.properties diff --git a/utilcode/lib/src/main/AndroidManifest.xml b/lib/utilcode/src/main/AndroidManifest.xml similarity index 100% rename from utilcode/lib/src/main/AndroidManifest.xml rename to lib/utilcode/src/main/AndroidManifest.xml diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/CacheConstants.java b/lib/utilcode/src/main/java/com/blankj/utilcode/constant/CacheConstants.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/constant/CacheConstants.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/constant/CacheConstants.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/MemoryConstants.java b/lib/utilcode/src/main/java/com/blankj/utilcode/constant/MemoryConstants.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/constant/MemoryConstants.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/constant/MemoryConstants.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/PermissionConstants.java b/lib/utilcode/src/main/java/com/blankj/utilcode/constant/PermissionConstants.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/constant/PermissionConstants.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/constant/PermissionConstants.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/RegexConstants.java b/lib/utilcode/src/main/java/com/blankj/utilcode/constant/RegexConstants.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/constant/RegexConstants.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/constant/RegexConstants.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/constant/TimeConstants.java b/lib/utilcode/src/main/java/com/blankj/utilcode/constant/TimeConstants.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/constant/TimeConstants.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/constant/TimeConstants.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ActivityUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ActivityUtils.java similarity index 99% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/ActivityUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/ActivityUtils.java index fed25d6831..8f6dd9db33 100644 --- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ActivityUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ActivityUtils.java @@ -50,7 +50,7 @@ public static Activity getActivityByView(@NonNull View view) { * @param context The context. * @return the activity by context. */ - public static Activity getActivityByContext(@NonNull Context context) { + public static Activity getActivityByContext(Context context) { if (context instanceof Activity) return (Activity) context; while (context instanceof ContextWrapper) { if (context instanceof Activity) { diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/AdaptScreenUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/AdaptScreenUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/AdaptScreenUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/AdaptScreenUtils.java diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/ApiUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ApiUtils.java new file mode 100644 index 0000000000..1d9bbd0559 --- /dev/null +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ApiUtils.java @@ -0,0 +1,101 @@ +package com.blankj.utilcode.util; + +import android.support.annotation.NonNull; +import android.util.Log; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.util.HashMap; +import java.util.Map; + +/** + *
+ *     author: Blankj
+ *     blog  : http://blankj.com
+ *     time  : 2019/07/09
+ *     desc  : utils about api
+ * 
+ */ +public final class ApiUtils { + + private static final String TAG = "ApiUtils"; + + private Map mApiMap = new HashMap<>(); + private Map mInjectApiImplMap = new HashMap<>(); + + private ApiUtils() { + init(); + } + + /** + * It'll be injected the implClasses who have {@link ApiUtils.Api} annotation + * by function of {@link ApiUtils#registerImpl} when execute transform task. + */ + private void init() {/*inject*/} + + private void registerImpl(Class implClass) { + mInjectApiImplMap.put(implClass.getSuperclass(), implClass); + } + + /** + * Get api. + * + * @param apiClass The class of api. + * @param The type. + * @return the api + */ + public static T getApi(@NonNull Class apiClass) { + return getInstance().getApiInner(apiClass); + } + + public static String toString_() { + return getInstance().toString(); + } + + @Override + public String toString() { + return "apis: " + mApiMap + + "\ninjectApis: " + mInjectApiImplMap; + } + + private static ApiUtils getInstance() { + return LazyHolder.INSTANCE; + } + + private Result getApiInner(final @NonNull Class apiClass) { + BaseApi api = mApiMap.get(apiClass); + if (api == null) { + Class implClass = mInjectApiImplMap.get(apiClass); + if (implClass != null) { + try { + api = (BaseApi) implClass.newInstance(); + mApiMap.put(apiClass, api); + } catch (Exception ignore) {/**/} + } + if (api == null) { + Log.e(TAG, apiClass + " is not impl."); + return null; + } + } + //noinspection unchecked + return (Result) api.invoke(); + } + + private static class LazyHolder { + private static final ApiUtils INSTANCE = new ApiUtils(); + } + + @Target({ElementType.TYPE}) + @Retention(RetentionPolicy.CLASS) + public @interface Api { + boolean isDebug() default false; + } + + public abstract static class BaseApi { + private BaseApi invoke() { + return this; + } + } +} \ No newline at end of file diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/AppUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/AppUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/AppUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/AppUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BarUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/BarUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/BarUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/BarUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/BrightnessUtils.java diff --git a/lib/utilcode/src/main/java/com/blankj/utilcode/util/BusUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/BusUtils.java new file mode 100644 index 0000000000..9d7f390039 --- /dev/null +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/BusUtils.java @@ -0,0 +1,123 @@ +package com.blankj.utilcode.util; + +import android.util.Log; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +/** + *
+ *     author: Blankj
+ *     blog  : http://blankj.com
+ *     time  : 2018/10/02
+ *     desc  : utils about bus
+ * 
+ */ +public final class BusUtils { + + private static final String TAG = "BusUtils"; + + private final Map> mSubscribersMap = new HashMap<>(); + private final Map mBusesMap = new HashMap<>(); + private final Set mStickies = new HashSet<>(); + + private BusUtils() { + init(); + } + + /** + * It'll be injected the bus who have {@link BusUtils.Bus} annotation + * by function of {@link BusUtils#registerBus} when execute transform task. + */ + private void init() {/*inject*/} + + private void registerBus(final String name, final Class type) { + mBusesMap.put(name, type); + } + + public static void register(final Object bus) { + getInstance().registerInner(bus); + } + + public static void unregister(final Object bus) { + getInstance().unregisterInner(bus); + } + + private void registerInner(final Object bus) { + if (bus == null) return; + Class aClass = bus.getClass(); + Set typeSubscribers = mSubscribersMap.get(aClass); + if (typeSubscribers == null) { + typeSubscribers = new HashSet<>(); + mSubscribersMap.put(aClass, typeSubscribers); + } + typeSubscribers.add(bus); + } + + private void unregisterInner(final Object bus) { + if (bus == null) return; + Class aClass = bus.getClass(); + Set typeSubscribers = mSubscribersMap.get(aClass); + if (typeSubscribers == null || typeSubscribers.contains(bus)) { + Log.i(TAG, "Bus to unregister was not registered before: " + bus); + return; + } + typeSubscribers.remove(bus); + } + + private void postStickyInner(final String name, final Object... objects) { + mStickies.add(new Sticky(name, objects)); + postInner(name, objects); + } + + private void removeStickyInner(final String name) { + + } + + private void postInner(final String name, final Object... objects) { + if (name == null || name.length() == 0) return; + final Class buses = mBusesMap.get(name); + + +// for (Class bus : buses) { +// Set subscribers = mSubscribersMap.get(bus); +// if (subscribers == null || subscribers.isEmpty()) { +// Log.e("BusUtils", "bus of <" + name + "{" + bus + "}> in didn\'t exist."); +// continue; +// } +// for (Object subscriber : subscribers) { +// injectShell2(subscriber, name, objects); +// } +// } + } + + private static BusUtils getInstance() { + return LazyHolder.INSTANCE; + } + + private static class Sticky { + String name; + Object[] params; + + Sticky(String name, Object[] params) { + this.name = name; + this.params = params; + } + } + + @Target({ElementType.METHOD}) + @Retention(RetentionPolicy.CLASS) + public @interface Bus { + String value() default ""; + } + + private static class LazyHolder { + private static final BusUtils INSTANCE = new BusUtils(); + } +} diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/CacheDiskStaticUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/CacheDiskUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDiskUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/CacheDiskUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleStaticUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/CacheDoubleStaticUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleStaticUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/CacheDoubleStaticUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/CacheDoubleUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryStaticUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/CacheMemoryStaticUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryStaticUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/CacheMemoryStaticUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/CacheMemoryUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/CacheMemoryUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/CacheMemoryUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CleanUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/CleanUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/CleanUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/CleanUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ClickUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ClickUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/ClickUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/ClickUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CloneUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/CloneUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/CloneUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/CloneUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CloseUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/CloseUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/CloseUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/CloseUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ColorUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ColorUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/ColorUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/ColorUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ConvertUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ConvertUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/ConvertUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/ConvertUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/CrashUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/CrashUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/CrashUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/CrashUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/DeviceUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/DeviceUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/DeviceUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/DeviceUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/EncodeUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/EncodeUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/EncodeUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/EncodeUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/EncryptUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/EncryptUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/EncryptUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/EncryptUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/FileIOUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/FileIOUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/FileIOUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/FileIOUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/FileUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/FileUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/FileUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/FileUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/FlashlightUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/FlashlightUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/FlashlightUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/FlashlightUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/FragmentUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/FragmentUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/FragmentUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/FragmentUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/GsonUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/GsonUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/GsonUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/GsonUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ImageUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ImageUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/ImageUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/ImageUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/IntentUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/IntentUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/IntentUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/IntentUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/JsonUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/JsonUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/JsonUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/JsonUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java similarity index 84% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java index 53ea8997c3..f875ced39b 100644 --- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/KeyboardUtils.java @@ -2,6 +2,7 @@ import android.app.Activity; import android.content.Context; +import android.content.ContextWrapper; import android.content.res.Resources; import android.graphics.Rect; import android.os.Bundle; @@ -10,14 +11,14 @@ import android.support.annotation.NonNull; import android.util.Log; import android.view.View; +import android.view.ViewGroup; import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.view.Window; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; import android.widget.FrameLayout; -import java.lang.reflect.Field; - /** *
  *     author: Blankj
@@ -35,11 +36,10 @@ private KeyboardUtils() {
     /**
      * Show the soft input.
      */
-    public static void showSoftInput() {
-        InputMethodManager imm =
-                (InputMethodManager) Utils.getApp().getSystemService(Context.INPUT_METHOD_SERVICE);
-        if (imm == null) return;
-        imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
+    public static void showSoftInput(@NonNull Activity activity) {
+        if (!isSoftInputVisible(activity)) {
+            toggleSoftInput();
+        }
     }
 
     /**
@@ -47,8 +47,8 @@ public static void showSoftInput() {
      *
      * @param view The view.
      */
-    public static void showSoftInput(final View view) {
-        showSoftInput(view, InputMethodManager.SHOW_FORCED);
+    public static void showSoftInput(@NonNull final View view) {
+        showSoftInput(view, 0);
     }
 
     /**
@@ -58,7 +58,7 @@ public static void showSoftInput(final View view) {
      * @param flags Provides additional operating flags.  Currently may be
      *              0 or have the {@link InputMethodManager#SHOW_IMPLICIT} bit set.
      */
-    public static void showSoftInput(final View view, final int flags) {
+    public static void showSoftInput(@NonNull final View view, final int flags) {
         InputMethodManager imm =
                 (InputMethodManager) Utils.getApp().getSystemService(Context.INPUT_METHOD_SERVICE);
         if (imm == null) return;
@@ -82,10 +82,18 @@ protected void onReceiveResult(int resultCode, Bundle resultData) {
      *
      * @param activity The activity.
      */
-    public static void hideSoftInput(final Activity activity) {
+    public static void hideSoftInput(@NonNull final Activity activity) {
         View view = activity.getCurrentFocus();
         if (view == null) {
-            view = new View(activity);
+            View focusView = activity.getWindow().getDecorView().findViewWithTag("keyboardTagView");
+            if (focusView == null) {
+                view = new EditText(activity);
+                view.setTag("keyboardTagView");
+            } else {
+                view = focusView;
+            }
+            ((ViewGroup) activity.getWindow().getDecorView()).addView(view, 0, 0);
+            view.requestFocus();
         }
         hideSoftInput(view);
     }
@@ -95,7 +103,7 @@ public static void hideSoftInput(final Activity activity) {
      *
      * @param view The view.
      */
-    public static void hideSoftInput(final View view) {
+    public static void hideSoftInput(@NonNull final View view) {
         InputMethodManager imm =
                 (InputMethodManager) Utils.getApp().getSystemService(Context.INPUT_METHOD_SERVICE);
         if (imm == null) return;
@@ -117,7 +125,7 @@ public static void toggleSoftInput() {
         InputMethodManager imm =
                 (InputMethodManager) Utils.getApp().getSystemService(Context.INPUT_METHOD_SERVICE);
         if (imm == null) return;
-        imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
+        imm.toggleSoftInput(0, 0);
     }
 
     private static int sDecorViewDelta = 0;
@@ -140,7 +148,7 @@ private static int getDecorViewInvisibleHeight(@NonNull final Window window) {
         Log.d("KeyboardUtils", "getDecorViewInvisibleHeight: "
                 + (decorView.getBottom() - outRect.bottom));
         int delta = Math.abs(decorView.getBottom() - outRect.bottom);
-        if (delta <= getNavBarHeight()) {
+        if (delta <= getNavBarHeight() + getStatusBarHeight()) {
             sDecorViewDelta = delta;
             return 0;
         }
@@ -242,7 +250,6 @@ private static int getContentViewInvisibleHeight(final Window window) {
 
     /**
      * Fix the leaks of soft input.
-     * 

Call the function in {@link Activity#onDestroy()}.

* * @param activity The activity. */ @@ -252,30 +259,11 @@ public static void fixSoftInputLeaks(@NonNull final Activity activity) { /** * Fix the leaks of soft input. - *

Call the function in {@link Activity#onDestroy()}.

* * @param window The window. */ public static void fixSoftInputLeaks(@NonNull final Window window) { - InputMethodManager imm = - (InputMethodManager) Utils.getApp().getSystemService(Context.INPUT_METHOD_SERVICE); - if (imm == null) return; - String[] leakViews = new String[]{"mLastSrvView", "mCurRootView", "mServedView", "mNextServedView"}; - for (String leakView : leakViews) { - try { - Field leakViewField = InputMethodManager.class.getDeclaredField(leakView); - if (leakViewField == null) continue; - if (!leakViewField.isAccessible()) { - leakViewField.setAccessible(true); - } - Object obj = leakViewField.get(imm); - if (!(obj instanceof View)) continue; - View view = (View) obj; - if (view.getRootView() == window.getDecorView().getRootView()) { - leakViewField.set(imm, null); - } - } catch (Throwable ignore) {/**/} - } + Utils.fixSoftInputLeaks(window); } /** @@ -333,9 +321,24 @@ private static int getNavBarHeight() { } } - /////////////////////////////////////////////////////////////////////////// - // interface - /////////////////////////////////////////////////////////////////////////// + private static Activity getActivityByView(@NonNull View view) { + return getActivityByContext(view.getContext()); + } + + private static Activity getActivityByContext(Context context) { + if (context instanceof Activity) return (Activity) context; + while (context instanceof ContextWrapper) { + if (context instanceof Activity) { + return (Activity) context; + } + context = ((ContextWrapper) context).getBaseContext(); + } + return null; + } + +/////////////////////////////////////////////////////////////////////////// +// interface +/////////////////////////////////////////////////////////////////////////// public interface OnSoftInputChangedListener { void onSoftInputChanged(int height); diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/LanguageUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/LanguageUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/LanguageUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/LanguageUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/LogUtils.java similarity index 98% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/LogUtils.java index 47b12b20a4..03d8c142fb 100644 --- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/LogUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/LogUtils.java @@ -482,7 +482,7 @@ private static void print2File(final int type, final String tag, final String ms final String fullPath = CONFIG.getDir() + CONFIG.getFilePrefix() + "_" + date + "_" + - CONFIG.getProcessName() + ".txt"; + CONFIG.getProcessName() + CONFIG.getFileExtension(); if (!createOrExistsFile(fullPath, date)) { Log.e("LogUtils", "create " + fullPath + " failed!"); return; @@ -527,6 +527,7 @@ private static void deleteDueLogs(final String filePath, final String date) { File[] files = parentFile.listFiles(new FilenameFilter() { @Override public boolean accept(File dir, String name) { + System.out.println("haha"); return name.matches("^" + CONFIG.getFilePrefix() + "_[0-9]{4}_[0-9]{2}_[0-9]{2}_.*$"); } }); @@ -631,6 +632,7 @@ public static final class Config { private String mDefaultDir;// The default storage directory of log. private String mDir; // The storage directory of log. private String mFilePrefix = "util";// The file prefix of log. + private String mFileExtension = ".txt";// The file extension of log. private boolean mLogSwitch = true; // The switch of log. private boolean mLog2ConsoleSwitch = true; // The logcat's switch of log. private String mGlobalTag = ""; // The global tag of log. @@ -711,6 +713,19 @@ public final Config setFilePrefix(final String filePrefix) { return this; } + public final Config setFileExtension(final String fileExtension) { + if (isSpace(fileExtension)) { + mFileExtension = ".txt"; + } else { + if (fileExtension.startsWith(".")) { + mFileExtension = fileExtension; + } else { + mFileExtension = "." + fileExtension; + } + } + return this; + } + public final Config setBorderSwitch(final boolean borderSwitch) { mLogBorderSwitch = borderSwitch; return this; @@ -775,6 +790,10 @@ public final String getFilePrefix() { return mFilePrefix; } + public final String getFileExtension() { + return mFileExtension; + } + public final boolean isLogSwitch() { return mLogSwitch; } diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BusUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/MessengerUtils.java similarity index 72% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/BusUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/MessengerUtils.java index f04202043e..e0548195d9 100644 --- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/BusUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/MessengerUtils.java @@ -1,6 +1,5 @@ package com.blankj.utilcode.util; - import android.annotation.SuppressLint; import android.app.ActivityManager; import android.app.Service; @@ -21,156 +20,21 @@ import android.text.TextUtils; import android.util.Log; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; import java.util.HashMap; -import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.Set; -import java.util.TreeSet; import java.util.concurrent.ConcurrentHashMap; /** *
- *     author: Blankj
+ *     author: blankj
  *     blog  : http://blankj.com
- *     time  : 2018/10/02
- *     desc  : utils about bus, and the site of
- *     https://github.com/Blankj/AndroidUtilCode/blob/master/utilcode/README-STATIC-BUS.md
- *     will help u.
+ *     time  : 2019/07/10
+ *     desc  : utils about messenger
  * 
*/ -public final class BusUtils { - - private static final Object NULL = new Object(); - private static final Map> SUBSCRIBERS_MAP = new HashMap<>(); - private static final Map> BUSES_MAP = new HashMap<>(); - private static final Set STICKIES = new HashSet<>(); - - private static Object injectShell(final String name, final Object[] objects) { - return NULL; - } - - public static T postStatic(final String name, final Object... objects) { - if (name == null || name.length() == 0) return null; - Object o = injectShell(name, objects); - com.blankj.utilcode.util.LogUtils.e("BusUtils"); - if (NULL.equals(o)) { - com.blankj.utilcode.util.LogUtils.e("BusUtils", "static bus of <" + name + "> didn\'t exist."); - return null; - } - return (T) o; - } - - - public static void register(final Object subscriber) { - if (subscriber == null) return; - Class aClass = subscriber.getClass(); - Set typeSubscribers = SUBSCRIBERS_MAP.get(aClass); - if (typeSubscribers == null) { - typeSubscribers = new HashSet<>(); - SUBSCRIBERS_MAP.put(aClass, typeSubscribers); - } - typeSubscribers.add(subscriber); - } - -// public static void postSticky(final String name, final Object... objects) { -// STICKIES.add(new Sticky(name, objects)); -// post(name, objects); -// } -// -// public static void removeSticky(final String name) { -// -// } - - public static void post(final String name, final Object... objects) { - if (name == null || name.length() == 0) return; - final Set buses = BUSES_MAP.get(name); - for (Bus bus : buses) { - Set subscribers = SUBSCRIBERS_MAP.get(bus.type); - if (subscribers == null || subscribers.isEmpty()) { - Log.e("BusUtils", "bus of <" + name + "{" + bus + "}> in didn\'t exist."); - continue; - } - for (Object subscriber : subscribers) { - injectShell2(subscriber, name, objects); - } - } - } - - private static void injectShell2(final Object subscriber, final String name, final Object[] objects) { - - } - - public static void unregister(final Object subscriber) { - if (subscriber == null) return; - Class aClass = subscriber.getClass(); - Set typeSubscribers = SUBSCRIBERS_MAP.get(aClass); - if (typeSubscribers == null || typeSubscribers.contains(subscriber)) { - Log.i("BusUtils", "Subscriber to unregister was not registered before: " + subscriber); - return; - } - typeSubscribers.remove(subscriber); - } - - private static void add(final String name, final Class type, final int priority) { - Set buses = BUSES_MAP.get(name); - if (buses == null) { - buses = new TreeSet<>(); - BUSES_MAP.put(name, buses); - } - buses.add(new Bus(type, priority)); - } - - @Target({ElementType.METHOD}) - @Retention(RetentionPolicy.CLASS) - public @interface Subscribe { - String name() default ""; - - int priority() default 0; - } - - static class Sticky { - String name; - Object[] params; - - Sticky(String name, Object[] params) { - this.name = name; - this.params = params; - } - } - - static class Bus implements Comparable { - - private Class type; - private int priority; - - Bus(Class type, int priority) { - this.type = type; - this.priority = priority; - } - - @Override - public int compareTo(@NonNull Bus o) { - if (o.priority != this.priority) return o.priority - this.priority; - return o.hashCode() - type.hashCode(); - } - - @Override - public String toString() { - return type.getName() + ": " + priority; - } - } - - - /////////////////////////////////////////////////////////////////////////// - // remote bus - /////////////////////////////////////////////////////////////////////////// - +public class MessengerUtils { private static ConcurrentHashMap subscribers = new ConcurrentHashMap<>(); diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/MetaDataUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/NetworkUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/NetworkUtils.java similarity index 99% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/NetworkUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/NetworkUtils.java index c49224f93a..caa754eec3 100644 --- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/NetworkUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/NetworkUtils.java @@ -50,7 +50,7 @@ public enum NetworkType { NETWORK_4G, NETWORK_3G, NETWORK_2G, - NETWORK_UNKNOWN, + NETWORK_UNKNOWN } /** diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/NotificationUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/NotificationUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/NotificationUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/NotificationUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ObjectUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ObjectUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/ObjectUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/ObjectUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/PathUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/PathUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/PathUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/PathUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/PermissionUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/PermissionUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/PermissionUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/PermissionUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/PhoneUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/PhoneUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/PhoneUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/PhoneUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ProcessUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ProcessUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/ProcessUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/ProcessUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ReflectUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ReflectUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/ReflectUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/ReflectUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/RegexUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/RegexUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/RegexUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/RegexUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ResourceUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ResourceUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/ResourceUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/ResourceUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/RomUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/RomUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/RomUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/RomUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SDCardUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/SDCardUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/SDCardUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/SDCardUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPStaticUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/SPStaticUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/SPStaticUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/SPStaticUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SPUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/SPUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/SPUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/SPUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ScreenUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ScreenUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/ScreenUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/ScreenUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ServiceUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ServiceUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/ServiceUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/ServiceUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ShellUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ShellUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/ShellUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/ShellUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SizeUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/SizeUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/SizeUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/SizeUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/SnackbarUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/SpanUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/SpanUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/SpanUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/SpanUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/StringUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/StringUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/StringUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/StringUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ThreadUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ThreadUtils.java similarity index 86% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/ThreadUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/ThreadUtils.java index 76aae62bda..6dcb278d02 100644 --- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ThreadUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ThreadUtils.java @@ -1,5 +1,6 @@ package com.blankj.utilcode.util; +import android.annotation.SuppressLint; import android.os.Handler; import android.os.Looper; import android.support.annotation.IntRange; @@ -9,12 +10,13 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Timer; +import java.util.TimerTask; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.SynchronousQueue; +import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.ThreadFactory; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -31,12 +33,12 @@ */ public final class ThreadUtils { - private static final HashMap> TYPE_PRIORITY_POOLS = new HashMap<>(); - private static final Map TASK_SCHEDULED = new HashMap<>(); + private static final Map> TYPE_PRIORITY_POOLS = new ConcurrentHashMap<>(); - private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors(); + private static final Map TASK_TIMERTASK = new ConcurrentHashMap<>(); - private static final ScheduledExecutorService SCHEDULED = Executors.newScheduledThreadPool(CPU_COUNT, new UtilsThreadFactory("scheduled", Thread.MAX_PRIORITY)); + private static final int CPU_COUNT = Runtime.getRuntime().availableProcessors(); + private static final Timer TIMER = new Timer(); private static final byte TYPE_SINGLE = -1; private static final byte TYPE_CACHED = -2; @@ -45,7 +47,6 @@ public final class ThreadUtils { private static Executor sDeliver; - /** * Return whether the thread is the main thread. * @@ -309,13 +310,7 @@ public static void executeByFixedAtFixRate(@IntRange(from = 1) final int siz * @param The type of the task's result. */ public static void executeBySingle(final Task task) { - getScheduledByTask(task).execute(new Runnable() { - @Override - public void run() { - getPoolByTypeAndPriority(TYPE_SINGLE).execute(task); - } - }); -// execute(getPoolByTypeAndPriority(TYPE_SINGLE), task); + getPoolByTypeAndPriority(TYPE_SINGLE).execute(task); } /** @@ -887,27 +882,22 @@ public static void setDeliver(final Executor deliver) { } private static void execute(final ExecutorService pool, final Task task) { - executeWithDelay(pool, task, 0, TimeUnit.MILLISECONDS); + pool.execute(task); } private static void executeWithDelay(final ExecutorService pool, final Task task, final long delay, final TimeUnit unit) { - if (delay <= 0) { - getScheduledByTask(task).execute(new Runnable() { - @Override - public void run() { - pool.execute(task); - } - }); - } else { - getScheduledByTask(task).schedule(new Runnable() { - @Override - public void run() { - pool.execute(task); - } - }, delay, unit); + TimerTask timerTask = new TimerTask() { + @Override + public void run() { + pool.execute(task); + } + }; + TIMER.schedule(timerTask, unit.toMillis(delay)); + synchronized (TASK_TIMERTASK) { + TASK_TIMERTASK.put(task, timerTask); } } @@ -917,29 +907,20 @@ private static void executeAtFixedRate(final ExecutorService pool, final long period, final TimeUnit unit) { task.setSchedule(true); - getScheduledByTask(task).scheduleAtFixedRate(new Runnable() { + TimerTask timerTask = new TimerTask() { @Override public void run() { pool.execute(task); } - }, initialDelay, period, unit); - } - - private synchronized static ScheduledExecutorService getScheduledByTask(final Task task) { - ScheduledExecutorService scheduled = TASK_SCHEDULED.get(task); - if (scheduled == null) { - UtilsThreadFactory factory = new UtilsThreadFactory("scheduled", Thread.MAX_PRIORITY); - scheduled = Executors.newScheduledThreadPool(1, factory); - TASK_SCHEDULED.put(task, scheduled); - } - return scheduled; + }; + TIMER.scheduleAtFixedRate(timerTask, unit.toMillis(initialDelay), unit.toMillis(period)); } - private synchronized static void removeScheduleByTask(final Task task) { - ScheduledExecutorService scheduled = TASK_SCHEDULED.get(task); - if (scheduled != null) { - TASK_SCHEDULED.remove(task); - scheduled.shutdownNow(); + private synchronized static void cancelTimerTask(final Task task) { + TimerTask timerTask = TASK_TIMERTASK.get(task); + if (timerTask != null) { + TASK_TIMERTASK.remove(task); + timerTask.cancel(); } } @@ -947,61 +928,28 @@ private static ExecutorService getPoolByTypeAndPriority(final int type) { return getPoolByTypeAndPriority(type, Thread.NORM_PRIORITY); } + @SuppressLint("UseSparseArrays") private synchronized static ExecutorService getPoolByTypeAndPriority(final int type, final int priority) { ExecutorService pool; Map priorityPools = TYPE_PRIORITY_POOLS.get(type); if (priorityPools == null) { priorityPools = new HashMap<>(); - pool = createPoolByTypeAndPriority(type, priority); + pool = ThreadPoolExecutor4Util.createPool(type, priority); priorityPools.put(priority, pool); - TYPE_PRIORITY_POOLS.put(type, priorityPools); + synchronized (TYPE_PRIORITY_POOLS) { + TYPE_PRIORITY_POOLS.put(type, priorityPools); + } } else { pool = priorityPools.get(priority); if (pool == null) { - pool = createPoolByTypeAndPriority(type, priority); + pool = ThreadPoolExecutor4Util.createPool(type, priority); priorityPools.put(priority, pool); } } return pool; } - private static ExecutorService createPoolByTypeAndPriority(final int type, final int priority) { - switch (type) { - case TYPE_SINGLE: - return new ThreadPoolExecutor(1, 1, - 0L, TimeUnit.MILLISECONDS, - new LinkedBlockingQueue(), - new UtilsThreadFactory("single", priority, true)); - case TYPE_CACHED: - return new ThreadPoolExecutor(1, Math.max(CPU_COUNT * 8, 64), - 60L, TimeUnit.SECONDS, - new SynchronousQueue(), - new UtilsThreadFactory("cached", priority, false), - new ThreadPoolExecutor.CallerRunsPolicy()); - case TYPE_IO: - return new ThreadPoolExecutor(2 * CPU_COUNT + 1, 2 * CPU_COUNT + 1, - 30, TimeUnit.SECONDS, - new LinkedBlockingQueue(128), - new UtilsThreadFactory("io", priority) - ); - case TYPE_CPU: - return new ThreadPoolExecutor(CPU_COUNT + 1, 2 * CPU_COUNT + 1, - 30, TimeUnit.SECONDS, - new LinkedBlockingQueue(128), - new UtilsThreadFactory("cpu", priority) - ); - default: - return new ThreadPoolExecutor(type, type, - 0L, TimeUnit.MILLISECONDS, - new LinkedBlockingQueue(128), - new UtilsThreadFactory("fixed(" + type + ")", priority), - new - ThreadPoolExecutor.DiscardOldestPolicy() - ); - } - } - - private static Executor getDeliver() { + private static Executor getGlobalDeliver() { if (sDeliver == null) { sDeliver = new Executor() { private final Handler mHandler = new Handler(Looper.getMainLooper()); @@ -1015,6 +963,158 @@ public void execute(@NonNull Runnable command) { return sDeliver; } + static final class ThreadPoolExecutor4Util extends ThreadPoolExecutor { + + private static ExecutorService createPool(final int type, final int priority) { + switch (type) { + case TYPE_SINGLE: + return new ThreadPoolExecutor4Util(1, 1, + 0L, TimeUnit.MILLISECONDS, + new LinkedBlockingQueue4Util(), + new UtilsThreadFactory("single", priority) + ); + case TYPE_CACHED: + ThreadPoolExecutor4Util cached = new ThreadPoolExecutor4Util(128, 128, + 60L, TimeUnit.SECONDS, + new LinkedBlockingQueue4Util(), + new UtilsThreadFactory("cached", priority) + ); + // cached threads will be recycled + cached.allowCoreThreadTimeOut(true); + return cached; + case TYPE_IO: + return new ThreadPoolExecutor4Util(2 * CPU_COUNT + 1, 2 * CPU_COUNT + 1, + 30, TimeUnit.SECONDS, + new LinkedBlockingQueue4Util(), + new UtilsThreadFactory("io", priority) + ); + case TYPE_CPU: + return new ThreadPoolExecutor4Util(CPU_COUNT + 1, 2 * CPU_COUNT + 1, + 30, TimeUnit.SECONDS, + new LinkedBlockingQueue4Util(), + new UtilsThreadFactory("cpu", priority) + ); + default: + return new ThreadPoolExecutor4Util(type, type, + 0L, TimeUnit.MILLISECONDS, + new LinkedBlockingQueue4Util(), + new UtilsThreadFactory("fixed(" + type + ")", priority) + ); + } + } + + private final AtomicInteger mSubmittedCount = new AtomicInteger(); + + private LinkedBlockingQueue4Util mWorkQueue; + + ThreadPoolExecutor4Util(int corePoolSize, int maximumPoolSize, + long keepAliveTime, TimeUnit unit, + LinkedBlockingQueue4Util workQueue, + ThreadFactory threadFactory) { + super(corePoolSize, maximumPoolSize, + keepAliveTime, unit, + workQueue, + threadFactory + ); + workQueue.mPool = this; + mWorkQueue = workQueue; + } + + private int getSubmittedCount() { + return mSubmittedCount.get(); + } + + @Override + protected void afterExecute(Runnable r, Throwable t) { + mSubmittedCount.decrementAndGet(); + super.afterExecute(r, t); + } + + @Override + public void execute(@NonNull Runnable command) { + if (this.isShutdown()) return; + mSubmittedCount.incrementAndGet(); + try { + super.execute(command); + } catch (RejectedExecutionException ignore) { + Log.e("ThreadUtils", "This will not happen!"); + mWorkQueue.offer(command); + } catch (Throwable t) { + mSubmittedCount.decrementAndGet(); + } + } + } + + private static final class LinkedBlockingQueue4Util extends LinkedBlockingQueue { + + private volatile ThreadPoolExecutor4Util mPool; + + private int mCapacity = Integer.MAX_VALUE; + + LinkedBlockingQueue4Util() { + super(); + } + + LinkedBlockingQueue4Util(int capacity) { + super(); + mCapacity = capacity; + } + + @Override + public boolean offer(@NonNull Runnable runnable) { + if (mCapacity <= size() && + mPool != null && mPool.getPoolSize() < mPool.getMaximumPoolSize()) { + // create a non-core thread + return false; + } + return super.offer(runnable); + } + } + + private static final class UtilsThreadFactory extends AtomicLong + implements ThreadFactory { + private static final AtomicInteger POOL_NUMBER = new AtomicInteger(1); + private static final long serialVersionUID = -9209200509960368598L; + private final String namePrefix; + private final int priority; + private final boolean isDaemon; + + UtilsThreadFactory(String prefix, int priority) { + this(prefix, priority, false); + } + + UtilsThreadFactory(String prefix, int priority, boolean isDaemon) { + namePrefix = prefix + "-pool-" + + POOL_NUMBER.getAndIncrement() + + "-thread-"; + this.priority = priority; + this.isDaemon = isDaemon; + } + + @Override + public Thread newThread(@NonNull Runnable r) { + Thread t = new Thread(r, namePrefix + getAndIncrement()) { + @Override + public void run() { + try { + super.run(); + } catch (Throwable t) { + Log.e("ThreadUtils", "Request threw uncaught throwable", t); + } + } + }; + t.setDaemon(isDaemon); + t.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { + @Override + public void uncaughtException(Thread t, Throwable e) { + System.out.println(e); + } + }); + t.setPriority(priority); + return t; + } + } + public abstract static class SimpleTask extends Task { @Override @@ -1029,91 +1129,6 @@ public void onFail(Throwable t) { } -// private static final class FutureTask4UtilCode extends FutureTask { -// -// private boolean isSchedule; -// -// public FutureTask4UtilCode(@NonNull Callable callable) { -// super(callable); -// } -// -// @Override -// public void run() { -// super.runAndReset(); -// } -// -// public void setSchedule(boolean schedule) { -// isSchedule = schedule; -// } -// } -// -// public abstract static class Task implements Runnable { -// -// public abstract T doInBackground() throws Throwable; -// -// public abstract void onSuccess(T result); -// -// public abstract void onCancel(); -// -// public abstract void onFail(Throwable t); -// -// private FutureTask4UtilCode mFutureTask; -// -// public Task() { -// mFutureTask = new FutureTask4UtilCode(new Callable() { -// @Override -// public T call() { -// try { -// final T result = doInBackground(); -// getDeliver().execute(new Runnable() { -// @Override -// public void run() { -// onSuccess(result); -// removeScheduleByTask(Task.this); -// } -// }); -// } catch (final InterruptedException ignore) { -// System.out.println(ignore); -// } catch (final Throwable throwable) { -// getDeliver().execute(new Runnable() { -// @Override -// public void run() { -// onFail(throwable); -// removeScheduleByTask(Task.this); -// } -// }); -// } -// return null; -// } -// }); -// } -// -// @Override -// public void run() { -// mFutureTask.run(); -// } -// -// public void cancel() { -// cancel(true); -// } -// -// public void cancel(boolean mayInterruptIfRunning) { -// mFutureTask.cancel(true); -// } -// -// public boolean isCanceled() { -// return mFutureTask.isCancelled(); -// } -// -// public boolean isDone() { -// return mFutureTask.isDone(); -// } -// -// private void setSchedule(boolean schedule) { -// mFutureTask.setSchedule(schedule); -// } -// } - public abstract static class Task implements Runnable { private static final int NEW = 0; @@ -1127,6 +1142,8 @@ public abstract static class Task implements Runnable { private volatile boolean isSchedule; private volatile Thread runner; + private Executor deliver; + public abstract T doInBackground() throws Throwable; @@ -1161,7 +1178,7 @@ public void run() { @Override public void run() { onSuccess(result); - removeScheduleByTask(Task.this); + cancelTimerTask(Task.this); } }); } @@ -1175,7 +1192,7 @@ public void run() { @Override public void run() { onFail(throwable); - removeScheduleByTask(Task.this); + cancelTimerTask(Task.this); } }); } @@ -1201,7 +1218,7 @@ public void cancel(boolean mayInterruptIfRunning) { @Override public void run() { onCancel(); - removeScheduleByTask(Task.this); + cancelTimerTask(Task.this); } }); } @@ -1214,52 +1231,20 @@ public boolean isDone() { return state != NEW; } - private void setSchedule(boolean isSchedule) { - this.isSchedule = isSchedule; + public Task setDeliver(Executor deliver) { + this.deliver = deliver; + return this; } - } - private static final class UtilsThreadFactory extends AtomicLong - implements ThreadFactory { - private static final AtomicInteger POOL_NUMBER = new AtomicInteger(1); - private static final long serialVersionUID = -9209200509960368598L; - private final String namePrefix; - private final int priority; - private final boolean isDaemon; - - UtilsThreadFactory(String prefix, int priority) { - this(prefix, priority, false); - } - - UtilsThreadFactory(String prefix, int priority, boolean isDaemon) { - namePrefix = prefix + "-pool-" + - POOL_NUMBER.getAndIncrement() + - "-thread-"; - this.priority = priority; - this.isDaemon = isDaemon; + private void setSchedule(boolean isSchedule) { + this.isSchedule = isSchedule; } - @Override - public Thread newThread(@NonNull Runnable r) { - Thread t = new Thread(r, namePrefix + getAndIncrement()) { - @Override - public void run() { - try { - super.run(); - } catch (Throwable t) { - Log.e("ThreadUtils", "Request threw uncaught throwable", t); - } - } - }; - t.setDaemon(isDaemon); - t.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { - @Override - public void uncaughtException(Thread t, Throwable e) { - System.out.println(e); - } - }); - t.setPriority(priority); - return t; + private Executor getDeliver() { + if (deliver == null) { + return getGlobalDeliver(); + } + return deliver; } } } diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ThrowableUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ThrowableUtils.java similarity index 100% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/ThrowableUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/ThrowableUtils.java diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/TimeUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/TimeUtils.java similarity index 99% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/TimeUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/TimeUtils.java index ce5f9c50a0..e84e269a52 100644 --- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/TimeUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/TimeUtils.java @@ -1388,8 +1388,8 @@ public static String getChineseZodiac(final int year) { return CHINESE_ZODIAC[year % 12]; } - private static final int[] ZODIAC_FLAGS = {20, 19, 21, 21, 21, 22, 23, 23, 23, 24, 23, 22}; - private static final String[] ZODIAC = { + private static final int[] ZODIAC_FLAGS = {20, 19, 21, 21, 21, 22, 23, 23, 23, 24, 23, 22}; + private static final String[] ZODIAC = { "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "魔羯座" }; diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ToastUtils.java similarity index 98% rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/ToastUtils.java index fe7b7ff28a..b9c9861d19 100644 --- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ToastUtils.java +++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ToastUtils.java @@ -26,6 +26,13 @@ import android.widget.Toast; import java.lang.reflect.Field; +import java.nio.ByteBuffer; +import java.nio.channels.AsynchronousFileChannel; +import java.nio.channels.CompletionHandler; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; +import java.util.concurrent.Future; /** *
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/UriUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/UriUtils.java
similarity index 100%
rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/UriUtils.java
rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/UriUtils.java
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/Utils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/Utils.java
similarity index 88%
rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/Utils.java
rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/Utils.java
index 0bc7735160..fbed341c15 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/Utils.java
+++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/Utils.java
@@ -15,6 +15,8 @@
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.View;
+import android.view.Window;
+import android.view.WindowManager;
 import android.view.inputmethod.InputMethodManager;
 
 import java.io.BufferedReader;
@@ -59,7 +61,7 @@ public final class Utils {
 
     private static final ActivityLifecycleImpl ACTIVITY_LIFECYCLE = new ActivityLifecycleImpl();
     private static final ExecutorService       UTIL_POOL          = Executors.newFixedThreadPool(3);
-    static final         Handler               UTIL_HANDLER       = new Handler(Looper.getMainLooper());
+    private static final Handler               UTIL_HANDLER       = new Handler(Looper.getMainLooper());
 
     @SuppressLint("StaticFieldLeak")
     private static Application sApplication;
@@ -177,6 +179,28 @@ static String getCurrentProcessName() {
         return name;
     }
 
+    static void fixSoftInputLeaks(final Window window) {
+        InputMethodManager imm =
+                (InputMethodManager) Utils.getApp().getSystemService(Context.INPUT_METHOD_SERVICE);
+        if (imm == null) return;
+        String[] leakViews = new String[]{"mLastSrvView", "mCurRootView", "mServedView", "mNextServedView"};
+        for (String leakView : leakViews) {
+            try {
+                Field leakViewField = InputMethodManager.class.getDeclaredField(leakView);
+                if (leakViewField == null) continue;
+                if (!leakViewField.isAccessible()) {
+                    leakViewField.setAccessible(true);
+                }
+                Object obj = leakViewField.get(imm);
+                if (!(obj instanceof View)) continue;
+                View view = (View) obj;
+                if (view.getRootView() == window.getDecorView().getRootView()) {
+                    leakViewField.set(imm, null);
+                }
+            } catch (Throwable ignore) {/**/}
+        }
+    }
+
     ///////////////////////////////////////////////////////////////////////////
     // private method
     ///////////////////////////////////////////////////////////////////////////
@@ -305,16 +329,19 @@ public void onActivityStarted(Activity activity) {
         }
 
         @Override
-        public void onActivityResumed(Activity activity) {
+        public void onActivityResumed(final Activity activity) {
             setTopActivity(activity);
             if (mIsBackground) {
                 mIsBackground = false;
                 postStatus(true);
             }
+            processHideSoftInputOnActivityDestroy(activity, false);
         }
 
         @Override
-        public void onActivityPaused(Activity activity) {/**/}
+        public void onActivityPaused(Activity activity) {
+
+        }
 
         @Override
         public void onActivityStopped(Activity activity) {
@@ -327,6 +354,7 @@ public void onActivityStopped(Activity activity) {
                     postStatus(false);
                 }
             }
+            processHideSoftInputOnActivityDestroy(activity, true);
         }
 
         @Override
@@ -336,7 +364,7 @@ public void onActivitySaveInstanceState(Activity activity, Bundle outState) {/**
         public void onActivityDestroyed(Activity activity) {
             mActivityList.remove(activity);
             consumeOnActivityDestroyedListener(activity);
-            fixSoftInputLeaks(activity);
+            fixSoftInputLeaks(activity.getWindow());
         }
 
         Activity getTopActivity() {
@@ -386,6 +414,29 @@ void addOnActivityDestroyedListener(final Activity activity,
             listeners.add(listener);
         }
 
+        /**
+         * To solve close keyboard when activity onDestroy.
+         * The preActivity set windowSoftInputMode will prevent
+         * the keyboard from closing when curActivity onDestroy.
+         */
+        private void processHideSoftInputOnActivityDestroy(final Activity activity, boolean isSave) {
+            if (isSave) {
+                final WindowManager.LayoutParams attrs = activity.getWindow().getAttributes();
+                final int softInputMode = attrs.softInputMode;
+                activity.getWindow().getDecorView().setTag(-123, softInputMode);
+                activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
+            } else {
+                final Object tag = activity.getWindow().getDecorView().getTag(-123);
+                if (!(tag instanceof Integer)) return;
+                Utils.runOnUiThreadDelayed(new Runnable() {
+                    @Override
+                    public void run() {
+                        activity.getWindow().setSoftInputMode(((Integer) tag));
+                    }
+                }, 100);
+            }
+        }
+
         private void postStatus(final boolean isForeground) {
             if (mStatusListenerMap.isEmpty()) return;
             for (OnAppStatusChangedListener onAppStatusChangedListener : mStatusListenerMap.values()) {
@@ -457,29 +508,6 @@ private Activity getTopActivityByReflect() {
             }
             return null;
         }
-
-        private static void fixSoftInputLeaks(final Activity activity) {
-            if (activity == null) return;
-            InputMethodManager imm =
-                    (InputMethodManager) Utils.getApp().getSystemService(Context.INPUT_METHOD_SERVICE);
-            if (imm == null) return;
-            String[] leakViews = new String[]{"mLastSrvView", "mCurRootView", "mServedView", "mNextServedView"};
-            for (String leakView : leakViews) {
-                try {
-                    Field leakViewField = InputMethodManager.class.getDeclaredField(leakView);
-                    if (leakViewField == null) continue;
-                    if (!leakViewField.isAccessible()) {
-                        leakViewField.setAccessible(true);
-                    }
-                    Object obj = leakViewField.get(imm);
-                    if (!(obj instanceof View)) continue;
-                    View view = (View) obj;
-                    if (view.getRootView() == activity.getWindow().getDecorView().getRootView()) {
-                        leakViewField.set(imm, null);
-                    }
-                } catch (Throwable ignore) {/**/}
-            }
-        }
     }
 
     public static final class FileProvider4UtilCode extends FileProvider {
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/VibrateUtils.java
similarity index 100%
rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/VibrateUtils.java
rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/VibrateUtils.java
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ViewUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ViewUtils.java
similarity index 68%
rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/ViewUtils.java
rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/ViewUtils.java
index 19d69858b9..996e038611 100644
--- a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ViewUtils.java
+++ b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ViewUtils.java
@@ -13,10 +13,23 @@
  */
 public class ViewUtils {
 
+    /**
+     * Set the enabled state of this view.
+     *
+     * @param view    The view.
+     * @param enabled True to enabled, false otherwise.
+     */
     public static void setViewEnabled(View view, boolean enabled) {
         setViewEnabled(view, enabled, (View) null);
     }
 
+    /**
+     * Set the enabled state of this view.
+     *
+     * @param view     The view.
+     * @param enabled  True to enabled, false otherwise.
+     * @param excludes The excludes.
+     */
     public static void setViewEnabled(View view, boolean enabled, View... excludes) {
         if (view == null) return;
         if (excludes != null) {
@@ -34,6 +47,21 @@ public static void setViewEnabled(View view, boolean enabled, View... excludes)
         view.setEnabled(enabled);
     }
 
+    /**
+     * @param runnable The runnable
+     */
+    public static void runOnUiThread(final Runnable runnable) {
+        Utils.runOnUiThread(runnable);
+    }
+
+    /**
+     * @param runnable    The runnable.
+     * @param delayMillis The delay (in milliseconds) until the Runnable will be executed.
+     */
+    public static void runOnUiThreadDelayed(final Runnable runnable, long delayMillis) {
+        Utils.runOnUiThreadDelayed(runnable, delayMillis);
+    }
+
     /**
      * 用于解决ScrollView嵌套ListView/GridView/WebView/RecyclerView等无法置顶问题
      *
diff --git a/utilcode/lib/src/main/java/com/blankj/utilcode/util/ZipUtils.java b/lib/utilcode/src/main/java/com/blankj/utilcode/util/ZipUtils.java
similarity index 100%
rename from utilcode/lib/src/main/java/com/blankj/utilcode/util/ZipUtils.java
rename to lib/utilcode/src/main/java/com/blankj/utilcode/util/ZipUtils.java
diff --git a/utilcode/lib/src/main/res/values-v21/styles.xml b/lib/utilcode/src/main/res/values-v21/styles.xml
similarity index 100%
rename from utilcode/lib/src/main/res/values-v21/styles.xml
rename to lib/utilcode/src/main/res/values-v21/styles.xml
diff --git a/utilcode/lib/src/main/res/xml/util_code_provider_paths.xml b/lib/utilcode/src/main/res/xml/util_code_provider_paths.xml
similarity index 100%
rename from utilcode/lib/src/main/res/xml/util_code_provider_paths.xml
rename to lib/utilcode/src/main/res/xml/util_code_provider_paths.xml
diff --git a/lib/utilcode/src/test/java/com/blankj/utilcode/util/BaseTest.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/BaseTest.java
new file mode 100644
index 0000000000..06c360cffc
--- /dev/null
+++ b/lib/utilcode/src/test/java/com/blankj/utilcode/util/BaseTest.java
@@ -0,0 +1,42 @@
+package com.blankj.utilcode.util;
+
+
+import android.support.annotation.NonNull;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowLog;
+
+import java.util.concurrent.Executor;
+
+/**
+ * 
+ *     author: Blankj
+ *     blog  : http://blankj.com
+ *     time  : 2018/08/03
+ *     desc  :
+ * 
+ */ +@RunWith(RobolectricTestRunner.class) +@Config(manifest = Config.NONE, shadows = {ShadowLog.class}) +public class BaseTest { + + public BaseTest() { + ShadowLog.stream = System.out; + ThreadUtils.setDeliver(new Executor() { + @Override + public void execute(@NonNull Runnable command) { + command.run(); + } + }); + Utils.init(RuntimeEnvironment.application); + } + + @Test + public void test() throws Exception { + + } +} diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/CacheDiskStaticUtilsTest.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/CacheDiskStaticUtilsTest.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/CacheDiskStaticUtilsTest.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/CacheDiskStaticUtilsTest.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/CacheDiskUtilsTest.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/CacheDiskUtilsTest.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/CacheDiskUtilsTest.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/CacheDiskUtilsTest.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/CacheDoubleStaticUtilsTest.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/CacheDoubleStaticUtilsTest.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/CacheDoubleStaticUtilsTest.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/CacheDoubleStaticUtilsTest.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/CacheDoubleUtilsTest.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/CacheDoubleUtilsTest.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/CacheDoubleUtilsTest.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/CacheDoubleUtilsTest.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/CacheMemoryStaticUtilsTest.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/CacheMemoryStaticUtilsTest.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/CacheMemoryStaticUtilsTest.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/CacheMemoryStaticUtilsTest.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/CacheMemoryUtilsTest.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/CacheMemoryUtilsTest.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/CacheMemoryUtilsTest.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/CacheMemoryUtilsTest.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/CloneUtilsTest.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/CloneUtilsTest.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/CloneUtilsTest.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/CloneUtilsTest.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/ColorUtilsTest.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/ColorUtilsTest.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/ColorUtilsTest.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/ColorUtilsTest.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/ConvertUtilsTest.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/ConvertUtilsTest.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/ConvertUtilsTest.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/ConvertUtilsTest.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/EncodeUtilsTest.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/EncodeUtilsTest.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/EncodeUtilsTest.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/EncodeUtilsTest.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/EncryptUtilsTest.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/EncryptUtilsTest.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/EncryptUtilsTest.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/EncryptUtilsTest.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/FileIOUtilsTest.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/FileIOUtilsTest.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/FileIOUtilsTest.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/FileIOUtilsTest.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/FileUtilsTest.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/FileUtilsTest.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/FileUtilsTest.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/FileUtilsTest.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/GsonUtilsTest.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/GsonUtilsTest.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/GsonUtilsTest.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/GsonUtilsTest.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/LogUtilsTest.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/LogUtilsTest.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/LogUtilsTest.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/LogUtilsTest.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/ObjectUtilsTest.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/ObjectUtilsTest.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/ObjectUtilsTest.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/ObjectUtilsTest.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/RegexUtilsTest.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/RegexUtilsTest.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/RegexUtilsTest.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/RegexUtilsTest.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/StringUtilsTest.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/StringUtilsTest.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/StringUtilsTest.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/StringUtilsTest.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/TestConfig.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/TestConfig.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/TestConfig.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/TestConfig.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/ThreadUtilsTest.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/ThreadUtilsTest.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/ThreadUtilsTest.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/ThreadUtilsTest.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/TimeUtilsTest.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/TimeUtilsTest.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/TimeUtilsTest.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/TimeUtilsTest.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/ZipUtilsTest.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/ZipUtilsTest.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/ZipUtilsTest.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/ZipUtilsTest.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/PrivateConstructors.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/PrivateConstructors.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/PrivateConstructors.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/PrivateConstructors.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/ReflectUtilsTest.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/ReflectUtilsTest.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/ReflectUtilsTest.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/ReflectUtilsTest.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/Test1.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/Test1.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/Test1.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/Test1.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/Test10.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/Test10.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/Test10.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/Test10.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/Test2.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/Test2.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/Test2.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/Test2.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/Test3.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/Test3.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/Test3.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/Test3.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/Test4.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/Test4.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/Test4.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/Test4.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/Test5.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/Test5.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/Test5.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/Test5.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/Test6.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/Test6.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/Test6.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/Test6.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/Test7.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/Test7.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/Test7.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/Test7.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/Test8.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/Test8.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/Test8.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/Test8.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/Test9.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/Test9.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/Test9.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/Test9.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/TestHierarchicalMethodsBase.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/TestHierarchicalMethodsBase.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/TestHierarchicalMethodsBase.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/TestHierarchicalMethodsBase.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/TestHierarchicalMethodsSubclass.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/TestHierarchicalMethodsSubclass.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/TestHierarchicalMethodsSubclass.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/TestHierarchicalMethodsSubclass.java diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/TestPrivateStaticFinal.java b/lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/TestPrivateStaticFinal.java similarity index 100% rename from utilcode/lib/src/test/java/com/blankj/utilcode/util/reflect/TestPrivateStaticFinal.java rename to lib/utilcode/src/test/java/com/blankj/utilcode/util/reflect/TestPrivateStaticFinal.java diff --git a/utilcode/lib/src/test/res/encrypt/MD5.txt b/lib/utilcode/src/test/res/encrypt/MD5.txt similarity index 100% rename from utilcode/lib/src/test/res/encrypt/MD5.txt rename to lib/utilcode/src/test/res/encrypt/MD5.txt diff --git a/utilcode/lib/src/test/res/file/GBK.txt b/lib/utilcode/src/test/res/file/GBK.txt similarity index 100% rename from utilcode/lib/src/test/res/file/GBK.txt rename to lib/utilcode/src/test/res/file/GBK.txt diff --git a/utilcode/lib/src/test/res/file/UTF16BE.txt b/lib/utilcode/src/test/res/file/UTF16BE.txt similarity index 100% rename from utilcode/lib/src/test/res/file/UTF16BE.txt rename to lib/utilcode/src/test/res/file/UTF16BE.txt diff --git a/utilcode/lib/src/test/res/file/UTF8.txt b/lib/utilcode/src/test/res/file/UTF8.txt similarity index 100% rename from utilcode/lib/src/test/res/file/UTF8.txt rename to lib/utilcode/src/test/res/file/UTF8.txt diff --git a/utilcode/lib/src/test/res/file/Unicode.txt b/lib/utilcode/src/test/res/file/Unicode.txt similarity index 100% rename from utilcode/lib/src/test/res/file/Unicode.txt rename to lib/utilcode/src/test/res/file/Unicode.txt diff --git a/utilcode/lib/src/test/res/file/recuresive/UTF8.txt b/lib/utilcode/src/test/res/file/recuresive/UTF8.txt similarity index 100% rename from utilcode/lib/src/test/res/file/recuresive/UTF8.txt rename to lib/utilcode/src/test/res/file/recuresive/UTF8.txt diff --git a/utilcode/lib/src/test/res/zip/test.txt b/lib/utilcode/src/test/res/zip/test.txt similarity index 100% rename from utilcode/lib/src/test/res/zip/test.txt rename to lib/utilcode/src/test/res/zip/test.txt diff --git a/utilcode/lib/src/test/res/zip/testDir/test.txt b/lib/utilcode/src/test/res/zip/testDir/test.txt similarity index 100% rename from utilcode/lib/src/test/res/zip/testDir/test.txt rename to lib/utilcode/src/test/res/zip/testDir/test.txt diff --git "a/utilcode/lib/src/test/res/zip/\346\265\213\350\257\225.txt" "b/lib/utilcode/src/test/res/zip/\346\265\213\350\257\225.txt" similarity index 100% rename from "utilcode/lib/src/test/res/zip/\346\265\213\350\257\225.txt" rename to "lib/utilcode/src/test/res/zip/\346\265\213\350\257\225.txt" diff --git "a/utilcode/lib/src/test/res/zip/\346\265\213\350\257\225\346\226\207\344\273\266\345\244\271/\346\265\213\350\257\225.txt" "b/lib/utilcode/src/test/res/zip/\346\265\213\350\257\225\346\226\207\344\273\266\345\244\271/\346\265\213\350\257\225.txt" similarity index 100% rename from "utilcode/lib/src/test/res/zip/\346\265\213\350\257\225\346\226\207\344\273\266\345\244\271/\346\265\213\350\257\225.txt" rename to "lib/utilcode/src/test/res/zip/\346\265\213\350\257\225\346\226\207\344\273\266\345\244\271/\346\265\213\350\257\225.txt" diff --git a/plugin/api-gradle-plugin/.gitignore b/plugin/api-gradle-plugin/.gitignore new file mode 100755 index 0000000000..42afabfd2a --- /dev/null +++ b/plugin/api-gradle-plugin/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/plugin/api-gradle-plugin/CHANGELOG.md b/plugin/api-gradle-plugin/CHANGELOG.md new file mode 100644 index 0000000000..18e81dfdb9 --- /dev/null +++ b/plugin/api-gradle-plugin/CHANGELOG.md @@ -0,0 +1,4 @@ +# Change Log + +## v1.0(2019/07/) +发布初版本 \ No newline at end of file diff --git a/plugin/api-gradle-plugin/build.gradle b/plugin/api-gradle-plugin/build.gradle new file mode 100755 index 0000000000..7b856d4d8b --- /dev/null +++ b/plugin/api-gradle-plugin/build.gradle @@ -0,0 +1,66 @@ +plugins { + id 'com.gradle.plugin-publish' version "0.10.0" //for pluginPublish.gradle +} + +apply { + plugin "groovy" + plugin "java-gradle-plugin" + from "${rootDir.path}/gradle/upload/pluginPublish.gradle" + if (Config.depConfig.plugin_api.useLocal) { + plugin "maven" + } else { + plugin "com.github.dcendents.android-maven" + plugin "com.jfrog.bintray" + from "${rootDir.path}/gradle/upload/bintrayUploadJava.gradle" + } +} + +gradlePlugin { + plugins { + busPlugin { + id = 'com.blankj.api' + implementationClass = 'com.blankj.api.ApiPlugin' + } + } +} + +dependencies { + implementation "com.android.tools.build:gradle:3.4.1" + implementation "com.android.tools.build:gradle-api:3.4.1" + + implementation Config.depConfig.commons_io.dep + implementation gradleApi() + implementation localGroovy() + + testImplementation Config.depConfig.junit.dep +} + +sourceSets { + main { + groovy { + srcDirs += 'src/main/java' + } + } + + test { + groovy { + srcDirs += 'src/test/java' + } + } +} + +group = Config.depConfig.plugin_api.groupId +version = Config.depConfig.plugin_api.version + +if (Config.depConfig.plugin_api.useLocal) { + uploadArchives { + repositories { + mavenDeployer { + repository(url: uri(new File(project.rootDir.getPath() + "/maven/api"))) + } + } + } +} + +//./gradlew api-gradle-plugin:bintrayUpload +//./gradlew publishPlugins diff --git a/bus-gradle-plugin/project.properties b/plugin/api-gradle-plugin/project.properties similarity index 66% rename from bus-gradle-plugin/project.properties rename to plugin/api-gradle-plugin/project.properties index 9e1b5abbda..cb16a17452 100644 --- a/bus-gradle-plugin/project.properties +++ b/plugin/api-gradle-plugin/project.properties @@ -1,9 +1,9 @@ #project -project.name=StaticBusPlugin +project.name=ApiPlugin project.groupId=com.blankj -project.artifactId=bus-gradle-plugin +project.artifactId=api-gradle-plugin project.packaging=aar project.siteUrl=https://github.com/Blankj/AndroidUtilCode project.gitUrl=https://github.com/Blankj/AndroidUtilCode.git #javadoc -javadoc.name=StaticBusPlugin \ No newline at end of file +javadoc.name=ApiPlugin \ No newline at end of file diff --git a/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiClassVisitor.groovy b/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiClassVisitor.groovy new file mode 100644 index 0000000000..edf2a93a00 --- /dev/null +++ b/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiClassVisitor.groovy @@ -0,0 +1,69 @@ +package com.blankj.api + + +import org.objectweb.asm.AnnotationVisitor +import org.objectweb.asm.ClassVisitor +import org.objectweb.asm.Opcodes + +/** + *
+ *     author: blankj
+ *     blog  : http://blankj.com
+ *     time  : 2019/07/09
+ *     desc  :
+ * 
+ */ +public class ApiClassVisitor extends ClassVisitor { + + private Map mApiImplMap; + private List mApiClasses; + private String className; + private String superClassName; + private boolean hasAnnotation; + private boolean isDebug; + + public ApiClassVisitor(ClassVisitor classVisitor, Map apiImplMap, List apiClasses) { + super(Opcodes.ASM5, classVisitor); + mApiImplMap = apiImplMap; + mApiClasses = apiClasses; + } + + @Override + public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { + className = name; + superClassName = superName; + if ('com/blankj/utilcode/util/ApiUtils$BaseApi'.equals(superName)) { + mApiClasses.add(name); + } + super.visit(version, access, name, signature, superName, interfaces); + } + + @Override + public AnnotationVisitor visitAnnotation(String desc, boolean visible) { + if ('Lcom/blankj/utilcode/util/ApiUtils$Api;'.equals(desc)) { + hasAnnotation = true; + return new AnnotationVisitor(Opcodes.ASM5, super.visitAnnotation(desc, visible)) { + @Override + public void visit(String name, Object value) {// 可获取注解的值 + isDebug = value; + super.visit(name, value); + } + }; + } + return super.visitAnnotation(desc, visible); + } + + @Override + void visitEnd() { + super.visitEnd() + if (hasAnnotation) { + if (!isDebug) {// 如果不是 debug 的话,那么写入 + mApiImplMap.put(superClassName, className); + } else {// debug 的话,如果 map 中已存在就不覆盖了 + if (!mApiImplMap.containsKey(superClassName)) { + mApiImplMap.put(superClassName, className); + } + } + } + } +} diff --git a/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiExtension.groovy b/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiExtension.groovy new file mode 100755 index 0000000000..88b2dff6ee --- /dev/null +++ b/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiExtension.groovy @@ -0,0 +1,5 @@ +package com.blankj.api + +class ApiExtension { + +} diff --git a/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiInject.groovy b/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiInject.groovy new file mode 100755 index 0000000000..e0173a3d40 --- /dev/null +++ b/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiInject.groovy @@ -0,0 +1,31 @@ +package com.blankj.api + +import com.blankj.util.ZipUtils +import org.apache.commons.io.FileUtils +import org.objectweb.asm.ClassReader +import org.objectweb.asm.ClassVisitor +import org.objectweb.asm.ClassWriter +import org.objectweb.asm.Opcodes + +class ApiInject { + + static void start(Map apiImplMap, File apiJar) { + String jarPath = apiJar.getAbsolutePath() + String decompressedJarPath = jarPath.substring(0, jarPath.length() - 4); + File decompressedJar = new File(decompressedJarPath) + ZipUtils.unzipFile(apiJar, decompressedJar) + + File apiUtilsFile = new File(decompressedJarPath + Config.FILE_SEP + Config.API_UTILS_CLASS) + + ClassReader cr = new ClassReader(apiUtilsFile.bytes); + ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS); + ClassVisitor cv = new ApiUtilsClassVisitor(cw, apiImplMap); + cr.accept(cv, Opcodes.ASM5); + + FileUtils.writeByteArrayToFile(apiUtilsFile, cw.toByteArray()) + + FileUtils.forceDelete(apiJar) + ZipUtils.zipFiles(Arrays.asList(decompressedJar.listFiles()), apiJar) + FileUtils.forceDelete(decompressedJar) + } +} \ No newline at end of file diff --git a/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiPlugin.groovy b/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiPlugin.groovy new file mode 100755 index 0000000000..6b748b7c9c --- /dev/null +++ b/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiPlugin.groovy @@ -0,0 +1,28 @@ +package com.blankj.api + +import com.android.build.gradle.AppExtension +import com.android.build.gradle.AppPlugin +import com.blankj.util.LogUtils +import org.apache.commons.io.FileUtils +import org.gradle.api.Plugin +import org.gradle.api.Project + +class ApiPlugin implements Plugin { + + @Override + void apply(Project project) { + if (project.plugins.hasPlugin(AppPlugin)) { + LogUtils.init(project) + LogUtils.l('project(' + project.toString() + ') apply api gradle plugin!') + File jsonFile = new File(project.projectDir.getAbsolutePath(), "__api__.json") + FileUtils.write(jsonFile, "{}") + + project.extensions.create(Config.EXT_NAME, ApiExtension) + def android = project.extensions.getByType(AppExtension) + android.registerTransform(new ApiTransform(project)) + project.afterEvaluate { + def ext = project[Config.EXT_NAME] as ApiExtension + } + } + } +} \ No newline at end of file diff --git a/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiScan.groovy b/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiScan.groovy new file mode 100755 index 0000000000..99d92d8c9f --- /dev/null +++ b/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiScan.groovy @@ -0,0 +1,45 @@ +package com.blankj.api + +import com.blankj.util.ZipUtils +import groovy.io.FileType +import org.apache.commons.io.FileUtils +import org.objectweb.asm.ClassReader +import org.objectweb.asm.ClassVisitor +import org.objectweb.asm.ClassWriter +import org.objectweb.asm.Opcodes + +class ApiScan { + + Map apiImplMap = [:] + List apiClasses = [] + File utilcodeJar + + void scanJar(File jar) { + File tmp = new File(jar.getParent(), "temp_" + jar.getName()) + List unzipFile = ZipUtils.unzipFile(jar, tmp) + if (unzipFile != null && unzipFile.size() > 0) { + scanDir(tmp) + FileUtils.forceDelete(tmp) + } + } + + void scanDir(File root) { + if (!root.isDirectory()) return + root.eachFileRecurse(FileType.FILES) { File file -> + def fileName = file.name + if (!fileName.endsWith('.class') + || fileName.startsWith('R$') + || fileName == 'R.class' + || fileName == 'BuildConfig.class') { + return + } + + ClassReader cr = new ClassReader(file.bytes); + ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS); + ClassVisitor cv = new ApiClassVisitor(cw, apiImplMap, apiClasses); + cr.accept(cv, Opcodes.ASM5); + + FileUtils.writeByteArrayToFile(file, cw.toByteArray()); + } + } +} diff --git a/bus-gradle-plugin/src/main/java/com/blankj/bus/BusTransformAsm.groovy b/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiTransform.groovy similarity index 50% rename from bus-gradle-plugin/src/main/java/com/blankj/bus/BusTransformAsm.groovy rename to plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiTransform.groovy index f7578a4db3..703d3fbb5d 100755 --- a/bus-gradle-plugin/src/main/java/com/blankj/bus/BusTransformAsm.groovy +++ b/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiTransform.groovy @@ -1,25 +1,23 @@ -package com.blankj.bus +package com.blankj.api import com.android.build.api.transform.* import com.android.build.gradle.internal.pipeline.TransformManager -import com.blankj.util.JavassistUtils import com.blankj.util.JsonUtils import com.blankj.util.LogUtils -import com.google.common.base.Preconditions import org.apache.commons.io.FileUtils import org.gradle.api.Project -class BusTransformAsm extends Transform { +class ApiTransform extends Transform { Project mProject; - BusTransformAsm(Project project) { + ApiTransform(Project project) { mProject = project } @Override String getName() { - return "busTransform" + return "apiTransform" } @Override @@ -41,28 +39,22 @@ class BusTransformAsm extends Transform { void transform(TransformInvocation transformInvocation) throws TransformException, InterruptedException, IOException { super.transform(transformInvocation) - def outputProvider = transformInvocation.getOutputProvider() - Preconditions.checkNotNull(outputProvider, "Missing output object for transform " + getName()); - LogUtils.l(getName() + " started") - long stTime = System.currentTimeMillis(); + long stTime = System.currentTimeMillis() def inputs = transformInvocation.getInputs() def referencedInputs = transformInvocation.getReferencedInputs() + def outputProvider = transformInvocation.getOutputProvider() def isIncremental = transformInvocation.isIncremental() - if (!isIncremental) { - outputProvider.deleteAll(); - } + outputProvider.deleteAll() - JavassistUtils.init(mProject) - BusScan busScan = new BusScan() + ApiScan apiScan = new ApiScan() - for (TransformInput input : transformInvocation.getInputs()) { - for (DirectoryInput dirInput : input.getDirectoryInputs()) {// 遍历文件夹 + inputs.each { TransformInput input -> + input.directoryInputs.each { DirectoryInput dirInput ->// 遍历文件夹 File dir = dirInput.file - JavassistUtils.getPool().appendClassPath(dir.absolutePath) def dest = outputProvider.getContentLocation( dirInput.name, @@ -74,36 +66,10 @@ class BusTransformAsm extends Transform { LogUtils.l("scan dir: $dir [$dest]") - if (isIncremental) { - switch (status) { - case Status.NOTCHANGED: - break; - case Status.ADDED: - case Status.CHANGED: - transformJar(jarInput.getFile(), dest, status); - break; - case Status.REMOVED: - if (dest.exists()) { - FileUtils.forceDelete(dest); - } - break; - } - } else { - //Forgive me!, Some project will store 3rd-party aar for serveral copies in dexbuilder folder,,unknown issue. - if (inDuplcatedClassSafeMode() & !isIncremental && !flagForCleanDexBuilderFolder) { - cleanDexBuilderFolder(dest); - flagForCleanDexBuilderFolder = true; - } - transformJar(jarInput.getFile(), dest, status); - } - - - busScan.scanDir(dir) - }// 遍历文件夹结束 - - for (JarInput jarInput : input.getJarInputs()) {// 遍历 jar 文件 + apiScan.scanDir(dir) + } + input.jarInputs.each { JarInput jarInput ->// 遍历 jar 文件 File jar = jarInput.file - JavassistUtils.getPool().appendClassPath(jarInput.file.absolutePath) def jarName = jarInput.name def dest = outputProvider.getContentLocation( @@ -116,9 +82,9 @@ class BusTransformAsm extends Transform { if (jarName.startsWith("com.blankj:utilcode:") || jarName.startsWith("com.blankj:utilcodex:") - || jarName.equals(":utilcode:lib")) { - busScan.busJar = dest - LogUtils.l("bus jar: $jarName [$dest]") + || jarName.equals(":lib:utilcode")) { + apiScan.utilcodeJar = dest + LogUtils.l("utilcode jar: $jarName [$dest]") return } @@ -128,24 +94,37 @@ class BusTransformAsm extends Transform { } LogUtils.l("scan jar: $jarName [$dest]") - busScan.scanJar(jar) + apiScan.scanJar(jar) + } + } + + if (apiScan.utilcodeJar != null) { + if (apiScan.apiClasses.isEmpty()) { + LogUtils.l("no api.") + } else { + List noImplApis = [] + apiScan.apiClasses.each { + if (!apiScan.apiImplMap.containsKey(it)) { + noImplApis.add(it) + } + } + Map apiDetails = [:] + apiDetails.put("implApis", apiScan.apiImplMap) + apiDetails.put("noImplApis", noImplApis) + String apiJson = JsonUtils.getFormatJson(apiDetails) + File jsonFile = new File(mProject.projectDir.getAbsolutePath(), "__api__.json") + LogUtils.l(jsonFile.toString() + ": " + apiJson) + FileUtils.write(jsonFile, apiJson) + ApiInject.start(apiScan.apiImplMap, apiScan.utilcodeJar) } - }// 遍历 jar 文件结束 - - if (busScan.busJar != null) { - File jsonFile = new File(mProject.projectDir.getAbsolutePath(), "__bus__.json") - String busJson = JsonUtils.getFormatJson(busScan.busStaticMap) - LogUtils.l(jsonFile.toString() + ": " + busJson) - FileUtils.write(jsonFile, busJson) - BusInject.start(busScan.busStaticMap, busScan.busJar) } else { - LogUtils.l('u should ') + LogUtils.l('u should ') } LogUtils.l(getName() + " finished: " + (System.currentTimeMillis() - stTime) + "ms") } - private static boolean jumpScan(String jarName) { + private static jumpScan(String jarName) { boolean isExcept = false for (String except : Config.EXCEPTS) { if (jarName.startsWith(except)) { @@ -153,6 +132,6 @@ class BusTransformAsm extends Transform { break } } - isExcept + return isExcept } } \ No newline at end of file diff --git a/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiUtilsClassVisitor.groovy b/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiUtilsClassVisitor.groovy new file mode 100644 index 0000000000..a85cc0468b --- /dev/null +++ b/plugin/api-gradle-plugin/src/main/java/com/blankj/api/ApiUtilsClassVisitor.groovy @@ -0,0 +1,62 @@ +package com.blankj.api; + +import org.objectweb.asm.AnnotationVisitor; +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.Type; +import org.objectweb.asm.commons.AdviceAdapter; + +import java.util.Map; + + +/** + *
+ *     author: blankj
+ *     blog  : http://blankj.com
+ *     time  : 2019/07/09
+ *     desc  :
+ * 
+ */ +public class ApiUtilsClassVisitor extends ClassVisitor { + + private Map mApiImplMap; + + public ApiUtilsClassVisitor(ClassVisitor classVisitor, Map apiImplMap) { + super(Opcodes.ASM5, classVisitor); + mApiImplMap = apiImplMap; + } + + @Override + public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) { + if (!"init".equals(name)) { + return super.visitMethod(access, name, descriptor, signature, exceptions); + } + // 往 init() 函数中写入 + if (cv == null) return null; + MethodVisitor mv = cv.visitMethod(access, name, descriptor, signature, exceptions); + mv = new AdviceAdapter(Opcodes.ASM5, mv, access, name, descriptor) { + + @Override + public AnnotationVisitor visitAnnotation(String desc, boolean visible) { + return super.visitAnnotation(desc, visible); + } + + @Override + protected void onMethodEnter() { + super.onMethodEnter(); + } + + @Override + protected void onMethodExit(int opcode) { + super.onMethodExit(opcode); + for (Map.Entry apiImplEntry : mApiImplMap.entrySet()) { + mv.visitVarInsn(Opcodes.ALOAD, 0); + mv.visitLdcInsn(Type.getType("L" + apiImplEntry.getValue() + ";")); + mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "com/blankj/utilcode/util/ApiUtils", "registerImpl", "(Ljava/lang/Class;)V", false); + } + } + }; + return mv; + } +} diff --git a/plugin/api-gradle-plugin/src/main/java/com/blankj/api/Config.groovy b/plugin/api-gradle-plugin/src/main/java/com/blankj/api/Config.groovy new file mode 100755 index 0000000000..29a66475c7 --- /dev/null +++ b/plugin/api-gradle-plugin/src/main/java/com/blankj/api/Config.groovy @@ -0,0 +1,19 @@ +package com.blankj.api + +class Config { + + public static final String EXT_NAME = 'api' + + public static final List EXCEPTS = [ + 'com.android.support:', + 'com.android.support.constraint:', + 'android.arch.', + 'org.jetbrains.kotlin:', + 'org.jetbrains:', + 'com.squareup.' + ] + + public static final String FILE_SEP = System.getProperty("file.separator") + + public static final String API_UTILS_CLASS = 'com.blankj.utilcode.util.ApiUtils'.replace('.', FILE_SEP) + '.class' +} diff --git a/bus-gradle-plugin/src/main/java/com/blankj/util/JsonUtils.groovy b/plugin/api-gradle-plugin/src/main/java/com/blankj/util/JsonUtils.groovy similarity index 100% rename from bus-gradle-plugin/src/main/java/com/blankj/util/JsonUtils.groovy rename to plugin/api-gradle-plugin/src/main/java/com/blankj/util/JsonUtils.groovy diff --git a/plugin/api-gradle-plugin/src/main/java/com/blankj/util/LogUtils.groovy b/plugin/api-gradle-plugin/src/main/java/com/blankj/util/LogUtils.groovy new file mode 100755 index 0000000000..d5029c035c --- /dev/null +++ b/plugin/api-gradle-plugin/src/main/java/com/blankj/util/LogUtils.groovy @@ -0,0 +1,34 @@ +package com.blankj.util + +import org.gradle.api.Project +import org.gradle.api.logging.Logger + +final class LogUtils { + + private static Logger sLogger + private static String PREFIX = "PLUGIN-API >>> " + + static void init(Project project) { + sLogger = project.getLogger() + } + + static void l(Object content) { + sLogger.lifecycle(PREFIX + content) + } + + static void d(Object content) { + sLogger.debug(PREFIX + content) + } + + static void i(Object content) { + sLogger.info(PREFIX + content) + } + + static void w(Object content) { + sLogger.warn(PREFIX + content) + } + + static void e(Object content) { + sLogger.error(PREFIX + content) + } +} \ No newline at end of file diff --git a/bus-gradle-plugin/src/main/java/com/blankj/util/ZipUtils.java b/plugin/api-gradle-plugin/src/main/java/com/blankj/util/ZipUtils.java similarity index 100% rename from bus-gradle-plugin/src/main/java/com/blankj/util/ZipUtils.java rename to plugin/api-gradle-plugin/src/main/java/com/blankj/util/ZipUtils.java diff --git a/plugin/api-gradle-plugin/src/test/java/com/blankj/api/Test.java b/plugin/api-gradle-plugin/src/test/java/com/blankj/api/Test.java new file mode 100644 index 0000000000..527a2d0a1a --- /dev/null +++ b/plugin/api-gradle-plugin/src/test/java/com/blankj/api/Test.java @@ -0,0 +1,133 @@ +package com.blankj.api; + +import com.blankj.utilcode.util.ApiUtils; + +import org.objectweb.asm.AnnotationVisitor; +import org.objectweb.asm.ClassReader; +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.Type; +import org.objectweb.asm.commons.AdviceAdapter; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + + +/** + *
+ *     author: blankj
+ *     blog  : http://blankj.com
+ *     time  : 2019/07/09
+ *     desc  :
+ * 
+ */ +public class Test extends ClassLoader { + public static void main(String[] args) throws Exception { + injectApiImpls(getApiImpls()); + } + + private static List getApiImpls() throws IOException { + List apiImplClass = new ArrayList<>(); + + ClassReader cr = new ClassReader(ApiUtils.TestApi.class.getName()); + ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS); + ClassVisitor cv = new ApiClassVisitor(cw, apiImplClass); + + cr.accept(cv, Opcodes.ASM5); + return apiImplClass; + } + + private static void injectApiImpls(List apiImpls) throws IOException { + ClassReader cr = new ClassReader(ApiUtils.class.getName()); + ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS); + ClassVisitor cv = new ApiUtilsClassVisitor(cw, apiImpls); + + cr.accept(cv, Opcodes.ASM5); + + byte[] code = cw.toByteArray(); + + FileOutputStream fos = new FileOutputStream("ApiUtils2333.class"); + fos.write(code); + fos.close(); + } + + static class ApiClassVisitor extends ClassVisitor { + + private List mApiImplClasses; + private String className; + + public ApiClassVisitor(ClassVisitor classVisitor, List apiImplClasses) { + super(Opcodes.ASM5, classVisitor); + mApiImplClasses = apiImplClasses; + } + + @Override + public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { + className = name; + super.visit(version, access, name, signature, superName, interfaces); + } + + @Override + public AnnotationVisitor visitAnnotation(String desc, boolean visible) { + if ("Lcom/blankj/utilcode/util/ApiUtils$Api;".equals(desc)) { + mApiImplClasses.add(className); + return new AnnotationVisitor(Opcodes.ASM5, super.visitAnnotation(desc, visible)) { + @Override + public void visit(String name, Object value) { + System.out.println(name + " = " + value); + super.visit(name, value); + } + }; + } + return super.visitAnnotation(desc, visible); + } + + } + + static class ApiUtilsClassVisitor extends ClassVisitor { + + private List mApiImplClasses; + + public ApiUtilsClassVisitor(ClassVisitor classVisitor, List apiImplClasses) { + super(Opcodes.ASM5, classVisitor); + mApiImplClasses = apiImplClasses; + } + + @Override + public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) { + if (!"init".equals(name)) { + return super.visitMethod(access, name, descriptor, signature, exceptions); + } + // 往 init() 函数中写入 + if (cv == null) return null; + MethodVisitor mv = cv.visitMethod(access, name, descriptor, signature, exceptions); + mv = new AdviceAdapter(Opcodes.ASM5, mv, access, name, descriptor) { + + @Override + public AnnotationVisitor visitAnnotation(String desc, boolean visible) { + return super.visitAnnotation(desc, visible); + } + + @Override + protected void onMethodEnter() { + super.onMethodEnter(); + } + + @Override + protected void onMethodExit(int opcode) { + super.onMethodExit(opcode); + for (String apiImplClass : mApiImplClasses) { + mv.visitVarInsn(Opcodes.ALOAD, 0); + mv.visitLdcInsn(Type.getType("L" + apiImplClass + ";")); + mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "com/blankj/utilcode/util/ApiUtils", "registerImpl", "(Ljava/lang/Class;)V", false); + } + } + }; + return mv; + } + } +} \ No newline at end of file diff --git a/plugin/api-gradle-plugin/src/test/java/com/blankj/utilcode/util/ApiUtils.java b/plugin/api-gradle-plugin/src/test/java/com/blankj/utilcode/util/ApiUtils.java new file mode 100644 index 0000000000..f5385a37f0 --- /dev/null +++ b/plugin/api-gradle-plugin/src/test/java/com/blankj/utilcode/util/ApiUtils.java @@ -0,0 +1,125 @@ +package com.blankj.utilcode.util; + +import com.android.annotations.NonNull; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.util.HashMap; +import java.util.Map; + +/** + *
+ *     author: blankj
+ *     blog  : http://blankj.com
+ *     time  : 2019/07/09
+ *     desc  :
+ * 
+ */ +public class ApiUtils { + + private static final String TAG = "ApiUtils"; + + private Map mApiMap = new HashMap<>(); + private Map mInjectApiImplMap = new HashMap<>(); + + private ApiUtils() { + init(); + } + + /** + * Get api. + * + * @param apiClass The class of api. + * @param The type. + * @return the api + */ + public static T getApi(@NonNull Class apiClass) { + return getInstance().getApiInner(apiClass); + } + + public static String toString_() { + return getInstance().toString(); + } + + @Override + public String toString() { + return "apis: " + mApiMap + + "\ninjectApis: " + mInjectApiImplMap; + } + + private static ApiUtils getInstance() { + return LazyHolder.INSTANCE; + } + + /** + * It'll be injected the implClasses who have {@link ApiUtils.Api} annotation + * by function of {@link ApiUtils#registerImpl} when execute transform task. + */ + private void init() {/*inject*/} + + private void registerImpl(Class implClass) { + mInjectApiImplMap.put(implClass.getSuperclass(), implClass); + } + + private Result getApiInner(final @NonNull Class apiClass) { + BaseApi api = mApiMap.get(apiClass); + if (api == null) { + Class implClass = mInjectApiImplMap.get(apiClass); + if (implClass != null) { + try { + api = (BaseApi) implClass.newInstance(); + mApiMap.put(apiClass, api); + } catch (Exception ignore) {/**/} + } else { + + } + if (api == null) { + System.out.println(apiClass + " is not register."); + return null; + } + } + //noinspection unchecked + return (Result) api.invoke(); + } + + private static class LazyHolder { + private static final ApiUtils INSTANCE = new ApiUtils(); + } + + @Target({ElementType.TYPE}) + @Retention(RetentionPolicy.CLASS) + public @interface Api { + boolean isDebug() default false; + } + + public abstract static class BaseApi { + private BaseApi invoke() { + return this; + } + } + + + /////////////////////////////////////////////////////////////////////////// + // test + /////////////////////////////////////////////////////////////////////////// + + public static abstract class TestApi extends BaseApi { + + public abstract String test(String name); + + } + + + @Api + public static class TestApiImpl extends TestApi { + + @Override + public String test(String name) { + System.out.println(name); + return "haha"; + } + + } +} diff --git a/plugin/bus-gradle-plugin/.gitignore b/plugin/bus-gradle-plugin/.gitignore new file mode 100755 index 0000000000..42afabfd2a --- /dev/null +++ b/plugin/bus-gradle-plugin/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/bus-gradle-plugin/CHANGELOG.md b/plugin/bus-gradle-plugin/CHANGELOG.md similarity index 96% rename from bus-gradle-plugin/CHANGELOG.md rename to plugin/bus-gradle-plugin/CHANGELOG.md index 5a49afd658..035c77f4bf 100644 --- a/bus-gradle-plugin/CHANGELOG.md +++ b/plugin/bus-gradle-plugin/CHANGELOG.md @@ -25,4 +25,4 @@ 升级 javassist 版本,兼容 Java8 ## v1.0 -发布初版本 \ No newline at end of file +发布初版本 diff --git a/bus-gradle-plugin/build.gradle b/plugin/bus-gradle-plugin/build.gradle similarity index 66% rename from bus-gradle-plugin/build.gradle rename to plugin/bus-gradle-plugin/build.gradle index 4cf9c60a01..e8c14e4f7c 100755 --- a/bus-gradle-plugin/build.gradle +++ b/plugin/bus-gradle-plugin/build.gradle @@ -6,7 +6,7 @@ apply { plugin "groovy" plugin "java-gradle-plugin" from "${rootDir.path}/gradle/upload/pluginPublish.gradle" - if (gradle.ext.depConfig.plugin_bus.useLocal) { + if (Config.depConfig.plugin_bus.useLocal) { plugin "maven" } else { plugin "com.github.dcendents.android-maven" @@ -25,15 +25,14 @@ gradlePlugin { } dependencies { - implementation "com.android.tools.build:gradle:3.4.0" - implementation "com.android.tools.build:gradle-api:3.4.0" + implementation "com.android.tools.build:gradle:3.4.1" + implementation "com.android.tools.build:gradle-api:3.4.1" - implementation gradle.ext.dep.javassist - implementation gradle.ext.dep.commons_io + implementation Config.depConfig.commons_io.dep implementation gradleApi() implementation localGroovy() - testImplementation gradle.ext.dep.junit + testImplementation Config.depConfig.junit.dep } sourceSets { @@ -50,14 +49,14 @@ sourceSets { } } -group = gradle.ext.depConfig.plugin_bus.groupId -version = gradle.ext.depConfig.plugin_bus.version +group = Config.depConfig.plugin_bus.groupId +version = Config.depConfig.plugin_bus.version -if (gradle.ext.depConfig.plugin_bus.useLocal) { +if (Config.depConfig.plugin_bus.useLocal) { uploadArchives { repositories { mavenDeployer { - repository(url: uri(new File(project.rootDir, "busMaven"))) + repository(url: uri(new File(project.rootDir.getPath() + "/maven/bus"))) } } } diff --git a/plugin/bus-gradle-plugin/project.properties b/plugin/bus-gradle-plugin/project.properties new file mode 100644 index 0000000000..cb16a17452 --- /dev/null +++ b/plugin/bus-gradle-plugin/project.properties @@ -0,0 +1,9 @@ +#project +project.name=ApiPlugin +project.groupId=com.blankj +project.artifactId=api-gradle-plugin +project.packaging=aar +project.siteUrl=https://github.com/Blankj/AndroidUtilCode +project.gitUrl=https://github.com/Blankj/AndroidUtilCode.git +#javadoc +javadoc.name=ApiPlugin \ No newline at end of file diff --git a/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusClassVisitor.groovy b/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusClassVisitor.groovy new file mode 100644 index 0000000000..8304696ac7 --- /dev/null +++ b/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusClassVisitor.groovy @@ -0,0 +1,54 @@ +package com.blankj.bus + + +import org.objectweb.asm.AnnotationVisitor +import org.objectweb.asm.ClassVisitor +import org.objectweb.asm.MethodVisitor +import org.objectweb.asm.Opcodes +import org.objectweb.asm.commons.AdviceAdapter + +/** + *
+ *     author: blankj
+ *     blog  : http://blankj.com
+ *     time  : 2019/07/09
+ *     desc  :
+ * 
+ */ +public class BusClassVisitor extends ClassVisitor { + + private Map mBusMap; + private String className; + + public BusClassVisitor(ClassVisitor classVisitor, Map busMap) { + super(Opcodes.ASM5, classVisitor); + mBusMap = busMap; + } + + @Override + public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { + className = name; + super.visit(version, access, name, signature, superName, interfaces); + } + + @Override + MethodVisitor visitMethod(int access, String name, String desc, String signature, String[] exceptions) { + if (cv == null) return null; + MethodVisitor mv = cv.visitMethod(access, name, descriptor, signature, exceptions); + mv = new AdviceAdapter(Opcodes.ASM5, mv, access, name, descriptor) { + @Override + public AnnotationVisitor visitAnnotation(String desc1, boolean visible) { + if ('Lcom/blankj/utilcode/util/BusUtils$Bus;'.equals(desc)) { + return new AnnotationVisitor(Opcodes.ASM5, super.visitAnnotation(desc, visible)) { + @Override + public void visit(String name1, Object value) {// 可获取注解的值 + mBusMap.put(value, className) + } + }; + } + return super.visitAnnotation(desc, visible); + } + }; + return mv + } +} diff --git a/bus-gradle-plugin/src/main/java/com/blankj/bus/BusExtension.groovy b/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusExtension.groovy similarity index 100% rename from bus-gradle-plugin/src/main/java/com/blankj/bus/BusExtension.groovy rename to plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusExtension.groovy diff --git a/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusInject.groovy b/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusInject.groovy new file mode 100755 index 0000000000..4bebeb0395 --- /dev/null +++ b/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusInject.groovy @@ -0,0 +1,31 @@ +package com.blankj.bus + +import com.blankj.util.ZipUtils +import org.apache.commons.io.FileUtils +import org.objectweb.asm.ClassReader +import org.objectweb.asm.ClassVisitor +import org.objectweb.asm.ClassWriter +import org.objectweb.asm.Opcodes + +class BusInject { + + static void start(Map busMap, File apiJar) { + String jarPath = apiJar.getAbsolutePath() + String decompressedJarPath = jarPath.substring(0, jarPath.length() - 4); + File decompressedJar = new File(decompressedJarPath) + ZipUtils.unzipFile(apiJar, decompressedJar) + + File apiUtilsFile = new File(decompressedJarPath + Config.FILE_SEP + Config.BUS_UTILS_CLASS) + + ClassReader cr = new ClassReader(apiUtilsFile.bytes); + ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS); + ClassVisitor cv = new BusUtilsClassVisitor(cw, busMap); + cr.accept(cv, Opcodes.ASM5); + + FileUtils.writeByteArrayToFile(apiUtilsFile, cw.toByteArray()) + + FileUtils.forceDelete(apiJar) + ZipUtils.zipFiles(Arrays.asList(decompressedJar.listFiles()), apiJar) + FileUtils.forceDelete(decompressedJar) + } +} \ No newline at end of file diff --git a/bus-gradle-plugin/src/main/java/com/blankj/bus/BusPlugin.groovy b/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusPlugin.groovy similarity index 73% rename from bus-gradle-plugin/src/main/java/com/blankj/bus/BusPlugin.groovy rename to plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusPlugin.groovy index 9ab59a045f..bf0bfa2250 100755 --- a/bus-gradle-plugin/src/main/java/com/blankj/bus/BusPlugin.groovy +++ b/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusPlugin.groovy @@ -3,6 +3,7 @@ package com.blankj.bus import com.android.build.gradle.AppExtension import com.android.build.gradle.AppPlugin import com.blankj.util.LogUtils +import org.apache.commons.io.FileUtils import org.gradle.api.Plugin import org.gradle.api.Project @@ -12,7 +13,9 @@ class BusPlugin implements Plugin { void apply(Project project) { if (project.plugins.hasPlugin(AppPlugin)) { LogUtils.init(project) - LogUtils.l('project(' + project.name + ') apply bus gradle plugin!') + LogUtils.l('project(' + project.toString() + ') apply api gradle plugin!') + File jsonFile = new File(project.projectDir.getAbsolutePath(), "__bus__.json") + FileUtils.write(jsonFile, "{}") project.extensions.create(Config.EXT_NAME, BusExtension) def android = project.extensions.getByType(AppExtension) diff --git a/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusScan.groovy b/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusScan.groovy new file mode 100755 index 0000000000..ff18ba616e --- /dev/null +++ b/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusScan.groovy @@ -0,0 +1,44 @@ +package com.blankj.bus + +import com.blankj.util.ZipUtils +import groovy.io.FileType +import org.apache.commons.io.FileUtils +import org.objectweb.asm.ClassReader +import org.objectweb.asm.ClassVisitor +import org.objectweb.asm.ClassWriter +import org.objectweb.asm.Opcodes + +class BusScan { + + Map busMap = [:] + File utilcodeJar + + void scanJar(File jar) { + File tmp = new File(jar.getParent(), "temp_" + jar.getName()) + List unzipFile = ZipUtils.unzipFile(jar, tmp) + if (unzipFile != null && unzipFile.size() > 0) { + scanDir(tmp) + FileUtils.forceDelete(tmp) + } + } + + void scanDir(File root) { + if (!root.isDirectory()) return + root.eachFileRecurse(FileType.FILES) { File file -> + def fileName = file.name + if (!fileName.endsWith('.class') + || fileName.startsWith('R$') + || fileName == 'R.class' + || fileName == 'BuildConfig.class') { + return + } + + ClassReader cr = new ClassReader(file.bytes); + ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS); + ClassVisitor cv = new BusClassVisitor(cw, busMap); + cr.accept(cv, Opcodes.ASM5); + + FileUtils.writeByteArrayToFile(file, cw.toByteArray()); + } + } +} diff --git a/bus-gradle-plugin/src/main/java/com/blankj/bus/BusTransform.groovy b/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusTransform.groovy similarity index 77% rename from bus-gradle-plugin/src/main/java/com/blankj/bus/BusTransform.groovy rename to plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusTransform.groovy index 3fa7f8cd0c..f248a39a79 100755 --- a/bus-gradle-plugin/src/main/java/com/blankj/bus/BusTransform.groovy +++ b/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusTransform.groovy @@ -2,7 +2,6 @@ package com.blankj.bus import com.android.build.api.transform.* import com.android.build.gradle.internal.pipeline.TransformManager -import com.blankj.util.JavassistUtils import com.blankj.util.JsonUtils import com.blankj.util.LogUtils import org.apache.commons.io.FileUtils @@ -40,10 +39,9 @@ class BusTransform extends Transform { void transform(TransformInvocation transformInvocation) throws TransformException, InterruptedException, IOException { super.transform(transformInvocation) - JavassistUtils.init(mProject) LogUtils.l(getName() + " started") - long stTime = System.currentTimeMillis(); + long stTime = System.currentTimeMillis() def inputs = transformInvocation.getInputs() def referencedInputs = transformInvocation.getReferencedInputs() @@ -57,7 +55,6 @@ class BusTransform extends Transform { inputs.each { TransformInput input -> input.directoryInputs.each { DirectoryInput dirInput ->// 遍历文件夹 File dir = dirInput.file - JavassistUtils.getPool().appendClassPath(dir.absolutePath) def dest = outputProvider.getContentLocation( dirInput.name, @@ -73,7 +70,6 @@ class BusTransform extends Transform { } input.jarInputs.each { JarInput jarInput ->// 遍历 jar 文件 File jar = jarInput.file - JavassistUtils.getPool().appendClassPath(jarInput.file.absolutePath) def jarName = jarInput.name def dest = outputProvider.getContentLocation( @@ -86,9 +82,9 @@ class BusTransform extends Transform { if (jarName.startsWith("com.blankj:utilcode:") || jarName.startsWith("com.blankj:utilcodex:") - || jarName.equals(":utilcode:lib")) { - busScan.busJar = dest - LogUtils.l("bus jar: $jarName [$dest]") + || jarName.equals(":lib:utilcode")) { + busScan.utilcodeJar = dest + LogUtils.l("utilcode jar: $jarName [$dest]") return } @@ -100,23 +96,26 @@ class BusTransform extends Transform { LogUtils.l("scan jar: $jarName [$dest]") busScan.scanJar(jar) } - } - if (busScan.busJar != null) { - File jsonFile = new File(mProject.projectDir.getAbsolutePath(), "__bus__.json") - String busJson = JsonUtils.getFormatJson(busScan.busStaticMap) - LogUtils.l(jsonFile.toString() + ": " + busJson) - FileUtils.write(jsonFile, busJson) - BusInject.start(busScan.busStaticMap, busScan.busJar) + if (busScan.utilcodeJar != null) { + if (busScan.busMap.isEmpty()) { + LogUtils.l("no bus.") + } else { + String busJson = JsonUtils.getFormatJson(busScan.busMap) + File jsonFile = new File(mProject.projectDir.getAbsolutePath(), "__bus__.json") + LogUtils.l(jsonFile.toString() + ": " + busJson) + FileUtils.write(jsonFile, busJson) + BusInject.start(busScan.busMap, busScan.utilcodeJar) + } } else { - LogUtils.l('u should ') + LogUtils.l('u should ') } LogUtils.l(getName() + " finished: " + (System.currentTimeMillis() - stTime) + "ms") } - private static boolean jumpScan(String jarName) { + private static jumpScan(String jarName) { boolean isExcept = false for (String except : Config.EXCEPTS) { if (jarName.startsWith(except)) { @@ -124,6 +123,6 @@ class BusTransform extends Transform { break } } - isExcept + return isExcept } } \ No newline at end of file diff --git a/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusUtilsClassVisitor.groovy b/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusUtilsClassVisitor.groovy new file mode 100644 index 0000000000..d627517e99 --- /dev/null +++ b/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusUtilsClassVisitor.groovy @@ -0,0 +1,62 @@ +package com.blankj.bus; + +import org.objectweb.asm.AnnotationVisitor; +import org.objectweb.asm.ClassVisitor; +import org.objectweb.asm.MethodVisitor; +import org.objectweb.asm.Opcodes; +import org.objectweb.asm.Type; +import org.objectweb.asm.commons.AdviceAdapter; + +import java.util.Map; + + +/** + *
+ *     author: blankj
+ *     blog  : http://blankj.com
+ *     time  : 2019/07/09
+ *     desc  :
+ * 
+ */ +public class BusUtilsClassVisitor extends ClassVisitor { + + private Map mApiImplMap; + + public BusUtilsClassVisitor(ClassVisitor classVisitor, Map apiImplMap) { + super(Opcodes.ASM5, classVisitor); + mApiImplMap = apiImplMap; + } + + @Override + public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) { + if (!"init".equals(name)) { + return super.visitMethod(access, name, descriptor, signature, exceptions); + } + // 往 init() 函数中写入 + if (cv == null) return null; + MethodVisitor mv = cv.visitMethod(access, name, descriptor, signature, exceptions); + mv = new AdviceAdapter(Opcodes.ASM5, mv, access, name, descriptor) { + + @Override + public AnnotationVisitor visitAnnotation(String desc, boolean visible) { + return super.visitAnnotation(desc, visible); + } + + @Override + protected void onMethodEnter() { + super.onMethodEnter(); + } + + @Override + protected void onMethodExit(int opcode) { + super.onMethodExit(opcode); + for (Map.Entry apiImplEntry : mApiImplMap.entrySet()) { + mv.visitVarInsn(Opcodes.ALOAD, 0); + mv.visitLdcInsn(Type.getType("L" + apiImplEntry.getValue() + ";")); + mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "com/blankj/utilcode/util/ApiUtils", "registerImpl", "(Ljava/lang/Class;)V", false); + } + } + }; + return mv; + } +} diff --git a/bus-gradle-plugin/src/main/java/com/blankj/bus/Config.groovy b/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/Config.groovy similarity index 90% rename from bus-gradle-plugin/src/main/java/com/blankj/bus/Config.groovy rename to plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/Config.groovy index 27bb63ec11..9fc6ef4159 100755 --- a/bus-gradle-plugin/src/main/java/com/blankj/bus/Config.groovy +++ b/plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/Config.groovy @@ -8,7 +8,6 @@ class Config { 'com.android.support:', 'com.android.support.constraint:', 'android.arch.', - 'com.blankj:', 'org.jetbrains.kotlin:', 'org.jetbrains:', 'com.squareup.' @@ -16,5 +15,5 @@ class Config { public static final String FILE_SEP = System.getProperty("file.separator") - public static final String BUS_UTILS_CLASS = 'com.blankj.utilcode.util.BusUtils' + public static final String BUS_UTILS_CLASS = 'com.blankj.utilcode.util.BusUtils'.replace('.', FILE_SEP) + '.class' } diff --git a/plugin/bus-gradle-plugin/src/main/java/com/blankj/util/JsonUtils.groovy b/plugin/bus-gradle-plugin/src/main/java/com/blankj/util/JsonUtils.groovy new file mode 100755 index 0000000000..8b2da1adaf --- /dev/null +++ b/plugin/bus-gradle-plugin/src/main/java/com/blankj/util/JsonUtils.groovy @@ -0,0 +1,21 @@ +package com.blankj.util + +import com.google.gson.Gson +import com.google.gson.GsonBuilder + +/** + *
+ *     author: Blankj
+ *     blog  : http://blankj.com
+ *     time  : 2018/10/08
+ *     desc  :
+ * 
+ */ +final class JsonUtils { + + static final Gson GSON = new GsonBuilder().setPrettyPrinting().create() + + static String getFormatJson(Object object) { + return GSON.toJson(object) + } +} diff --git a/bus-gradle-plugin/src/main/java/com/blankj/util/LogUtils.groovy b/plugin/bus-gradle-plugin/src/main/java/com/blankj/util/LogUtils.groovy similarity index 100% rename from bus-gradle-plugin/src/main/java/com/blankj/util/LogUtils.groovy rename to plugin/bus-gradle-plugin/src/main/java/com/blankj/util/LogUtils.groovy diff --git a/plugin/bus-gradle-plugin/src/main/java/com/blankj/util/ZipUtils.java b/plugin/bus-gradle-plugin/src/main/java/com/blankj/util/ZipUtils.java new file mode 100755 index 0000000000..091fec59e8 --- /dev/null +++ b/plugin/bus-gradle-plugin/src/main/java/com/blankj/util/ZipUtils.java @@ -0,0 +1,453 @@ +package com.blankj.util; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Enumeration; +import java.util.List; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; +import java.util.zip.ZipOutputStream; + +/** + *
+ *     author: Blankj
+ *     blog  : http://blankj.com
+ *     time  : 2016/08/27
+ *     desc  : utils about zip or jar
+ * 
+ */ +public final class ZipUtils { + + private static final int BUFFER_LEN = 8192; + + private ZipUtils() { + throw new UnsupportedOperationException("u can't instantiate me..."); + } + + /** + * Zip the files. + * + * @param srcFiles The source of files. + * @param zipFilePath The path of ZIP file. + * @return {@code true}: success
{@code false}: fail + * @throws IOException if an I/O error has occurred + */ + public static boolean zipFiles(final Collection srcFiles, + final String zipFilePath) + throws IOException { + return zipFiles(srcFiles, zipFilePath, null); + } + + /** + * Zip the files. + * + * @param srcFilePaths The paths of source files. + * @param zipFilePath The path of ZIP file. + * @param comment The comment. + * @return {@code true}: success
{@code false}: fail + * @throws IOException if an I/O error has occurred + */ + public static boolean zipFiles(final Collection srcFilePaths, + final String zipFilePath, + final String comment) + throws IOException { + if (srcFilePaths == null || zipFilePath == null) return false; + ZipOutputStream zos = null; + try { + zos = new ZipOutputStream(new FileOutputStream(zipFilePath)); + for (String srcFile : srcFilePaths) { + if (!zipFile(getFileByPath(srcFile), "", zos, comment)) return false; + } + return true; + } finally { + if (zos != null) { + zos.finish(); + zos.close(); + } + } + } + + /** + * Zip the files. + * + * @param srcFiles The source of files. + * @param zipFile The ZIP file. + * @return {@code true}: success
{@code false}: fail + * @throws IOException if an I/O error has occurred + */ + public static boolean zipFiles(final Collection srcFiles, final File zipFile) + throws IOException { + return zipFiles(srcFiles, zipFile, null); + } + + /** + * Zip the files. + * + * @param srcFiles The source of files. + * @param zipFile The ZIP file. + * @param comment The comment. + * @return {@code true}: success
{@code false}: fail + * @throws IOException if an I/O error has occurred + */ + public static boolean zipFiles(final Collection srcFiles, + final File zipFile, + final String comment) + throws IOException { + if (srcFiles == null || zipFile == null) return false; + ZipOutputStream zos = null; + try { + zos = new ZipOutputStream(new FileOutputStream(zipFile)); + for (File srcFile : srcFiles) { + if (!zipFile(srcFile, "", zos, comment)) return false; + } + return true; + } finally { + if (zos != null) { + zos.finish(); + zos.close(); + } + } + } + + /** + * Zip the file. + * + * @param srcFilePath The path of source file. + * @param zipFilePath The path of ZIP file. + * @return {@code true}: success
{@code false}: fail + * @throws IOException if an I/O error has occurred + */ + public static boolean zipFile(final String srcFilePath, + final String zipFilePath) + throws IOException { + return zipFile(getFileByPath(srcFilePath), getFileByPath(zipFilePath), null); + } + + /** + * Zip the file. + * + * @param srcFilePath The path of source file. + * @param zipFilePath The path of ZIP file. + * @param comment The comment. + * @return {@code true}: success
{@code false}: fail + * @throws IOException if an I/O error has occurred + */ + public static boolean zipFile(final String srcFilePath, + final String zipFilePath, + final String comment) + throws IOException { + return zipFile(getFileByPath(srcFilePath), getFileByPath(zipFilePath), comment); + } + + /** + * Zip the file. + * + * @param srcFile The source of file. + * @param zipFile The ZIP file. + * @return {@code true}: success
{@code false}: fail + * @throws IOException if an I/O error has occurred + */ + public static boolean zipFile(final File srcFile, + final File zipFile) + throws IOException { + return zipFile(srcFile, zipFile, null); + } + + /** + * Zip the file. + * + * @param srcFile The source of file. + * @param zipFile The ZIP file. + * @param comment The comment. + * @return {@code true}: success
{@code false}: fail + * @throws IOException if an I/O error has occurred + */ + public static boolean zipFile(final File srcFile, + final File zipFile, + final String comment) + throws IOException { + if (srcFile == null || zipFile == null) return false; + ZipOutputStream zos = null; + try { + zos = new ZipOutputStream(new FileOutputStream(zipFile)); + return zipFile(srcFile, "", zos, comment); + } finally { + if (zos != null) { + zos.close(); + } + } + } + + private static boolean zipFile(final File srcFile, + String rootPath, + final ZipOutputStream zos, + final String comment) + throws IOException { + rootPath = rootPath + (isSpace(rootPath) ? "" : File.separator) + srcFile.getName(); + if (srcFile.isDirectory()) { + File[] fileList = srcFile.listFiles(); + if (fileList == null || fileList.length <= 0) { + ZipEntry entry = new ZipEntry(rootPath + '/'); + entry.setComment(comment); + zos.putNextEntry(entry); + zos.closeEntry(); + } else { + for (File file : fileList) { + if (!zipFile(file, rootPath, zos, comment)) return false; + } + } + } else { + InputStream is = null; + try { + is = new BufferedInputStream(new FileInputStream(srcFile)); + ZipEntry entry = new ZipEntry(rootPath); + entry.setComment(comment); + zos.putNextEntry(entry); + byte buffer[] = new byte[BUFFER_LEN]; + int len; + while ((len = is.read(buffer, 0, BUFFER_LEN)) != -1) { + zos.write(buffer, 0, len); + } + zos.closeEntry(); + } finally { + if (is != null) { + is.close(); + } + } + } + return true; + } + + /** + * Unzip the file. + * + * @param zipFilePath The path of ZIP file. + * @param destDirPath The path of destination directory. + * @return the unzipped files + * @throws IOException if unzip unsuccessfully + */ + public static List unzipFile(final String zipFilePath, + final String destDirPath) + throws IOException { + return unzipFileByKeyword(zipFilePath, destDirPath, null); + } + + /** + * Unzip the file. + * + * @param zipFile The ZIP file. + * @param destDir The destination directory. + * @return the unzipped files + * @throws IOException if unzip unsuccessfully + */ + public static List unzipFile(final File zipFile, + final File destDir) + throws IOException { + return unzipFileByKeyword(zipFile, destDir, null); + } + + /** + * Unzip the file by keyword. + * + * @param zipFilePath The path of ZIP file. + * @param destDirPath The path of destination directory. + * @param keyword The keyboard. + * @return the unzipped files + * @throws IOException if unzip unsuccessfully + */ + public static List unzipFileByKeyword(final String zipFilePath, + final String destDirPath, + final String keyword) + throws IOException { + return unzipFileByKeyword(getFileByPath(zipFilePath), getFileByPath(destDirPath), keyword); + } + + /** + * Unzip the file by keyword. + * + * @param zipFile The ZIP file. + * @param destDir The destination directory. + * @param keyword The keyboard. + * @return the unzipped files + * @throws IOException if unzip unsuccessfully + */ + public static List unzipFileByKeyword(final File zipFile, + final File destDir, + final String keyword) + throws IOException { + if (zipFile == null || destDir == null) return null; + List files = new ArrayList<>(); + ZipFile zip = new ZipFile(zipFile); + Enumeration entries = zip.entries(); + try { + if (isSpace(keyword)) { + while (entries.hasMoreElements()) { + ZipEntry entry = ((ZipEntry) entries.nextElement()); + String entryName = entry.getName(); + if (entryName.contains("../")) { + System.err.println("entryName: " + entryName + " is dangerous!"); + continue; + } + if (!unzipChildFile(destDir, files, zip, entry, entryName)) return files; + } + } else { + while (entries.hasMoreElements()) { + ZipEntry entry = ((ZipEntry) entries.nextElement()); + String entryName = entry.getName(); + if (entryName.contains("../")) { + System.out.println("entryName: " + entryName + " is dangerous!"); + continue; + } + if (entryName.contains(keyword)) { + if (!unzipChildFile(destDir, files, zip, entry, entryName)) return files; + } + } + } + } finally { + zip.close(); + } + return files; + } + + private static boolean unzipChildFile(final File destDir, + final List files, + final ZipFile zip, + final ZipEntry entry, + final String name) throws IOException { + File file = new File(destDir, name); + files.add(file); + if (entry.isDirectory()) { + return createOrExistsDir(file); + } else { + if (!createOrExistsFile(file)) return false; + InputStream in = null; + OutputStream out = null; + try { + in = new BufferedInputStream(zip.getInputStream(entry)); + out = new BufferedOutputStream(new FileOutputStream(file)); + byte buffer[] = new byte[BUFFER_LEN]; + int len; + while ((len = in.read(buffer)) != -1) { + out.write(buffer, 0, len); + } + } finally { + if (in != null) { + in.close(); + } + if (out != null) { + out.close(); + } + } + } + return true; + } + + /** + * Return the files' path in ZIP file. + * + * @param zipFilePath The path of ZIP file. + * @return the files' path in ZIP file + * @throws IOException if an I/O error has occurred + */ + public static List getFilesPath(final String zipFilePath) + throws IOException { + return getFilesPath(getFileByPath(zipFilePath)); + } + + /** + * Return the files' path in ZIP file. + * + * @param zipFile The ZIP file. + * @return the files' path in ZIP file + * @throws IOException if an I/O error has occurred + */ + public static List getFilesPath(final File zipFile) + throws IOException { + if (zipFile == null) return null; + List paths = new ArrayList<>(); + ZipFile zip = new ZipFile(zipFile); + Enumeration entries = zip.entries(); + while (entries.hasMoreElements()) { + String entryName = ((ZipEntry) entries.nextElement()).getName(); + if (entryName.contains("../")) { + System.out.println("entryName: " + entryName + " is dangerous!"); + paths.add(entryName); + } else { + paths.add(entryName); + } + } + zip.close(); + return paths; + } + + /** + * Return the files' comment in ZIP file. + * + * @param zipFilePath The path of ZIP file. + * @return the files' comment in ZIP file + * @throws IOException if an I/O error has occurred + */ + public static List getComments(final String zipFilePath) + throws IOException { + return getComments(getFileByPath(zipFilePath)); + } + + /** + * Return the files' comment in ZIP file. + * + * @param zipFile The ZIP file. + * @return the files' comment in ZIP file + * @throws IOException if an I/O error has occurred + */ + public static List getComments(final File zipFile) + throws IOException { + if (zipFile == null) return null; + List comments = new ArrayList<>(); + ZipFile zip = new ZipFile(zipFile); + Enumeration entries = zip.entries(); + while (entries.hasMoreElements()) { + ZipEntry entry = ((ZipEntry) entries.nextElement()); + comments.add(entry.getComment()); + } + zip.close(); + return comments; + } + + private static boolean createOrExistsDir(final File file) { + return file != null && (file.exists() ? file.isDirectory() : file.mkdirs()); + } + + private static boolean createOrExistsFile(final File file) { + if (file == null) return false; + if (file.exists()) return file.isFile(); + if (!createOrExistsDir(file.getParentFile())) return false; + try { + return file.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + return false; + } + } + + private static File getFileByPath(final String filePath) { + return isSpace(filePath) ? null : new File(filePath); + } + + private static boolean isSpace(final String s) { + if (s == null) return true; + for (int i = 0, len = s.length(); i < len; ++i) { + if (!Character.isWhitespace(s.charAt(i))) { + return false; + } + } + return true; + } +} diff --git a/settings.gradle b/settings.gradle index 7a0d4eedcb..fedff8f563 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,3 +1 @@ -apply from: 'gradle/config/config.gradle' - -gradle.fn.includeDep() \ No newline at end of file +BuildConfig.addBuildListener(gradle) \ No newline at end of file diff --git a/subutil/app/build.gradle b/subutil/app/build.gradle deleted file mode 100644 index a7027c15ef..0000000000 --- a/subutil/app/build.gradle +++ /dev/null @@ -1,8 +0,0 @@ -apply { - from "${rootDir.path}/gradle/config/configApp.gradle" -} - -dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation gradle.ext.dep.subutil_pkg -} \ No newline at end of file diff --git a/subutil/export/build.gradle b/subutil/export/build.gradle deleted file mode 100644 index 8bee85e640..0000000000 --- a/subutil/export/build.gradle +++ /dev/null @@ -1,3 +0,0 @@ -apply { - from "${rootDir.path}/gradle/config/configLib.gradle" -} \ No newline at end of file diff --git a/subutil/lib/build.gradle b/subutil/lib/build.gradle deleted file mode 100644 index 1c7c5996c0..0000000000 --- a/subutil/lib/build.gradle +++ /dev/null @@ -1,28 +0,0 @@ -apply { - from "${rootDir.path}/gradle/config/configLib.gradle" - - plugin "tech.harmonysoft.oss.traute" - plugin "com.github.dcendents.android-maven" - plugin "com.jfrog.bintray" - plugin "readme-sub" -} - -readme { - readmeFile file('../README.md') - readmeCnFile file('../README-CN.md') -} - -dependencies { - compileOnly gradle.ext.dep.support_appcompat_v7 - compileOnly gradle.ext.dep.support_design - compileOnly gradle.ext.dep.utilcode_lib - api(gradle.ext.dep.glide) { - exclude group: "com.android.support" - } - api gradle.ext.dep.retrofit - api gradle.ext.dep.gson - - testImplementation gradle.ext.dep.junit - testImplementation gradle.ext.dep.robolectric - testImplementation gradle.ext.dep.utilcode_lib -} \ No newline at end of file diff --git a/subutil/pkg/build.gradle b/subutil/pkg/build.gradle deleted file mode 100644 index 2d7d216427..0000000000 --- a/subutil/pkg/build.gradle +++ /dev/null @@ -1,9 +0,0 @@ -apply { - from "${rootDir.path}/gradle/config/configLib.gradle" -} - -dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - api gradle.ext.dep.subutil_export - api gradle.ext.dep.lib_common -} \ No newline at end of file diff --git a/utilcode/app/build.gradle b/utilcode/app/build.gradle deleted file mode 100644 index ea5c172cd7..0000000000 --- a/utilcode/app/build.gradle +++ /dev/null @@ -1,8 +0,0 @@ -apply { - from "${rootDir.path}/gradle/config/configApp.gradle" -} - -dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation gradle.ext.dep.utilcode_pkg -} \ No newline at end of file diff --git a/utilcode/export/build.gradle b/utilcode/export/build.gradle deleted file mode 100644 index 8bee85e640..0000000000 --- a/utilcode/export/build.gradle +++ /dev/null @@ -1,3 +0,0 @@ -apply { - from "${rootDir.path}/gradle/config/configLib.gradle" -} \ No newline at end of file diff --git a/utilcode/lib/.gitignore b/utilcode/lib/.gitignore deleted file mode 100644 index d231a08c14..0000000000 --- a/utilcode/lib/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/build -local.properties \ No newline at end of file diff --git a/utilcode/lib/build.gradle b/utilcode/lib/build.gradle deleted file mode 100644 index e4dd3a6716..0000000000 --- a/utilcode/lib/build.gradle +++ /dev/null @@ -1,26 +0,0 @@ -apply { - from "${rootDir.path}/gradle/config/configLib.gradle" - - plugin "tech.harmonysoft.oss.traute" - plugin "com.github.dcendents.android-maven" - plugin "com.jfrog.bintray" - plugin "readme-core" -} - -readme { - readmeFile file('../README.md') - readmeCnFile file('../README-CN.md') -} - -apply from: "${rootDir.path}/gradle/upload/bintrayUploadAndroid.gradle" - -dependencies { - compile gradle.ext.dep.gson - - compileOnly gradle.ext.dep.support_appcompat_v7 - compileOnly gradle.ext.dep.support_design - - testImplementation gradle.ext.dep.junit - testImplementation gradle.ext.dep.robolectric - testImplementation gradle.ext.dep.support_appcompat_v7 -} \ No newline at end of file diff --git a/utilcode/lib/src/test/java/com/blankj/utilcode/util/BaseTest.java b/utilcode/lib/src/test/java/com/blankj/utilcode/util/BaseTest.java deleted file mode 100644 index 3613be05e5..0000000000 --- a/utilcode/lib/src/test/java/com/blankj/utilcode/util/BaseTest.java +++ /dev/null @@ -1,230 +0,0 @@ -package com.blankj.utilcode.util; - - -import android.support.annotation.NonNull; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.robolectric.RobolectricTestRunner; -import org.robolectric.RuntimeEnvironment; -import org.robolectric.annotation.Config; -import org.robolectric.shadows.ShadowLog; - -import java.util.concurrent.Executor; - -/** - *
- *     author: Blankj
- *     blog  : http://blankj.com
- *     time  : 2018/08/03
- *     desc  :
- * 
- */ -@RunWith(RobolectricTestRunner.class) -@Config(manifest = Config.NONE, shadows = {ShadowLog.class}) -public class BaseTest { - - public BaseTest() { - ShadowLog.stream = System.out; - ThreadUtils.setDeliver(new Executor() { - @Override - public void execute(@NonNull Runnable command) { - command.run(); - } - }); - Utils.init(RuntimeEnvironment.application); - } - - @Test - public void test() throws Exception { -// final CountDownLatch countDownLatch = new CountDownLatch(1); -// for (int i = 0; i < 100; i++) { -// final int finalI = i; -// ThreadUtils.Task task = new ThreadUtils.Task() { -// -// @Override -// public Void doInBackground() throws Throwable { -// for (int j = 0; j < 10000; j++) { -// Thread.sleep(100); -// System.out.println(j); -// } -// return null; -// } -// -// @Override -// public void onSuccess(Void result) { -// System.out.println(finalI + Thread.currentThread().getName()); -// } -// -// @Override -// public void onCancel() { -// System.out.println(finalI + "onCancel"); -// } -// -// @Override -// public void onFail(Throwable t) { -// System.out.println(finalI + "onFail" + t); -// } -// }; -// ThreadUtils.executeBySingle(task); -// Thread.sleep(100); -// task.cancel(); -// } -// countDownLatch.countDown(); -// countDownLatch.await(); - - -// final Scanner scanner = new Scanner(System.in); -// -// final CountDownLatch countDownLatch = new CountDownLatch(1); -// final Future submit = ThreadUtils.getSinglePool().submit(new Runnable() { -// @Override -// public void run() { -// System.out.println("haha0"); -// scanner.nextLine(); -// System.out.println("haha"); -// if (Thread.currentThread().isInterrupted()) { -// System.out.println(1); -// } -// for (int i = 0; i < 1000000; i++) { -// if (Thread.currentThread().isInterrupted()) { -// break; -// } -//// try { -//// Thread.sleep(100); -//// } catch (InterruptedException e) { -//// e.printStackTrace(); -//// } -// System.out.println(i); -// } -// } -// }); -// Thread.sleep(500); -// scanner.close(); -// Thread.sleep(500); -// submit.cancel(true); -// countDownLatch.await(); - -// final CountDownLatch countDownLatch = new CountDownLatch(1); -// final Scanner scanner = new Scanner(System.in); -// ExecutorService singlePool = ThreadUtils.getSinglePool(); -// final Thread[] thread = new Thread[1]; -// singlePool.execute(new Runnable() { -// @Override -// public void run() { -// thread[0] = Thread.currentThread(); -// for (int i = 0; i < 1000; i++) { -// if (Thread.currentThread().isInterrupted()) { -// break; -// } -// System.out.println(i); -// try { -// Thread.sleep(100); -// } catch (InterruptedException e) { -// e.printStackTrace(); -// } -// } -// System.out.println("scanner start"); -// scanner.nextLine(); -// System.out.println("scanner end"); -// -// } -// }); -// Thread.sleep(200); -// thread[0].interrupt(); -// System.out.println("haha"); -// singlePool.shutdownNow(); - - -// countDownLatch.await(); - -// -// final CountDownLatch countDownLatch = new CountDownLatch(1); -// final Scanner s = new Scanner(System.in); -// final ThreadUtils.SimpleTask task = new ThreadUtils.SimpleTask() { -// @Nullable -// @Override -// public Void doInBackground() throws Throwable { -// for (int i = 0; i < 1000; i++) { -//// if (isCanceled()) break; -// System.out.println(String.valueOf(i)); -// boolean b = s.hasNext(); -// System.out.println(b); -// } -// return null; -// } -// -// @Override -// public void onSuccess(@Nullable Void result) { -// countDownLatch.countDown(); -// } -// -// @Override -// public void onCancel() { -// System.out.println("---> cancel"); -// Thread.interrupted(); -// super.onCancel(); -// } -// }; -// -// ThreadUtils.SimpleTask task1 = new ThreadUtils.SimpleTask() { -// @Nullable -// @Override -// public Void doInBackground() throws Throwable { -// for (int i = 1000; i < 2000; i++) { -// System.out.println(String.valueOf(i)); -// Thread.sleep(10); -// } -// return null; -// } -// -// @Override -// public void onSuccess(@Nullable Void result) { -// countDownLatch.countDown(); -// } -// -// @Override -// public void onCancel() { -// System.out.println("---> cancel"); -// super.onCancel(); -// } -// }; -// -// ThreadUtils.executeBySingle(task); -// ThreadUtils.executeBySingle(task1); -// ThreadUtils.cancel(task); -// countDownLatch.await(); - - } - - static class Person implements Comparable { - - String name; - int age; - int time; - - public Person(String name) { - this.name = name; - } - - public Person(String name, int age, int time) { - this.name = name; - this.age = age; - this.time = time; - } - - @Override - public String toString() { - return name + age + time; - } - - @Override - public int compareTo(@NonNull Person o) { - int res = o.age - age; - if (res != 0) { - return res; - } - return time - o.time; - } - } -} diff --git a/utilcode/pkg/build.gradle b/utilcode/pkg/build.gradle deleted file mode 100644 index ea138dd9b4..0000000000 --- a/utilcode/pkg/build.gradle +++ /dev/null @@ -1,9 +0,0 @@ -apply { - from "${rootDir.path}/gradle/config/configLib.gradle" -} - -dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - api gradle.ext.dep.utilcode_export - api gradle.ext.dep.lib_common -} \ No newline at end of file From c8d98f89fd74b1247e9e492694fbf643f9d0b072 Mon Sep 17 00:00:00 2001 From: Blankj <625783482@qq.com> Date: Sat, 13 Jul 2019 20:51:18 +0800 Subject: [PATCH 007/181] see 07/13 log --- ApiUtils2333.class | Bin 0 -> 3547 bytes BusUtils2333.class | Bin 0 -> 9214 bytes .../com/blankj/launcher/app/LauncherApp.java | 15 - app/launcher/pkg/src/main/AndroidManifest.xml | 1 - app/mock/build.gradle | 11 - app/utilcode/export/build.gradle | 7 - app/utilcode/pkg/.gitignore | 1 - app/utilcode/pkg/proguard-rules.pro | 21 -- .../utilcode/pkg/feature/bus/BusActivity.kt | 72 ----- .../pkg/feature/bus/BusRemoteActivity.kt | 69 ---- .../main/res/layout/activity_bus_remote.xml | 23 -- art/frame.png | Bin 0 -> 57520 bytes build.gradle | 32 +- buildApp.gradle | 21 +- buildLib.gradle | 19 +- buildSrc/build.gradle | 4 +- buildSrc/src/main/groovy/BuildConfig.groovy | 39 +-- buildSrc/src/main/groovy/Config.groovy | 145 +++++---- buildSrc/src/main/groovy/ConfigUtils.groovy | 107 ++++++ buildSrc/src/main/groovy/DepConfig.groovy | 14 +- .../src/main/groovy/DepConfigFilter.groovy | 12 + buildSrc/src/main/groovy/GLog.groovy | 48 ++- {app => feature}/launcher/app/.gitignore | 0 {app => feature}/launcher/app/build.gradle | 1 - .../launcher/app/proguard-rules.pro | 0 .../launcher/app/src/main/AndroidManifest.xml | 0 .../com/blankj/launcher/app}/LauncherApp.java | 2 +- .../pkg => feature/main/app}/.gitignore | 0 {app => feature}/main/app/build.gradle | 1 - .../main/app}/proguard-rules.pro | 0 .../main/app/src/main/AndroidManifest.xml | 0 .../java/com/blankj/main/app/MainApp.java | 0 {app/main/app => feature/main/pkg}/.gitignore | 0 {app => feature}/main/pkg/build.gradle | 0 .../main/pkg}/proguard-rules.pro | 0 .../main/pkg/src/main/AndroidManifest.xml | 0 .../java/com/blankj/main/pkg/MainActivity.kt | 0 .../com/blankj/main/pkg/SplashActivity.kt | 0 .../pkg/src/main/res/layout/activity_main.xml | 0 .../main/pkg/src/main/res/values/strings.xml | 0 {app/main/pkg => feature/mock}/.gitignore | 0 .../subutil/pkg => feature/mock}/build.gradle | 0 .../pkg => feature/mock}/proguard-rules.pro | 0 .../mock/src/main/AndroidManifest.xml | 0 .../com/blankj/mock/api/SubUtilMockApi.java | 2 +- .../com/blankj/mock/api/UtilCodeMockApi.java | 9 +- {app/mock => feature/subutil/app}/.gitignore | 0 {app => feature}/subutil/app/build.gradle | 1 - .../subutil/app}/proguard-rules.pro | 0 .../subutil/app/src/main/AndroidManifest.xml | 0 .../java/com/blankj/subutil/app/SubUtilApp.kt | 0 .../app => feature/subutil/export}/.gitignore | 0 .../subutil/export}/build.gradle | 0 .../subutil/export}/proguard-rules.pro | 0 .../export/src/main/AndroidManifest.xml | 0 .../blankj/subutil/export/api/SubUtilApi.java | 2 +- .../export => feature/subutil/pkg}/.gitignore | 0 .../subutil}/pkg/build.gradle | 1 - .../subutil/pkg}/proguard-rules.pro | 0 .../subutil/pkg/src/main/AndroidManifest.xml | 0 .../pkg/src/main/assets/test_install_silent | Bin .../java/com/blankj/subutil/pkg/Config.kt | 0 .../blankj/subutil/pkg/SubUtilApiImpl.java | 2 +- .../subutil/pkg/feature/SubUtilActivity.kt | 0 .../pkg/feature/appStore/AppStoreActivity.kt | 0 .../pkg/feature/country/CountryActivity.kt | 0 .../feature/dangerous/DangerousActivity.kt | 0 .../pkg/feature/location/LocationActivity.kt | 0 .../pkg/feature/location/LocationService.kt | 0 .../pkg/feature/pinyin/PinyinActivity.kt | 0 .../blankj/subutil/pkg/helper/DialogHelper.kt | 0 .../subutil/pkg/helper/PermissionHelper.kt | 0 .../main/res/layout/activity_app_store.xml | 0 .../src/main/res/layout/activity_country.xml | 0 .../main/res/layout/activity_dangerous.xml | 0 .../src/main/res/layout/activity_location.xml | 0 .../src/main/res/layout/activity_pinyin.xml | 0 .../src/main/res/layout/activity_util_sub.xml | 0 .../pkg/src/main/res/values/strings.xml | 0 .../pkg => feature/utilcode/app}/.gitignore | 0 {app => feature}/utilcode/app/build.gradle | 1 - .../utilcode/app}/proguard-rules.pro | 0 .../utilcode/app/src/main/AndroidManifest.xml | 0 .../com/blankj/utilcode/app/UtilCodeApp.kt | 2 +- .../utilcode/export}/.gitignore | 0 feature/utilcode/export/build.gradle | 3 + .../utilcode/export}/proguard-rules.pro | 0 .../export/src/main/AndroidManifest.xml | 0 .../utilcode/export/api/UtilCodeApi.java | 8 +- .../utilcode/pkg}/.gitignore | 0 .../utilcode/pkg}/build.gradle | 2 +- .../utilcode/pkg}/proguard-rules.pro | 0 .../utilcode/pkg/src/main/AndroidManifest.xml | 14 +- .../pkg/src/main/assets/fonts/dnmbhs.ttf | Bin .../pkg/src/main/assets/test/sub/test.txt | 0 .../pkg/src/main/assets/test/test.txt | 0 .../utilcode/pkg/src/main/assets/test_install | Bin .../java/com/blankj/utilcode/pkg/Config.kt | 0 .../blankj/utilcode/pkg/UtilCodeApiImpl.java | 9 +- .../utilcode/pkg/feature/CoreUtilActivity.kt | 4 +- .../pkg/feature/activity/ActivityActivity.kt | 0 .../feature/activity/SubActivityActivity.kt | 0 .../feature/adaptScreen/AdaptCloseActivity.kt | 0 .../adaptScreen/AdaptHeightActivity.kt | 0 .../adaptScreen/AdaptScreenActivity.kt | 0 .../feature/adaptScreen/AdaptWidthActivity.kt | 0 .../utilcode/pkg/feature/api/ApiActivity.kt | 0 .../api/other/export/OtherModuleApi.java | 2 +- .../api/other/pkg/OtherPkgApiImpl.java | 2 +- .../utilcode/pkg/feature/app/AppActivity.kt | 0 .../utilcode/pkg/feature/bar/BarActivity.kt | 0 .../pkg/feature/bar/BarNavActivity.kt | 0 .../feature/bar/BarNotificationActivity.kt | 0 .../pkg/feature/bar/BarStatusActivity.kt | 0 .../pkg/feature/bar/BarStatusAlphaActivity.kt | 0 .../pkg/feature/bar/BarStatusAlphaFragment.kt | 0 .../pkg/feature/bar/BarStatusColorActivity.kt | 0 .../pkg/feature/bar/BarStatusColorFragment.kt | 0 .../feature/bar/BarStatusCustomActivity.kt | 0 .../feature/bar/BarStatusCustomFragment.kt | 0 .../feature/bar/BarStatusDrawerActivity.kt | 0 .../feature/bar/BarStatusFragmentActivity.kt | 0 .../feature/bar/BarStatusImageViewActivity.kt | 0 .../feature/bar/BarStatusImageViewFragment.kt | 0 .../feature/brightness/BrightnessActivity.kt | 0 .../utilcode/pkg/feature/bus/BusActivity.kt | 114 +++++++ .../pkg/feature/clean/CleanActivity.kt | 0 .../pkg/feature/click/ClickActivity.kt | 0 .../pkg/feature/device/DeviceActivity.kt | 0 .../feature/flashlight/FlashlightActivity.kt | 0 .../pkg/feature/fragment/ChildFragment.kt | 0 .../pkg/feature/fragment/ContainerFragment.kt | 0 .../pkg/feature/fragment/FragmentActivity.kt | 0 .../pkg/feature/fragment/RootFragment.kt | 0 .../pkg/feature/image/ImageActivity.kt | 0 .../pkg/feature/keyboard/KeyboardActivity.kt | 0 .../pkg/feature/language/LanguageActivity.kt | 0 .../utilcode/pkg/feature/log/LogActivity.kt | 0 .../feature/messenger/MessengerActivity.kt | 80 +++++ .../messenger/MessengerRemoteActivity.kt | 82 +++++ .../pkg/feature/metaData/MetaDataActivity.kt | 0 .../pkg/feature/network/NetworkActivity.kt | 0 .../utilcode/pkg/feature/path/PathActivity.kt | 0 .../feature/permission/PermissionActivity.kt | 0 .../pkg/feature/phone/PhoneActivity.kt | 0 .../pkg/feature/process/ProcessActivity.kt | 0 .../pkg/feature/reflect/ReflectActivity.kt | 0 .../pkg/feature/resource/ResourceActivity.kt | 0 .../utilcode/pkg/feature/rom/RomActivity.kt | 0 .../pkg/feature/screen/ScreenActivity.kt | 0 .../pkg/feature/sdcard/SDCardActivity.kt | 0 .../pkg/feature/snackbar/SnackbarActivity.kt | 3 +- .../pkg/feature/spStatic/SPStaticActivity.kt | 0 .../utilcode/pkg/feature/span/SpanActivity.kt | 0 .../utilcode/pkg/feature/toast/CustomToast.kt | 0 .../pkg/feature/toast/ToastActivity.kt | 0 .../pkg/feature/vibrate/VibrateActivity.kt | 0 .../utilcode/pkg/helper/DialogHelper.kt | 0 .../utilcode/pkg/helper/PermissionHelper.kt | 0 .../pkg/src/main/res/anim/fade_in_1000.xml | 0 .../pkg/src/main/res/anim/fade_out_1000.xml | 0 .../src/main/res/anim/slide_in_bottom_200.xml | 0 .../src/main/res/anim/slide_in_right_1000.xml | 0 .../main/res/anim/slide_out_bottom_200.xml | 0 .../src/main/res/anim/slide_out_left_1000.xml | 0 .../animator/fragment_slide_left_enter.xml | 0 .../res/animator/fragment_slide_left_exit.xml | 0 .../animator/fragment_slide_right_enter.xml | 0 .../animator/fragment_slide_right_exit.xml | 0 .../res/drawable/activity_activity_icon.png | Bin .../res/drawable/activity_activity_logo.png | Bin .../main/res/drawable/bar_status_custom.xml | 0 .../res/drawable/bar_status_nav_alpha.xml | 0 .../res/drawable/bar_status_nav_color.xml | 0 .../res/drawable/bar_status_nav_custom.xml | 0 .../res/drawable/bar_status_nav_image.xml | 0 .../res/drawable/click_shape_round_rect.xml | 0 .../src/main/res/drawable/fragment_nav.xml | 0 .../pkg/src/main/res/drawable/image_lena.jpg | Bin .../main/res/drawable/snackbar_custom_bg.xml | 0 .../src/main/res/drawable/span_cheetah.png | Bin .../res/drawable/span_shape_block_high.xml | 0 .../res/drawable/span_shape_block_low.xml | 0 .../res/drawable/toast_shape_round_rect.xml | 0 .../src/main/res/layout/activity_activity.xml | 0 .../main/res/layout/activity_activity_sub.xml | 0 .../main/res/layout/activity_adaptscreen.xml | 0 .../res/layout/activity_adaptscreen_close.xml | 0 .../layout/activity_adaptscreen_height.xml | 0 .../res/layout/activity_adaptscreen_width.xml | 0 .../pkg/src/main/res/layout/activity_api.xml | 0 .../pkg/src/main/res/layout/activity_app.xml | 0 .../pkg/src/main/res/layout/activity_bar.xml | 0 .../src/main/res/layout/activity_bar_nav.xml | 0 .../res/layout/activity_bar_notification.xml | 0 .../main/res/layout/activity_bar_status.xml | 0 .../res/layout/activity_bar_status_alpha.xml | 0 .../res/layout/activity_bar_status_color.xml | 0 .../res/layout/activity_bar_status_drawer.xml | 0 .../layout/activity_bar_status_fragment.xml | 0 .../layout/activity_bar_status_image_view.xml | 0 .../layout/activity_bar_status_swipe_back.xml | 0 .../main/res/layout/activity_brightness.xml | 0 .../pkg/src/main/res/layout/activity_bus.xml | 58 ++++ .../src/main/res/layout/activity_clean.xml | 0 .../src/main/res/layout/activity_click.xml | 0 .../src/main/res/layout/activity_device.xml | 0 .../main/res/layout/activity_flashlight.xml | 0 .../src/main/res/layout/activity_fragment.xml | 0 .../src/main/res/layout/activity_image.xml | 0 .../src/main/res/layout/activity_keyboard.xml | 0 .../src/main/res/layout/activity_language.xml | 0 .../pkg/src/main/res/layout/activity_log.xml | 0 .../main/res/layout/activity_messenger.xml | 8 +- .../res/layout/activity_messenger_remote.xml | 37 +++ .../src/main/res/layout/activity_metadata.xml | 0 .../src/main/res/layout/activity_network.xml | 0 .../pkg/src/main/res/layout/activity_path.xml | 0 .../main/res/layout/activity_permission.xml | 0 .../src/main/res/layout/activity_phone.xml | 0 .../src/main/res/layout/activity_process.xml | 0 .../src/main/res/layout/activity_reflect.xml | 0 .../src/main/res/layout/activity_resource.xml | 0 .../pkg/src/main/res/layout/activity_rom.xml | 0 .../src/main/res/layout/activity_screen.xml | 0 .../src/main/res/layout/activity_sdcard.xml | 0 .../src/main/res/layout/activity_snackbar.xml | 0 .../pkg/src/main/res/layout/activity_span.xml | 0 .../src/main/res/layout/activity_spstatic.xml | 0 .../src/main/res/layout/activity_toast.xml | 0 .../main/res/layout/activity_util_core.xml | 7 + .../src/main/res/layout/activity_vibrate.xml | 0 .../src/main/res/layout/dialog_fragment.xml | 0 .../src/main/res/layout/dialog_keyboard.xml | 0 .../pkg/src/main/res/layout/dialog_screen.xml | 0 .../pkg/src/main/res/layout/dialog_toast.xml | 0 .../res/layout/fragment_bar_status_alpha.xml | 0 .../res/layout/fragment_bar_status_color.xml | 0 .../res/layout/fragment_bar_status_custom.xml | 0 .../layout/fragment_bar_status_image_view.xml | 0 .../src/main/res/layout/fragment_child.xml | 0 .../main/res/layout/fragment_container.xml | 0 .../pkg/src/main/res/layout/fragment_root.xml | 0 .../pkg/src/main/res/layout/item_image.xml | 0 .../src/main/res/layout/item_image_header.xml | 0 .../src/main/res/layout/snackbar_custom.xml | 0 .../pkg/src/main/res/layout/toast_custom.xml | 0 .../src/main/res/menu/navigation_fragment.xml | 0 .../main/res/menu/navigation_status_bar.xml | 0 .../utilcode/pkg/src/main/res/raw/test.txt | 0 .../src/main/res/transition/explode_1000.xml | 0 .../pkg/src/main/res/transition/fade_1000.xml | 0 .../src/main/res/transition/slide_1000.xml | 0 .../src/main/res/values-en-rUS/strings.xml | 0 .../src/main/res/values-zh-rCN/strings.xml | 0 .../pkg/src/main/res/values/strings.xml | 16 +- .../pkg/src/main/res/values/styles.xml | 0 gradle.properties | 3 +- gradle/upload/pluginPublish.gradle | 13 - lib/base/build.gradle | 14 +- .../com/blankj/lib/base/BaseApplication.java | 5 +- .../com/blankj/lib/base/BaseLazyFragment.java | 2 +- .../java/com/blankj/lib/base/IBaseView.java | 2 +- .../java/com/blankj/lib/base/rv/BaseCell.java | 2 +- lib/common/build.gradle | 2 +- .../blankj/lib/common/CommonApplication.java | 2 +- .../blankj/lib/common/CommonBackActivity.java | 2 +- .../com/blankj/lib/common/CommonConfig.java | 2 +- .../blankj/lib/common/CommonTaskActivity.java | 2 +- .../lib/common/CommonTitleActivity.java | 2 +- lib/subutil/build.gradle | 12 +- .../blankj/subutil/util/DangerousUtils.java | 2 +- .../blankj/subutil/util/http/HttpUtils.java | 2 +- .../com/blankj/subutil/util/http/Request.java | 2 +- .../blankj/subutil/util/http/Response.java | 2 +- .../subutil/util/http/ResponseCallback.java | 2 +- .../blankj/subutil/util/http/SSLConfig.java | 2 +- .../subutil/util/http/HttpUtilsTest.java | 2 +- .../blankj/subutil/util/http/UserBean.java | 2 +- .../{README-STATIC-BUS.md => README-API.md} | 4 +- lib/utilcode/README-BUS.md | 94 ++++++ lib/utilcode/README-CN.md | 7 +- lib/utilcode/build.gradle | 14 +- lib/utilcode/src/main/AndroidManifest.xml | 2 +- .../com/blankj/utilcode/util/ApiUtils.java | 37 ++- .../com/blankj/utilcode/util/BusUtils.java | 278 +++++++++++++--- .../com/blankj/utilcode/util/ColorUtils.java | 2 +- .../com/blankj/utilcode/util/LogUtils.java | 1 - .../blankj/utilcode/util/MessengerUtils.java | 98 +++--- .../utilcode/util/NotificationUtils.java | 2 +- .../com/blankj/utilcode/util/ThreadUtils.java | 92 ++++-- .../blankj/utilcode/util/ThrowableUtils.java | 2 +- .../com/blankj/utilcode/util/ViewUtils.java | 2 +- .../blankj/utilcode/util/ApiUtilsTest.java | 49 +++ .../blankj/utilcode/util/BusUtilsTest.java | 205 ++++++++++++ .../blankj/utilcode/util/ColorUtilsTest.java | 2 +- .../blankj/utilcode/util/ThreadUtilsTest.java | 37 +++ plugin/api-gradle-plugin/build.gradle | 46 +-- ...assVisitor.groovy => ApiClassVisitor.java} | 33 +- .../main/java/com/blankj/api/ApiInject.groovy | 6 +- .../main/java/com/blankj/api/ApiPlugin.groovy | 5 +- .../main/java/com/blankj/api/ApiScan.groovy | 7 +- .../java/com/blankj/api/ApiTransform.groovy | 7 +- ...sitor.groovy => ApiUtilsClassVisitor.java} | 2 +- .../com/blankj/api}/util/JsonUtils.groovy | 2 +- .../com/blankj/{ => api}/util/LogUtils.groovy | 2 +- .../com/blankj/{ => api}/util/ZipUtils.java | 2 +- .../src/test/java/com/blankj/api/ApiTest.java | 71 ++++ .../src/test/java/com/blankj/api/Test.java | 133 -------- .../com/blankj/utilcode/util/ApiUtils.java | 84 ++--- plugin/bus-gradle-plugin/CHANGELOG.md | 3 + plugin/bus-gradle-plugin/build.gradle | 44 +-- .../com/blankj/bus/BusClassVisitor.groovy | 54 ---- .../java/com/blankj/bus/BusClassVisitor.java | 119 +++++++ .../src/main/java/com/blankj/bus/BusInfo.java | 60 ++++ .../main/java/com/blankj/bus/BusInject.groovy | 8 +- .../main/java/com/blankj/bus/BusPlugin.groovy | 5 +- .../main/java/com/blankj/bus/BusScan.groovy | 8 +- .../java/com/blankj/bus/BusTransform.groovy | 30 +- ...sitor.groovy => BusUtilsClassVisitor.java} | 34 +- .../com/blankj/bus}/util/JsonUtils.groovy | 2 +- .../com/blankj/{ => bus}/util/LogUtils.groovy | 2 +- .../com/blankj/{ => bus}/util/ZipUtils.java | 2 +- .../src/test/java/com/blankj/bus/BusTest.java | 107 ++++++ .../com/blankj/utilcode/util/BusUtils.java | 306 ++++++++++++++++++ 325 files changed, 2409 insertions(+), 918 deletions(-) create mode 100644 ApiUtils2333.class create mode 100644 BusUtils2333.class delete mode 100644 app/launcher/app/src/main/java/com/blankj/launcher/app/LauncherApp.java delete mode 100644 app/launcher/pkg/src/main/AndroidManifest.xml delete mode 100644 app/mock/build.gradle delete mode 100644 app/utilcode/export/build.gradle delete mode 100644 app/utilcode/pkg/.gitignore delete mode 100644 app/utilcode/pkg/proguard-rules.pro delete mode 100644 app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusActivity.kt delete mode 100644 app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusRemoteActivity.kt delete mode 100644 app/utilcode/pkg/src/main/res/layout/activity_bus_remote.xml create mode 100644 art/frame.png create mode 100644 buildSrc/src/main/groovy/ConfigUtils.groovy create mode 100644 buildSrc/src/main/groovy/DepConfigFilter.groovy rename {app => feature}/launcher/app/.gitignore (100%) rename {app => feature}/launcher/app/build.gradle (75%) rename {app => feature}/launcher/app/proguard-rules.pro (100%) rename {app => feature}/launcher/app/src/main/AndroidManifest.xml (100%) rename {app/launcher/pkg/src/main/java/com/blankj/launcher/pkg => feature/launcher/app/src/main/java/com/blankj/launcher/app}/LauncherApp.java (94%) rename {app/launcher/pkg => feature/main/app}/.gitignore (100%) rename {app => feature}/main/app/build.gradle (72%) rename {app/launcher/pkg => feature/main/app}/proguard-rules.pro (100%) rename {app => feature}/main/app/src/main/AndroidManifest.xml (100%) rename {app => feature}/main/app/src/main/java/com/blankj/main/app/MainApp.java (100%) rename {app/main/app => feature/main/pkg}/.gitignore (100%) rename {app => feature}/main/pkg/build.gradle (100%) rename {app/main/app => feature/main/pkg}/proguard-rules.pro (100%) rename {app => feature}/main/pkg/src/main/AndroidManifest.xml (100%) rename {app => feature}/main/pkg/src/main/java/com/blankj/main/pkg/MainActivity.kt (100%) rename {app => feature}/main/pkg/src/main/java/com/blankj/main/pkg/SplashActivity.kt (100%) rename {app => feature}/main/pkg/src/main/res/layout/activity_main.xml (100%) rename {app => feature}/main/pkg/src/main/res/values/strings.xml (100%) rename {app/main/pkg => feature/mock}/.gitignore (100%) rename {app/subutil/pkg => feature/mock}/build.gradle (100%) rename {app/main/pkg => feature/mock}/proguard-rules.pro (100%) rename {app => feature}/mock/src/main/AndroidManifest.xml (100%) rename {app => feature}/mock/src/main/java/com/blankj/mock/api/SubUtilMockApi.java (95%) rename {app => feature}/mock/src/main/java/com/blankj/mock/api/UtilCodeMockApi.java (75%) rename {app/mock => feature/subutil/app}/.gitignore (100%) rename {app => feature}/subutil/app/build.gradle (71%) rename {app/mock => feature/subutil/app}/proguard-rules.pro (100%) rename {app => feature}/subutil/app/src/main/AndroidManifest.xml (100%) rename {app => feature}/subutil/app/src/main/java/com/blankj/subutil/app/SubUtilApp.kt (100%) rename {app/subutil/app => feature/subutil/export}/.gitignore (100%) rename {app/utilcode/pkg => feature/subutil/export}/build.gradle (100%) rename {app/subutil/app => feature/subutil/export}/proguard-rules.pro (100%) rename {app => feature}/subutil/export/src/main/AndroidManifest.xml (100%) rename {app => feature}/subutil/export/src/main/java/com/blankj/subutil/export/api/SubUtilApi.java (94%) rename {app/subutil/export => feature/subutil/pkg}/.gitignore (100%) rename {app/launcher => feature/subutil}/pkg/build.gradle (99%) rename {app/subutil/export => feature/subutil/pkg}/proguard-rules.pro (100%) rename {app => feature}/subutil/pkg/src/main/AndroidManifest.xml (100%) rename {app => feature}/subutil/pkg/src/main/assets/test_install_silent (100%) rename {app => feature}/subutil/pkg/src/main/java/com/blankj/subutil/pkg/Config.kt (100%) rename {app => feature}/subutil/pkg/src/main/java/com/blankj/subutil/pkg/SubUtilApiImpl.java (95%) rename {app => feature}/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/SubUtilActivity.kt (100%) rename {app => feature}/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/appStore/AppStoreActivity.kt (100%) rename {app => feature}/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/country/CountryActivity.kt (100%) rename {app => feature}/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/dangerous/DangerousActivity.kt (100%) rename {app => feature}/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/location/LocationActivity.kt (100%) rename {app => feature}/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/location/LocationService.kt (100%) rename {app => feature}/subutil/pkg/src/main/java/com/blankj/subutil/pkg/feature/pinyin/PinyinActivity.kt (100%) rename {app => feature}/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/DialogHelper.kt (100%) rename {app => feature}/subutil/pkg/src/main/java/com/blankj/subutil/pkg/helper/PermissionHelper.kt (100%) rename {app => feature}/subutil/pkg/src/main/res/layout/activity_app_store.xml (100%) rename {app => feature}/subutil/pkg/src/main/res/layout/activity_country.xml (100%) rename {app => feature}/subutil/pkg/src/main/res/layout/activity_dangerous.xml (100%) rename {app => feature}/subutil/pkg/src/main/res/layout/activity_location.xml (100%) rename {app => feature}/subutil/pkg/src/main/res/layout/activity_pinyin.xml (100%) rename {app => feature}/subutil/pkg/src/main/res/layout/activity_util_sub.xml (100%) rename {app => feature}/subutil/pkg/src/main/res/values/strings.xml (100%) rename {app/subutil/pkg => feature/utilcode/app}/.gitignore (100%) rename {app => feature}/utilcode/app/build.gradle (71%) rename {app/subutil/pkg => feature/utilcode/app}/proguard-rules.pro (100%) rename {app => feature}/utilcode/app/src/main/AndroidManifest.xml (100%) rename {app => feature}/utilcode/app/src/main/java/com/blankj/utilcode/app/UtilCodeApp.kt (88%) rename {app/utilcode/app => feature/utilcode/export}/.gitignore (100%) create mode 100644 feature/utilcode/export/build.gradle rename {app/utilcode/app => feature/utilcode/export}/proguard-rules.pro (100%) rename {app => feature}/utilcode/export/src/main/AndroidManifest.xml (100%) rename {app => feature}/utilcode/export/src/main/java/com/blankj/utilcode/export/api/UtilCodeApi.java (71%) rename {app/utilcode/export => feature/utilcode/pkg}/.gitignore (100%) rename {app/subutil/export => feature/utilcode/pkg}/build.gradle (53%) rename {app/utilcode/export => feature/utilcode/pkg}/proguard-rules.pro (100%) rename {app => feature}/utilcode/pkg/src/main/AndroidManifest.xml (97%) rename {app => feature}/utilcode/pkg/src/main/assets/fonts/dnmbhs.ttf (100%) rename {app => feature}/utilcode/pkg/src/main/assets/test/sub/test.txt (100%) rename {app => feature}/utilcode/pkg/src/main/assets/test/test.txt (100%) rename {app => feature}/utilcode/pkg/src/main/assets/test_install (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/Config.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/UtilCodeApiImpl.java (75%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/CoreUtilActivity.kt (97%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/ActivityActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/activity/SubActivityActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptCloseActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptHeightActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptScreenActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/adaptScreen/AdaptWidthActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/api/ApiActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/api/other/export/OtherModuleApi.java (96%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/api/other/pkg/OtherPkgApiImpl.java (96%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/app/AppActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNavActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarNotificationActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusAlphaFragment.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusColorFragment.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusCustomFragment.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusDrawerActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusFragmentActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bar/BarStatusImageViewFragment.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/brightness/BrightnessActivity.kt (100%) create mode 100644 feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusActivity.kt rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/clean/CleanActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/click/ClickActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/device/DeviceActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/flashlight/FlashlightActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ChildFragment.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/ContainerFragment.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/FragmentActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/fragment/RootFragment.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/image/ImageActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/keyboard/KeyboardActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/language/LanguageActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/log/LogActivity.kt (100%) create mode 100644 feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/messenger/MessengerActivity.kt create mode 100644 feature/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/messenger/MessengerRemoteActivity.kt rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/metaData/MetaDataActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/network/NetworkActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/path/PathActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/permission/PermissionActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/phone/PhoneActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/process/ProcessActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/reflect/ReflectActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/resource/ResourceActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/rom/RomActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/screen/ScreenActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/sdcard/SDCardActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/snackbar/SnackbarActivity.kt (98%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/spStatic/SPStaticActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/span/SpanActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/CustomToast.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/toast/ToastActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/vibrate/VibrateActivity.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/DialogHelper.kt (100%) rename {app => feature}/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/helper/PermissionHelper.kt (100%) rename {app => feature}/utilcode/pkg/src/main/res/anim/fade_in_1000.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/anim/fade_out_1000.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/anim/slide_in_bottom_200.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/anim/slide_in_right_1000.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/anim/slide_out_bottom_200.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/anim/slide_out_left_1000.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/animator/fragment_slide_left_enter.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/animator/fragment_slide_left_exit.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/animator/fragment_slide_right_enter.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/animator/fragment_slide_right_exit.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/drawable/activity_activity_icon.png (100%) rename {app => feature}/utilcode/pkg/src/main/res/drawable/activity_activity_logo.png (100%) rename {app => feature}/utilcode/pkg/src/main/res/drawable/bar_status_custom.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/drawable/bar_status_nav_alpha.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/drawable/bar_status_nav_color.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/drawable/bar_status_nav_custom.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/drawable/bar_status_nav_image.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/drawable/click_shape_round_rect.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/drawable/fragment_nav.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/drawable/image_lena.jpg (100%) rename {app => feature}/utilcode/pkg/src/main/res/drawable/snackbar_custom_bg.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/drawable/span_cheetah.png (100%) rename {app => feature}/utilcode/pkg/src/main/res/drawable/span_shape_block_high.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/drawable/span_shape_block_low.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/drawable/toast_shape_round_rect.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_activity.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_activity_sub.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_adaptscreen.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_adaptscreen_close.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_adaptscreen_height.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_adaptscreen_width.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_api.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_app.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_bar.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_bar_nav.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_bar_notification.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_bar_status.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_bar_status_alpha.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_bar_status_color.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_bar_status_drawer.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_bar_status_fragment.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_bar_status_image_view.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_bar_status_swipe_back.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_brightness.xml (100%) create mode 100644 feature/utilcode/pkg/src/main/res/layout/activity_bus.xml rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_clean.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_click.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_device.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_flashlight.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_fragment.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_image.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_keyboard.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_language.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_log.xml (100%) rename app/utilcode/pkg/src/main/res/layout/activity_bus.xml => feature/utilcode/pkg/src/main/res/layout/activity_messenger.xml (72%) create mode 100644 feature/utilcode/pkg/src/main/res/layout/activity_messenger_remote.xml rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_metadata.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_network.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_path.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_permission.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_phone.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_process.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_reflect.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_resource.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_rom.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_screen.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_sdcard.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_snackbar.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_span.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_spstatic.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_toast.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_util_core.xml (97%) rename {app => feature}/utilcode/pkg/src/main/res/layout/activity_vibrate.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/dialog_fragment.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/dialog_keyboard.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/dialog_screen.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/dialog_toast.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/fragment_bar_status_alpha.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/fragment_bar_status_color.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/fragment_bar_status_custom.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/fragment_bar_status_image_view.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/fragment_child.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/fragment_container.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/fragment_root.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/item_image.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/item_image_header.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/snackbar_custom.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/layout/toast_custom.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/menu/navigation_fragment.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/menu/navigation_status_bar.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/raw/test.txt (100%) rename {app => feature}/utilcode/pkg/src/main/res/transition/explode_1000.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/transition/fade_1000.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/transition/slide_1000.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/values-en-rUS/strings.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/values-zh-rCN/strings.xml (100%) rename {app => feature}/utilcode/pkg/src/main/res/values/strings.xml (95%) rename {app => feature}/utilcode/pkg/src/main/res/values/styles.xml (100%) delete mode 100755 gradle/upload/pluginPublish.gradle rename lib/utilcode/{README-STATIC-BUS.md => README-API.md} (96%) create mode 100644 lib/utilcode/README-BUS.md create mode 100644 lib/utilcode/src/test/java/com/blankj/utilcode/util/ApiUtilsTest.java create mode 100644 lib/utilcode/src/test/java/com/blankj/utilcode/util/BusUtilsTest.java rename plugin/api-gradle-plugin/src/main/java/com/blankj/api/{ApiClassVisitor.groovy => ApiClassVisitor.java} (71%) rename plugin/api-gradle-plugin/src/main/java/com/blankj/api/{ApiUtilsClassVisitor.groovy => ApiUtilsClassVisitor.java} (98%) rename plugin/{bus-gradle-plugin/src/main/java/com/blankj => api-gradle-plugin/src/main/java/com/blankj/api}/util/JsonUtils.groovy (93%) rename plugin/api-gradle-plugin/src/main/java/com/blankj/{ => api}/util/LogUtils.groovy (96%) rename plugin/api-gradle-plugin/src/main/java/com/blankj/{ => api}/util/ZipUtils.java (99%) create mode 100644 plugin/api-gradle-plugin/src/test/java/com/blankj/api/ApiTest.java delete mode 100644 plugin/api-gradle-plugin/src/test/java/com/blankj/api/Test.java delete mode 100644 plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusClassVisitor.groovy create mode 100644 plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusClassVisitor.java create mode 100644 plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/BusInfo.java rename plugin/bus-gradle-plugin/src/main/java/com/blankj/bus/{BusUtilsClassVisitor.groovy => BusUtilsClassVisitor.java} (52%) rename plugin/{api-gradle-plugin/src/main/java/com/blankj => bus-gradle-plugin/src/main/java/com/blankj/bus}/util/JsonUtils.groovy (93%) rename plugin/bus-gradle-plugin/src/main/java/com/blankj/{ => bus}/util/LogUtils.groovy (96%) rename plugin/bus-gradle-plugin/src/main/java/com/blankj/{ => bus}/util/ZipUtils.java (99%) create mode 100644 plugin/bus-gradle-plugin/src/test/java/com/blankj/bus/BusTest.java create mode 100644 plugin/bus-gradle-plugin/src/test/java/com/blankj/utilcode/util/BusUtils.java diff --git a/ApiUtils2333.class b/ApiUtils2333.class new file mode 100644 index 0000000000000000000000000000000000000000..f3f1047c91abccd2c1b4f4f972bc55f5c93269d1 GIT binary patch literal 3547 zcmb7H>2nih82@dPbd&8?N`Yb(B|w3;P(nRG+gOfr70cCz0v_l#UE3|mZrt4f^}g>D z4^Y(MgEM^L13FqzXVj4yo$*idgZg{l-837@7;GoI@9`YJ=Xrn6^Co}({o~I7?!gxt zR^YgXl{l{AF%2;sPjTgO6^4e!U@|Ub@)~Z%L=#LrA*Pe!F{Q#1?`ah$G_>G&5(V)t ziia&8(;7PA2(6NeCxr=Dg_nYlauO$#IHlnnxeaN;=cd%f1 zp6Mx2w;P_htz@ZqUO`L_UQnP78&A#baS9Wr%hlYr-3nTVr;U?FreN5UnNi=h?8$xw z&4Z5Z`G)O}8HKW$#EUdoq>+6_Nx_0ZqwHIS3>PS#8nq^E!!Nt0f_=5S*@$@wu75c1 z6f@)WcVaptY~-B@Qw}n8aF`2TM~JiWL3BsN zv+a5W*<4PZ!`^JJ?|*ok4>mB=MRSbVcLJ_GCeqRs@i|AqWJN?l6EiR*`IzVNtfqWj z3ektq5~LAjA+#b+0!~ET9vBxK6C@#%9l_%z5&4~`^JdAn9Ge0$CQ-q<`VbDcF=9F}-rZ?~8a1G0o3pe^)M$CY;XBn?TarFNoG~dL#32 zQ{wCtqfXh)o4YJg5zWk_tjrCfu5@<6dljsaH72`2-m&v#*EMZF!^RN~_ZZ$3L)NhY z88W*nJ-2ZeGCKNkua1}Tii%ftyoT3x3}LU12QjRmtL`~hlB{D7*vytz>pmdT_OcZ; zJFOBzUs}f-cvC#y(($(N^$y-;AE>HIdgyo$?<-hTU7llsiVt*rh%*WjxhXT9Wm_0X zPZ?g?cG4xoHHs!{zF>M@nu+mzx19GKcY}(LbbO3Y$oPTugkyU4T0bpn-z+k58+3e% zvkF$!4Ou};6;r?w0;sFj(aXcHFU2$|SYKZ*dXXe6xvfc8Zpw8|1s%1Sr8rtHnQmTO zPn4=D`JfufG8vX6lwt0U_21}4HKwkg{@Rc&sy&2UaAa^j;iyitmDPCeGNR zLt%kPAX)koTA1~Pt*x_IBx0S#;#n*a$_)|a{s^k2VThWzCqi?}q%k0V6>Zl$-a<>f zO!#C9lrxN0rS(g6mS9qsHh@{!xBd^D>pr&sw|T24 znR&}HBRiRsLpVsQ`!I(6DB}RFj^HdtX>|-2St^3C_t5(oR#9p{N1HJri52J0r8%-) zl1x$P?<-n4$Xp-d{u(6yq4|W05f!5UfI4MzD5G Lis=|Z7qou?now`% literal 0 HcmV?d00001 diff --git a/BusUtils2333.class b/BusUtils2333.class new file mode 100644 index 0000000000000000000000000000000000000000..d5708c82a86f38538695ad74d29933fcbcfbc62d GIT binary patch literal 9214 zcmb7J349dSdH+9YcW1R4amW&|7>ob`LI>iIF%}>L;*ybsjRaU2AH!;p7FN5;?h1p` zBZuQQx6`yGc0$rLwW*sXwrngxh+`5G)4FL&lh|qFq>dXqX^u8W<1}$F^#8q?ogE!S z^8S9BdGqFb-}}D*cfQecmp}If01aw?1p9GOF8>}F;ta8q}96j*!EPS+fFN( zEy<*vZcbR4jGZymQiZ}z0~}P7uCq67TitD`Zd<|NY)kTBN+Hm`yR}uJwDpj6#HvqN z$)5V12M*b>>{_nv+_-JztB!0sp6ubPlIB!0leLoBJyv4C4yzi4Yx?xQ?N*6678&A}8f=i1!;yp<#JCLRvTSvZK=aa(S%16*)XZ-}Om`!V&$aHF7r`03d zidK5#cHc@)_*dpw$5MUu2dMJlL-itGjL_&oJ^AeBM5fYZsJEEo(@!?rnC@xl$i`!b zkLmqxn|MDBaSn;`1R7%lN4e0tcru=CqCu*b?xD$=wGF4X#*=pYK;Hp7-Dw?25Y5uo zRLn~3vC?sQb|(Yb-grh~Ve5q262^dRq)?o;d*Yd_ou>W@{Z&^pi*}bBnt9>h#LT|2 ztVPAbtkpwLiHReNL(yXo4kVpXQNNY8`Z|yGbJiI<^P!A32BUW$y*=ym_Ha%eg>t_x zt_SH24~V9bfn=UE(4Wc>ixDea&1A(AKc}%8`*~YwDiaZQj=wNY({^9#h@E>Z%BCC+ zcPW%rEgg%ALO4f4>-5;!79D*tLa>PRlQC^cPBWb%6oS;)rq2EVWrWcQW{h+r0`0oe zLZ6FYEf|>^Iek|rl}c9TawxIF-qm$%Y9ps zRi&PmN4I0bI*EJIx+sj%k!G>DKyg-L>SZzASh;|rlt9lch{4P00 zI7Kg9;FI1d1F7uR)IhR(%h8zKpN*%I)MCDms6Ev&5bJfM%G0oBvRpDg;>jba!?yEU zp<_~bz6pIa^x^bCGU;T_GM{9-+}X8;s#loCqM2wJA&pm?dCzG9}pAJU#0^OFrEypCnvYn(ogO?p(yu+f}YuzFgtRB<$!$%2m>}o2uR{ zd<93jd%@8aa#<;tRdQ)ip!ZLhkSbTK74Kg(DN1I)b+Lq710x-&fppB?8kdS!LU-1c zdYM!o6B%SpJdHC7i}S@cmP*D3(rG)Ht!LNb4!2vGUS<&!hmla2o~QO+q>wQ27P;ID z)`6uH>*U53#Zb#lwL+~l@n`t3i9g5vCjM3~HV&G2H{NUFQMtTdE?<(%dA!HOhwy;H z%+Ymp(?Hy5?jkv58!Jq;N;SykdQ+|D7U~AI##A@r0aG<9Mp{W;A0}#=B>y}Djs9ah zlY7(gti3UvwvLh1RO{4w6Q98SBbW$Ms!82sstsx*6QHR!sb*7cR$JKj<#~IV+EiQR z)wI#Nm};BaVyf+Gy`fr6b+g*RSnuq$D-H}~DpCh4)+x+ss<_9>R3uZ`id@CAyDJXZ z2UBT#nW0)u)kdsTyNLNH{*IgY*0VYYk7-R6afgL{lzmKQnTb#1?@bKi2@|KqJ$N#C z8+uK(Q`r2GjBZi4n)qY%G6?fh>r`f{U8+N&V$^i|=nQA7PH~iZdAf0v9DA{eU1^2* z@>fjUC!+0Edzgz%wU^$lZc~gKAFxjJGS8c;OFAE)nBylWg_^vC6Q(8;@4!3#h&o*s zce`D!r?(3D&Q#8Zt_`L%RdmO@lS{G{lG8}vE{+*U?rvqg&7Tkfh1v;eD*Z>FMH7=V zekR4%e^LtPf-dLiI*F1Zb&uP0YcO?J-@=aB%BFY@n>7~UTrDfjzsgk_g*$(Lfg9Ui zUUlYb4R!wjU2~0pn_Sw@%aiL_eWlBtVxMC5_uEPKDRq7xt{DFIz?pKB7A-!4ew-af z)8~rYaw%?MR!JR$M1MqItS8CcAc52V7jne3@0V_z-8_8?t!^qaqPfqJGl;@07HP?c zEDgDRwTU^!UBk?nuBB&;c%AbAk*wFswA)9?fu}aI3?%i#$oAe7Cq(IY*ld7BV|}LP zkf}Or#glYeU%Yo5Tlu6oaYO+D}CJENy;OqDO0}?C6Y9!(^ha` zzh%Hma0`P8)s^UiR0m4oWq(%zzUqe zNBQ9^h}lxHIhu_g^g1e3o66!z@p%Tw-A#(j-eM?pyH(?!pftf-v9Btv-dKnzJyw zYU`qbXs|pKHHJ}g22%>LH!op?i-BdBgL*B|E@!d33EAKeHI_1B<<-=4rScLLnPXk1 zb~1W9M?pPe4bpngm4e8RjYW7D?svsoO%9@0_%x;xt7)SpSxNd;K5WAH6K&HX{OQ$r zOdri-HF?}HE{}KPJ)`BQegdVZam{ERjpVU*1P{Rh)P)V9%VQ%k5cG;fmzrUejb_qB zFmKXKW;lczOs*iC_fajLkl9sUMWpi4+%{39=5a-0XL=QpW{hUCl_G7MK%@_h70I#I z%+cI#rbs)+73qU`z!hm8@A5OqV+gYz=aAEE(i>WoSVwH)+K!`X11#EJHEpZfEf9M+rZdm*GyPhr9SO{B9;U3r&d8 zWZmdsdb^EYBe|fOLAQ_}(EkE|sl%_!3)n6lFgy=%2Pa^UlU@>yL;n%dKggLX1cH~b z#=t`cK5F1&SGXcz;DmmXIVb}kf1RKd$N|F#lfl)!)H>p#dOa#HYBr z0D_c6szd)bq<7vu%sIjAS_Cg4YT%JKaE-?4rICytOlFGYSqvv9WJm3y_E_TNl7ZduNi!DWv zE>`EcSjF%2F&?oU@NhE)E~Kd8>YCcZVcak}>Aa0e=j~d=3Wv@UEbJAlu+Faqv>Q*I zF5lOvx`g;Xx@Zx@REM+ag!2L)>T4X-=ak;)p-#+Cq45G{RYwEESlbwk2F2Hh^xEg@MJ?p0$K9qf0e=Rcb)$MZ3NK-mfyXYP+`!{b`0^m_LhvfL5NLOl zuCF#&8*&02kz=grJn@+@};lf|rdpnI6iS@Y;5>*($4nP)cQ^iuegi|>3=9WI$Ik|?%AcjTNI%qY7A;-0R9!hOcr!Ee zDePzr6|6R*p&_*HEjK<*BK}OdNIq&)`~s1)XQ|fmQ$+hw)Z%lr<>x({k+&yPgJ-D* z&r%KAJ_37#wpoB&7LmtUTG^3ZT}G{e&ofZ?QBJ;yIkKylX)cldywn&9yuqtMbiij( zB4V~H!dO)vcnIVAa6WSk4%V{Oc?7Fum89iRG~}k`xiVr}ZZx<_W7MD<>>R=^drw|@ z=_DG)($617PaoOYRai^!kTox!M42!j!Y-+SdekY2d@J2_khw0dXlg|i7yb^r}gL=jtH@5!t7jw zMw!BFDtWKaGk~-5Vb=i5q*kwBCMfRz|oW7u8i#igLZc-qF3lZMmw{fRSsX+>UMKW|e3RfDD`t5PMJhb2&(|`#z*C%@ z2_pChc1KcBBFr)3MlyPiB{e`_&M@CNJKe~;Pz8BdbIb>qSGg>V zfA)^^*Xd1p<|)1XNtBAP{xgt#aQGVM3YgmN;(aB(?+#YOJ1NrLyjzQl*vOqgY(tbr UJi$JAHY=s`tHUGsWT@!>0Y^8b^#A|> literal 0 HcmV?d00001 diff --git a/app/launcher/app/src/main/java/com/blankj/launcher/app/LauncherApp.java b/app/launcher/app/src/main/java/com/blankj/launcher/app/LauncherApp.java deleted file mode 100644 index c9a283b6f3..0000000000 --- a/app/launcher/app/src/main/java/com/blankj/launcher/app/LauncherApp.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.blankj.launcher.app; - -/** - *
- *     author: Blankj
- *     blog  : http://blankj.com
- *     time  : 2016/10/12
- *     desc  : app about launcher
- * 
- */ -public class LauncherApp extends com.blankj.launcher.pkg.LauncherApp { - -} - - diff --git a/app/launcher/pkg/src/main/AndroidManifest.xml b/app/launcher/pkg/src/main/AndroidManifest.xml deleted file mode 100644 index 275b3c25df..0000000000 --- a/app/launcher/pkg/src/main/AndroidManifest.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/app/mock/build.gradle b/app/mock/build.gradle deleted file mode 100644 index c60dba9bbc..0000000000 --- a/app/mock/build.gradle +++ /dev/null @@ -1,11 +0,0 @@ -apply { - from "${rootDir.path}/buildLib.gradle" -} - -dependencies { - for (config in Config.depConfig) { - if (config.key.endsWith("_export")) { - api config.value.dep - } - } -} \ No newline at end of file diff --git a/app/utilcode/export/build.gradle b/app/utilcode/export/build.gradle deleted file mode 100644 index 691e76652d..0000000000 --- a/app/utilcode/export/build.gradle +++ /dev/null @@ -1,7 +0,0 @@ -apply { - from "${rootDir.path}/buildLib.gradle" -} - -dependencies { - api Config.depConfig.lib_common.dep -} \ No newline at end of file diff --git a/app/utilcode/pkg/.gitignore b/app/utilcode/pkg/.gitignore deleted file mode 100644 index 796b96d1c4..0000000000 --- a/app/utilcode/pkg/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/build diff --git a/app/utilcode/pkg/proguard-rules.pro b/app/utilcode/pkg/proguard-rules.pro deleted file mode 100644 index f1b424510d..0000000000 --- a/app/utilcode/pkg/proguard-rules.pro +++ /dev/null @@ -1,21 +0,0 @@ -# Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# If your project uses WebView with JS, uncomment the following -# and specify the fully qualified class name to the JavaScript interface -# class: -#-keepclassmembers class fqcn.of.javascript.interface.for.webview { -# public *; -#} - -# Uncomment this to preserve the line number information for -# debugging stack traces. -#-keepattributes SourceFile,LineNumberTable - -# If you keep the line number information, uncomment this to -# hide the original source file name. -#-renamesourcefileattribute SourceFile diff --git a/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusActivity.kt deleted file mode 100644 index f8a6c9a686..0000000000 --- a/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusActivity.kt +++ /dev/null @@ -1,72 +0,0 @@ -package com.blankj.utilcode.pkg.feature.bus - -import android.content.Context -import android.content.Intent -import android.os.Bundle -import android.view.View -import com.blankj.lib.common.CommonTitleActivity -import com.blankj.utilcode.pkg.R -import com.blankj.utilcode.util.BusUtils -import com.blankj.utilcode.util.LogUtils -import kotlinx.android.synthetic.main.activity_bus.* - -/** - * ``` - * author: Blankj - * blog : http://blankj.com - * time : 2019/03/12 - * desc : demo about BusUtils - * ``` - */ -class BusActivity : CommonTitleActivity() { - - companion object { - const val BUS_KEY = "BusActivity" - - fun start(context: Context) { - val starter = Intent(context, BusActivity::class.java) - context.startActivity(starter) - } - - val BUNDLE = Bundle() - - init { - BUNDLE.putString("activity", "BusActivity") - } - } - - override fun bindTitle(): CharSequence { - return getString(R.string.demo_bus) - } - - override fun initData(bundle: Bundle?) {} - - override fun bindLayout(): Int { - return R.layout.activity_bus - } - - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - applyDebouncingClickListener( - busStartRemoteBtn, - busPostBtn - ) - } - - override fun doBusiness() { - BusUtils.subscribe(BUS_KEY, object : BusUtils.MessageCallback { - override fun onMsgCallBack(data: Bundle?) { - LogUtils.eTag("BusUtils", data) - } - }) - } - - override fun onDebouncingClick(view: View) { - when (view.id) { - R.id.busStartRemoteBtn -> BusRemoteActivity.start(this) - R.id.busPostBtn -> { - BusUtils.post(BUS_KEY, BUNDLE) - BusUtils.post(BusRemoteActivity.BUS_KEY, BusRemoteActivity.BUNDLE) - } - } - } -} diff --git a/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusRemoteActivity.kt b/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusRemoteActivity.kt deleted file mode 100644 index 1ea0b50d3e..0000000000 --- a/app/utilcode/pkg/src/main/java/com/blankj/utilcode/pkg/feature/bus/BusRemoteActivity.kt +++ /dev/null @@ -1,69 +0,0 @@ -package com.blankj.utilcode.pkg.feature.bus - -import android.content.Context -import android.content.Intent -import android.os.Bundle -import android.view.View -import com.blankj.lib.common.CommonTitleActivity -import com.blankj.utilcode.pkg.R -import com.blankj.utilcode.util.BusUtils -import com.blankj.utilcode.util.LogUtils -import kotlinx.android.synthetic.main.activity_bus_remote.* - -/** - * ``` - * author: Blankj - * blog : http://blankj.com - * time : 2019/03/12 - * desc : demo about BusUtils - * ``` - */ -class BusRemoteActivity : CommonTitleActivity() { - - companion object { - const val BUS_KEY = "BusRemoteActivity" - - fun start(context: Context) { - val starter = Intent(context, BusRemoteActivity::class.java) - context.startActivity(starter) - } - - val BUNDLE = Bundle() - - init { - BUNDLE.putString("activity", "BusRemoteActivity") - } - } - - override fun bindTitle(): CharSequence { - return getString(R.string.demo_bus) - } - - override fun initData(bundle: Bundle?) {} - - override fun bindLayout(): Int { - return R.layout.activity_bus_remote - } - - override fun initView(savedInstanceState: Bundle?, contentView: View?) { - applyDebouncingClickListener( - busRemotePostBtn, - busRemotePost2MainBtn - ) - } - - override fun doBusiness() { - BusUtils.subscribe(BUS_KEY, object : BusUtils.MessageCallback { - override fun onMsgCallBack(data: Bundle?) { - LogUtils.eTag("BusUtils", data) - } - }) - } - - override fun onDebouncingClick(view: View) { - when (view.id) { - R.id.busRemotePostBtn -> BusUtils.post(BUS_KEY, BUNDLE) - R.id.busRemotePost2MainBtn -> BusUtils.post(BusActivity.BUS_KEY, BusActivity.BUNDLE) - } - } -} diff --git a/app/utilcode/pkg/src/main/res/layout/activity_bus_remote.xml b/app/utilcode/pkg/src/main/res/layout/activity_bus_remote.xml deleted file mode 100644 index 9a81cf11b6..0000000000 --- a/app/utilcode/pkg/src/main/res/layout/activity_bus_remote.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - -