From 270e035b3a5f1a26a215ab0311c565f103b097f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BD=AE=E5=AD=90=E5=93=A5?= Date: Sat, 8 Jan 2022 22:28:33 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E5=8A=A0=E5=85=A5=20Kotlin=20=E5=8D=8F?= =?UTF-8?q?=E7=A8=8B=20=E4=BC=98=E5=8C=96=E9=83=A8=E5=88=86=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E7=9A=84=E5=86=99=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 +++++ .../com/hjq/demo/manager/ActivityManager.kt | 12 ++----- .../com/hjq/demo/manager/ThreadPoolManager.kt | 34 ------------------- .../com/hjq/demo/ui/activity/CrashActivity.kt | 11 ++++-- .../demo/ui/activity/ImageSelectActivity.kt | 8 +++-- .../hjq/demo/ui/activity/SettingActivity.kt | 11 +++--- .../demo/ui/activity/VideoSelectActivity.kt | 8 +++-- .../com/hjq/demo/ui/fragment/HomeFragment.kt | 5 +-- common.gradle | 6 ++++ .../java/com/hjq/base/action/HandlerAction.kt | 6 +--- .../java/com/hjq/widget/view/ClearEditText.kt | 9 ++--- .../com/hjq/widget/view/PasswordEditText.kt | 16 ++++----- 12 files changed, 56 insertions(+), 78 deletions(-) delete mode 100644 app/src/main/java/com/hjq/demo/manager/ThreadPoolManager.kt diff --git a/README.md b/README.md index 8f5c438..996eb41 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,14 @@ * 博客地址:[但愿人长久,搬砖不再有](https://www.jianshu.com/p/77dd326f21dc) +* 另外你如果对 Kotlin 不熟悉,恰好想学习的话,推荐你通过下面这三篇文章来学习 + + * [全民 Kotlin:Java我们不一样](https://www.jianshu.com/p/a01e6b957269) + + * [全民 Kotlin:你没有玩过的全新玩法](https://www.jianshu.com/p/884ca0a49e5e) + + * [全民 Kotlin:协程特别篇](https://www.jianshu.com/p/2e0746c7d4f3) + * 当我们日复一日年复一年的搬砖的时候,你是否曾想过提升一下开发效率,如果一个通用的架构摆在你的面前,你还会选择自己搭架构么,但是搭建出一个好的架构并非易事,有多少人愿意选择去做,还有多少人选择努力去做好,可能寥寥无几,但是你今天看到的,正是你所想要的,一个真正能解决你开发新项目时最大痛点的架构工程,你不需要再麻木 Copy 原有旧项目的代码,只需改动少量代码就能得到想要的效果,你会发现开发新项目其实是一件很快乐的事。 * AndroidProject 已维护三年多的时间,几乎耗尽我所有的业余时间,里面的代码改了再改,改了又改,不断 Review、不断创新、不断改进、不断测试、不断优化,每天都在重复这些枯燥的步骤,但是只有这样才能把这件事做好,因为我相信把同样一件事重复做,迟早有一天可以做好。 diff --git a/app/src/main/java/com/hjq/demo/manager/ActivityManager.kt b/app/src/main/java/com/hjq/demo/manager/ActivityManager.kt index 2bd9f3f..087545f 100644 --- a/app/src/main/java/com/hjq/demo/manager/ActivityManager.kt +++ b/app/src/main/java/com/hjq/demo/manager/ActivityManager.kt @@ -19,18 +19,10 @@ class ActivityManager private constructor() : ActivityLifecycleCallbacks { companion object { @Suppress("StaticFieldLeak") - @Volatile - private var sInstance: ActivityManager? = null + private val activityManager: ActivityManager by lazy { ActivityManager() } fun getInstance(): ActivityManager { - if (sInstance == null) { - synchronized(ActivityManager::class.java) { - if (sInstance == null) { - sInstance = ActivityManager() - } - } - } - return sInstance!! + return activityManager } /** diff --git a/app/src/main/java/com/hjq/demo/manager/ThreadPoolManager.kt b/app/src/main/java/com/hjq/demo/manager/ThreadPoolManager.kt deleted file mode 100644 index 3b19a6d..0000000 --- a/app/src/main/java/com/hjq/demo/manager/ThreadPoolManager.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.hjq.demo.manager - -import java.util.concurrent.SynchronousQueue -import java.util.concurrent.ThreadPoolExecutor -import java.util.concurrent.TimeUnit - -/** - * author : Android 轮子哥 - * github : https://github.com/getActivity/AndroidProject-Kotlin - * time : 2020/01/11 - * desc : 线程池管理类 - */ -class ThreadPoolManager : ThreadPoolExecutor( - 0, 200, - 30L, TimeUnit.MILLISECONDS, - SynchronousQueue()) { - - companion object { - - @Volatile - private var instance: ThreadPoolManager? = null - - fun getInstance(): ThreadPoolManager { - if (instance == null) { - synchronized(ThreadPoolManager::class.java) { - if (instance == null) { - instance = ThreadPoolManager() - } - } - } - return instance!! - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/hjq/demo/ui/activity/CrashActivity.kt b/app/src/main/java/com/hjq/demo/ui/activity/CrashActivity.kt index 8568db9..9ab4536 100644 --- a/app/src/main/java/com/hjq/demo/ui/activity/CrashActivity.kt +++ b/app/src/main/java/com/hjq/demo/ui/activity/CrashActivity.kt @@ -18,15 +18,17 @@ import android.view.View import android.widget.TextView import androidx.core.view.GravityCompat import androidx.drawerlayout.widget.DrawerLayout +import androidx.lifecycle.lifecycleScope import com.gyf.immersionbar.ImmersionBar import com.hjq.demo.R import com.hjq.demo.aop.SingleClick import com.hjq.demo.app.AppActivity -import com.hjq.demo.manager.ThreadPoolManager import com.hjq.demo.other.AppConfig import com.hjq.permissions.Permission import com.hjq.permissions.XXPermissions import com.tencent.bugly.crashreport.CrashReport +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch import java.io.PrintWriter import java.io.StringWriter import java.net.InetAddress @@ -227,14 +229,17 @@ class CrashActivity : AppActivity() { } if (permissions.contains(Manifest.permission.INTERNET)) { builder.append("\n当前网络访问:\t") - ThreadPoolManager.getInstance().execute { + + lifecycleScope.launch(Dispatchers.IO) { try { InetAddress.getByName("www.baidu.com") builder.append("正常") } catch (ignored: UnknownHostException) { builder.append("异常") } - post { infoView?.text = builder } + lifecycleScope.launch(Dispatchers.Main) { + infoView?.text = builder + } } } else { infoView?.text = builder diff --git a/app/src/main/java/com/hjq/demo/ui/activity/ImageSelectActivity.kt b/app/src/main/java/com/hjq/demo/ui/activity/ImageSelectActivity.kt index b1ed18a..2edda6f 100644 --- a/app/src/main/java/com/hjq/demo/ui/activity/ImageSelectActivity.kt +++ b/app/src/main/java/com/hjq/demo/ui/activity/ImageSelectActivity.kt @@ -8,6 +8,7 @@ import android.provider.MediaStore import android.text.TextUtils import android.view.* import android.view.animation.* +import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.RecyclerView import com.hjq.base.BaseActivity import com.hjq.base.BaseAdapter @@ -18,7 +19,6 @@ import com.hjq.demo.aop.Log import com.hjq.demo.aop.Permissions import com.hjq.demo.aop.SingleClick import com.hjq.demo.app.AppActivity -import com.hjq.demo.manager.ThreadPoolManager import com.hjq.demo.other.GridSpaceDecoration import com.hjq.demo.ui.activity.CameraActivity.OnCameraListener import com.hjq.demo.ui.adapter.ImageSelectAdapter @@ -28,6 +28,8 @@ import com.hjq.demo.widget.StatusLayout import com.hjq.permissions.Permission import com.hjq.permissions.XXPermissions import com.hjq.widget.view.FloatActionButton +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch import java.io.File import java.util.* @@ -150,7 +152,7 @@ class ImageSelectActivity : AppActivity(), StatusAction, Runnable, // 显示加载进度条 showLoading() // 加载图片列表 - ThreadPoolManager.getInstance().execute(this) + lifecycleScope.launch(Dispatchers.IO) { run() } } override fun getStatusLayout(): StatusLayout? { @@ -238,7 +240,7 @@ class ImageSelectActivity : AppActivity(), StatusAction, Runnable, // 这里需要延迟刷新,否则可能会找不到拍照的图片 postDelayed({ // 重新加载图片列表 - ThreadPoolManager.getInstance().execute(this@ImageSelectActivity) + lifecycleScope.launch { run() } }, 1000) } diff --git a/app/src/main/java/com/hjq/demo/ui/activity/SettingActivity.kt b/app/src/main/java/com/hjq/demo/ui/activity/SettingActivity.kt index f20e3b4..54fe2bc 100644 --- a/app/src/main/java/com/hjq/demo/ui/activity/SettingActivity.kt +++ b/app/src/main/java/com/hjq/demo/ui/activity/SettingActivity.kt @@ -2,6 +2,7 @@ package com.hjq.demo.ui.activity import android.view.Gravity import android.view.View +import androidx.lifecycle.lifecycleScope import com.hjq.base.BaseDialog import com.hjq.base.action.AnimAction import com.hjq.demo.R @@ -12,7 +13,6 @@ import com.hjq.demo.http.glide.GlideApp import com.hjq.demo.http.model.HttpData import com.hjq.demo.manager.ActivityManager import com.hjq.demo.manager.CacheDataManager -import com.hjq.demo.manager.ThreadPoolManager import com.hjq.demo.other.AppConfig import com.hjq.demo.ui.dialog.MenuDialog import com.hjq.demo.ui.dialog.SafeDialog @@ -21,6 +21,9 @@ import com.hjq.http.EasyHttp import com.hjq.http.listener.HttpCallback import com.hjq.widget.layout.SettingBar import com.hjq.widget.view.SwitchButton +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext /** * author : Android 轮子哥 @@ -132,11 +135,11 @@ class SettingActivity : AppActivity(), SwitchButton.OnCheckedChangeListener { // 清除内存缓存(必须在主线程) GlideApp.get(this@SettingActivity).clearMemory() - ThreadPoolManager.getInstance().execute { - CacheDataManager.clearAllCache(this) + lifecycleScope.launch(Dispatchers.IO) { + CacheDataManager.clearAllCache(this@SettingActivity) // 清除本地缓存(必须在子线程) GlideApp.get(this@SettingActivity).clearDiskCache() - post { + withContext(Dispatchers.Main) { // 重新获取应用缓存大小 cleanCacheView?.setRightText(CacheDataManager.getTotalCacheSize(this@SettingActivity)) } diff --git a/app/src/main/java/com/hjq/demo/ui/activity/VideoSelectActivity.kt b/app/src/main/java/com/hjq/demo/ui/activity/VideoSelectActivity.kt index 6d34043..06a551c 100644 --- a/app/src/main/java/com/hjq/demo/ui/activity/VideoSelectActivity.kt +++ b/app/src/main/java/com/hjq/demo/ui/activity/VideoSelectActivity.kt @@ -11,6 +11,7 @@ import android.os.Parcelable import android.provider.MediaStore import android.view.* import android.view.animation.* +import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.RecyclerView import com.hjq.base.BaseActivity import com.hjq.base.BaseAdapter @@ -21,7 +22,6 @@ import com.hjq.demo.aop.Log import com.hjq.demo.aop.Permissions import com.hjq.demo.aop.SingleClick import com.hjq.demo.app.AppActivity -import com.hjq.demo.manager.ThreadPoolManager import com.hjq.demo.other.GridSpaceDecoration import com.hjq.demo.ui.activity.CameraActivity.OnCameraListener import com.hjq.demo.ui.adapter.VideoSelectAdapter @@ -32,6 +32,8 @@ import com.hjq.permissions.Permission import com.hjq.permissions.XXPermissions import com.hjq.widget.view.FloatActionButton import com.tencent.bugly.crashreport.CrashReport +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch import java.io.File import java.util.* @@ -150,7 +152,7 @@ class VideoSelectActivity : AppActivity(), StatusAction, Runnable, BaseAdapter.O // 显示加载进度条 showLoading() // 加载视频列表 - ThreadPoolManager.getInstance().execute(this) + lifecycleScope.launch(Dispatchers.IO) { run() } } override fun getStatusLayout(): StatusLayout? { @@ -241,7 +243,7 @@ class VideoSelectActivity : AppActivity(), StatusAction, Runnable, BaseAdapter.O // 这里需要延迟刷新,否则可能会找不到拍照的视频 postDelayed({ // 重新加载视频列表 - ThreadPoolManager.getInstance().execute(this@VideoSelectActivity) + lifecycleScope.launch { run() } }, 1000) } diff --git a/app/src/main/java/com/hjq/demo/ui/fragment/HomeFragment.kt b/app/src/main/java/com/hjq/demo/ui/fragment/HomeFragment.kt index 85a3c34..9eaab86 100644 --- a/app/src/main/java/com/hjq/demo/ui/fragment/HomeFragment.kt +++ b/app/src/main/java/com/hjq/demo/ui/fragment/HomeFragment.kt @@ -2,7 +2,8 @@ package com.hjq.demo.ui.fragment import android.content.res.ColorStateList import android.widget.TextView -import androidx.appcompat.widget.* +import androidx.appcompat.widget.AppCompatImageView +import androidx.appcompat.widget.Toolbar import androidx.core.content.ContextCompat import androidx.recyclerview.widget.RecyclerView import androidx.viewpager.widget.ViewPager @@ -13,7 +14,7 @@ import com.hjq.demo.R import com.hjq.demo.app.AppFragment import com.hjq.demo.app.TitleBarFragment import com.hjq.demo.ui.activity.HomeActivity -import com.hjq.demo.ui.adapter.* +import com.hjq.demo.ui.adapter.TabAdapter import com.hjq.demo.ui.adapter.TabAdapter.OnTabListener import com.hjq.demo.widget.XCollapsingToolbarLayout import com.hjq.demo.widget.XCollapsingToolbarLayout.OnScrimsListener diff --git a/common.gradle b/common.gradle index 45377d5..eee9044 100644 --- a/common.gradle +++ b/common.gradle @@ -68,4 +68,10 @@ dependencies { implementation 'androidx.appcompat:appcompat:1.3.1' // Material 库:https://github.com/material-components/material-components-android implementation 'com.google.android.material:material:1.4.0' + + // Kotlin 协程:https://github.com/Kotlin/kotlinx.coroutines + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0' + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0' + implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1' + implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1' } \ No newline at end of file diff --git a/library/base/src/main/java/com/hjq/base/action/HandlerAction.kt b/library/base/src/main/java/com/hjq/base/action/HandlerAction.kt index e90160c..d027f2f 100644 --- a/library/base/src/main/java/com/hjq/base/action/HandlerAction.kt +++ b/library/base/src/main/java/com/hjq/base/action/HandlerAction.kt @@ -34,11 +34,7 @@ interface HandlerAction { * 延迟一段时间执行 */ fun postDelayed(runnable: Runnable, delayMillis: Long): Boolean { - var delayMillis: Long = delayMillis - if (delayMillis < 0) { - delayMillis = 0 - } - return postAtTime(runnable, SystemClock.uptimeMillis() + delayMillis) + return postAtTime(runnable, SystemClock.uptimeMillis() + if (delayMillis < 0) 0 else delayMillis) } /** diff --git a/library/widget/src/main/java/com/hjq/widget/view/ClearEditText.kt b/library/widget/src/main/java/com/hjq/widget/view/ClearEditText.kt index 8846734..5f311ff 100644 --- a/library/widget/src/main/java/com/hjq/widget/view/ClearEditText.kt +++ b/library/widget/src/main/java/com/hjq/widget/view/ClearEditText.kt @@ -3,6 +3,7 @@ package com.hjq.widget.view import android.content.Context import android.graphics.drawable.Drawable import android.text.Editable +import android.text.TextUtils import android.text.TextWatcher import android.util.AttributeSet import android.view.MotionEvent @@ -60,11 +61,7 @@ class ClearEditText @JvmOverloads constructor( * [OnFocusChangeListener] */ override fun onFocusChange(view: View, hasFocus: Boolean) { - if (hasFocus && text != null) { - setDrawableVisible(text!!.isNotEmpty()) - } else { - setDrawableVisible(false) - } + setDrawableVisible(hasFocus && !TextUtils.isEmpty(text)) focusChangeListener?.onFocusChange(view, hasFocus) } @@ -91,7 +88,7 @@ class ClearEditText @JvmOverloads constructor( } return true } - return touchListener != null && touchListener!!.onTouch(view, event) + return touchListener?.onTouch(view, event) ?: false } /** diff --git a/library/widget/src/main/java/com/hjq/widget/view/PasswordEditText.kt b/library/widget/src/main/java/com/hjq/widget/view/PasswordEditText.kt index 6707773..d922bbb 100644 --- a/library/widget/src/main/java/com/hjq/widget/view/PasswordEditText.kt +++ b/library/widget/src/main/java/com/hjq/widget/view/PasswordEditText.kt @@ -1,12 +1,16 @@ package com.hjq.widget.view -import android.content.* +import android.content.Context import android.graphics.drawable.Drawable -import android.text.* +import android.text.Editable +import android.text.InputType +import android.text.TextUtils +import android.text.TextWatcher import android.text.method.HideReturnsTransformationMethod import android.text.method.PasswordTransformationMethod import android.util.AttributeSet -import android.view.* +import android.view.MotionEvent +import android.view.View import android.view.View.OnFocusChangeListener import android.view.View.OnTouchListener import androidx.core.content.ContextCompat @@ -76,11 +80,7 @@ class PasswordEditText @JvmOverloads constructor( * [OnFocusChangeListener] */ override fun onFocusChange(view: View?, hasFocus: Boolean) { - if (hasFocus && text != null) { - setDrawableVisible(text!!.isNotEmpty()) - } else { - setDrawableVisible(false) - } + setDrawableVisible(hasFocus && !TextUtils.isEmpty(text)) focusChangeListener?.onFocusChange(view, hasFocus) } From 300da71f54a528e4d0a4868c5cb0d4d977ec720d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BD=AE=E5=AD=90=E5=93=A5?= Date: Sun, 10 Jul 2022 14:38:32 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20issue=20=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/FUNDING.yml | 12 +++++ .github/ISSUE_TEMPLATE/issue_template_bug.md | 45 +++++++++++++++++++ .../ISSUE_TEMPLATE/issue_template_suggest.md | 17 +++++++ .github/workflows/android.yml | 17 +++++++ 4 files changed, 91 insertions(+) create mode 100644 .github/FUNDING.yml create mode 100644 .github/ISSUE_TEMPLATE/issue_template_bug.md create mode 100644 .github/ISSUE_TEMPLATE/issue_template_suggest.md create mode 100644 .github/workflows/android.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..9466725 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: https://raw.githubusercontent.com/getActivity/Donate/master/picture/pay_ali.png diff --git a/.github/ISSUE_TEMPLATE/issue_template_bug.md b/.github/ISSUE_TEMPLATE/issue_template_bug.md new file mode 100644 index 0000000..e620aba --- /dev/null +++ b/.github/ISSUE_TEMPLATE/issue_template_bug.md @@ -0,0 +1,45 @@ +--- +name: 提交 Bug +about: 请告诉我框架存在的问题,我会协助你解决此问题! +labels: bug +assignees: getActivity + +--- + +## 【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】 + +## 问题描述 + +* 框架版本【必填】:XXX + +* 问题描述【必填】:XXX + +* 复现步骤【必填】:XXX + +* 是否必现【必填】:填是/否 + +* 出现问题的手机信息【必填】:请填写出现问题的品牌和机型 + +* 出现问题的安卓版本【必填】:请填写出现问题的 Android 版本 + +## 请回答 + +* 是部分机型还是所有机型都会出现【必答】:部分/全部(例如:某为,某 Android 版本会出现) + +* AndroidProject 最新的版本是否存在这个问题【必答】:是/否(如果用的是旧版本的话,建议升级看问题是否还存在) + +* 是否已经查阅框架文档还未能解决的【必答】:是/否(文档会提供最常见的问题解答,可以看看是否有自己想要的) + +* issue 是否有人曾提过类似的问题【必答】:是/否(看看曾经有人提过类似的问题,先参考一下别人是怎么解决的) + +* 是否可以通过 AndroidProject 工程来复现该问题【必答】:是/否(排查一下是不是自己的项目代码写得有问题导致的) + +* 使用原生的权限 API 是否会出现该问题【必答】:是/否(排查一下是不是 AndroidProject 的代码存在问题导致的) + +## 其他 + +* 提供报错堆栈(如果有报错的话必填,注意不要拿被混淆过的代码堆栈上来) + +* 提供截图或视频(根据需要提供,此项不强制) + +* 提供解决方案(如果已经解决了的话,此项不强制) \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/issue_template_suggest.md b/.github/ISSUE_TEMPLATE/issue_template_suggest.md new file mode 100644 index 0000000..d1e43e9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/issue_template_suggest.md @@ -0,0 +1,17 @@ +--- +name: 提交建议 +about: 请告诉我框架的不足之处,让我做得更好! +labels: help wanted +assignees: getActivity + +--- + +## 【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】 + +## 建议收集 + +* issue 是否有人曾提过类似的问题?【必答】(一旦出现重复提问我将不会再次解答) + +* 你觉得框架有什么不足之处?【必答】(你可以描述框架有什么令你不满意的地方) + +* 你觉得该怎么去完善会比较好?【非必答】(你可以提供一下自己的想法或者做法供作者参考) \ No newline at end of file diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml new file mode 100644 index 0000000..311fc1d --- /dev/null +++ b/.github/workflows/android.yml @@ -0,0 +1,17 @@ +name: Android CI + +on: [push] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: set up JDK 1.8 + uses: actions/setup-java@v1 + with: + java-version: 1.8 + - name: Build with Gradle + run: ./gradlew build aR From b5ad41809d077b3cf771f543786738058674df93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BD=AE=E5=AD=90=E5=93=A5?= Date: Mon, 18 Jul 2022 21:44:37 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20issue=20=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/ISSUE_TEMPLATE/issue_template_bug.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/issue_template_bug.md b/.github/ISSUE_TEMPLATE/issue_template_bug.md index e620aba..8fc9483 100644 --- a/.github/ISSUE_TEMPLATE/issue_template_bug.md +++ b/.github/ISSUE_TEMPLATE/issue_template_bug.md @@ -14,7 +14,7 @@ assignees: getActivity * 问题描述【必填】:XXX -* 复现步骤【必填】:XXX +* 复现步骤【必填】:XXX(注意:目前不受理没有复现步骤的 Bug 单) * 是否必现【必填】:填是/否 From 7694dfd342fb8a0436870eb1fa0fe6ad98e411a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BD=AE=E5=AD=90=E5=93=A5?= Date: Sat, 10 Sep 2022 18:49:21 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=B8=8B=E8=BD=BD=20demo?= =?UTF-8?q?=20apk=20=E4=BA=8C=E7=BB=B4=E7=A0=81=E5=9B=BE=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- picture/demo_code.png | Bin 15756 -> 30411 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/picture/demo_code.png b/picture/demo_code.png index 90b52a2d71e24e6147c1e74333472f0475d3d2d2..23c5a12e05e8424ff35384c3f4fc6ef142dc39d7 100644 GIT binary patch literal 30411 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