Giter Site home page Giter Site logo

getactivity / androidproject-kotlin Goto Github PK

View Code? Open in Web Editor NEW
1.2K 11.0 213.0 16.45 MB

Android 技术中台 Kotlin 版本,但愿人长久,搬砖不再有

License: Apache License 2.0

Kotlin 100.00%
android kotlin recyclerview mvp mvvm dialog toast titlebar glide retrofit okhttp flutter baseactivity popupwindow mvi jetpack compose mvvmhabit

androidproject-kotlin's Introduction

安卓技术中台 Kotlin 版

  • 项目地址:Github码云

  • Java 版本:AndroidProject

  • 博客地址:但愿人长久,搬砖不再有

  • 另外你如果对 Kotlin 不熟悉,恰好想学习的话,推荐你通过下面这三篇文章来学习

  • 当我们日复一日年复一年的搬砖的时候,你是否曾想过提升一下开发效率,如果一个通用的架构摆在你的面前,你还会选择自己搭架构么,但是搭建出一个好的架构并非易事,有多少人愿意选择去做,还有多少人选择努力去做好,可能寥寥无几,但是你今天看到的,正是你所想要的,一个真正能解决你开发新项目时最大痛点的架构工程,你不需要再麻木 Copy 原有旧项目的代码,只需改动少量代码就能得到想要的效果,你会发现开发新项目其实是一件很快乐的事。

  • AndroidProject 已维护三年多的时间,几乎耗尽我所有的业余时间,里面的代码改了再改,改了又改,不断 Review、不断创新、不断改进、不断测试、不断优化,每天都在重复这些枯燥的步骤,但是只有这样才能把这件事做好,因为我相信把同样一件事重复做,迟早有一天可以做好。

  • 已经正式投入到多个公司项目实践中,暂时没有发现任何问题或者 Bug,点击下载 Apk 体验,又或者扫码下载

常用界面


常用对话框

动图欣赏

项目亮点

  • App 优化:已经进行了全面的内存优化、布局优化、代码优化、瘦身优化,并且对结果进行了严格的长久测试。

  • 代码规范:参照 Android SDK 、Support 源码和参考阿里巴巴的代码规范文档对代码进行命名,并对难点代码进行了注释,对重点代码进行了说明。

  • 代码统一:对项目中常见的代码进行了封装,或是封装到基类中、或是封装到工具类中、或者封装到框架中,不追求过度封装,根据实际场景和代码维护性考虑,尽量保证同一个功能的代码在项目中不重复。

  • 敏捷开发:一个 App 大概率会出现的功能已经写好,对项目的敏捷开发起到了至关重要的作用,可用于新项目开发或者旧项目重构,可将开发周期缩短近一半的时间,并且后续不会因为前期的快速开发而留下成堆的技术遗留问题,万丈高楼平地起,AndroidProject 属于基建工程,而在软件行业我们称之为技术中台。

  • 无任何瑕疵:对小屏手机、全面屏手机、带虚拟按键手机进行了适配和优化,确保每一个界面细节都能处理到位、每一个功能细节都能符合大众的需求、乃至每一行代码都能贴合 Android 程序员的审美观。

  • 兼容性优良:在此感谢开源道路上给予我支持和帮助的小伙伴,一个人一台机在兼容性面前无能为力,而在几百人几百台机面前却不是问题。如果没有这些的测试,有些问题我一个人可能这辈子都发现不了,纵使代码写得再好,逻辑再严谨,没有经过大众的验证,无异于纸上谈兵。

  • 优秀的代码设计:AndroidProject 对 startActivityForResult 的设计进行了改良,使得可以直接在方法上传入监听对象,这样我们就不需要重写 onActivityResult 方法来拿到回调,另外原生的 startActivityForResult 还需要传 requestCode 参数,而 AndroidProject 会自动帮你生成这个 requestCode 码,并在 onActivityResult 进行判断,如果满足条件,那么就会回调外层传入的监听对象。然而这只是冰山一角,更多优秀的代码设计还需要你通过阅读 AndroidProject 源码的形式来发掘,在这里不再细说。

作者的其他开源项目

微信公众号:Android轮子哥

Android 技术分享 QQ 群:78797078

如果您觉得我的开源库帮你节省了大量的开发时间,请扫描下方的二维码随意打赏,要是能打赏个 10.24 🐵就太👍了。您的支持将鼓励我继续创作:octocat:

License

Copyright 2018 Huang JinQun

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

androidproject-kotlin's People

Contributors

880634 avatar getactivity avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

androidproject-kotlin's Issues

请严格按照 issue 模板来提问题,否则一律不受理

最近发现有很多人给我提 issue 没有认真按照模板上面的来填写,导致了在排查问题的过程中浪费了作者许多不必要的时间和精力,所以请后面提 issue 的人务必严格遵守,否则我不会受理,直接关闭 issue。

导入报错,目前找不到解决办法

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

问题描述

  • 框架版本【必填】:v13.2

  • 问题描述【必填】:导入studio报错
    Build file 'D:\YG2\GITDEMO4\AndroidProject-Kotlin-master\app\build.gradle' line: 3
    A problem occurred evaluating project ':app'.

Failed to apply plugin 'kotlin-kapt'.
Extension with name 'kotlin' does not exist. Currently registered extension names: [ext, base, defaultArtifacts, sourceSets, reporting, java, javaToolchains, buildOutputs, android, androidComponents, aspectjx, kapt]

  • 复现步骤【必填】:每次导入都报错

  • 是否必现【必填】:是

  • 出现问题的手机信息【必填】:Redmi

  • 出现问题的安卓版本【必填】:android10

请回答

  • 是部分机型还是所有机型都会出现【必答】:部分 目前只有一台手机

  • AndroidProject 最新的版本是否存在这个问题【必答】:是

  • 是否已经查阅框架文档还未能解决的【必答】:是

  • issue 是否有人曾提过类似的问题【必答】:否

  • 是否可以通过 AndroidProject 工程来复现该问题【必答】:是

  • 使用原生的权限 API 是否会出现该问题【必答】:是

编译release的时候报错

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

问题描述

  • 框架版本【必填】:V13.1

  • 问题描述【必填】:编译release的时候,或者打包release的时候报错:D:/MyDevelopmentSoft/android-studio/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/1.6.0/a40b8b22529b733892edf4b73468ce598bb17f04/kotlin-stdlib-1.6.0.jar!/META-INF/kotlin-stdlib.kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.6.0, expected version is 1.4.0.

  • 复现步骤【必填】:编译release的时候,或者打包release的时候,打出来的release包无法正常安装使用

  • 是否必现【必填】:是,升级了最新kotlin1.7.2也不行,应该是某处依赖了低版本kotlin,目前小菜无法解决,请大佬给以解决方案!!谢谢!!

  • 出现问题的手机信息【必填】:所有

  • 出现问题的安卓版本【必填】:所有

请回答

  • 是部分机型还是所有机型都会出现【必答】:全部

  • AndroidProject 最新的版本是否存在这个问题【必答】:是

  • 是否已经查阅框架文档还未能解决的【必答】:是

  • issue 是否有人曾提过类似的问题【必答】:否

  • 是否可以通过 AndroidProject 工程来复现该问题【必答】:是

  • 使用原生的权限 API 是否会出现该问题【必答】:否

其他

  • 提供报错堆栈(如果有报错的话必填,注意不要拿被混淆过的代码堆栈上来)

  • 提供截图或视频16672857609695

  • 提供解决方案(如果已经解决了的话,此项不强制)

我想咨询一下

gradle导入apply plugin: 'kotlin-android-extensions'
可以直接引用xml的id
现在还可以用嘛,我看到项目里并没有用

Fatal Exception: java.lang.IllegalStateException: focus search returned a view that wasn't able to take focus!

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

问题描述

  • 框架版本【必填】:13.2

  • 问题描述【必填】:Fatal Exception: java.lang.IllegalStateException: focus search returned a view that wasn't able to take focus!
    at android.widget.TextView.onKeyUp(TextView.java:8864)
    at android.view.KeyEvent.dispatch(KeyEvent.java:3383)
    at android.view.View.dispatchKeyEvent(View.java:13329)
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1912)
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1912)
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1912)
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1912)
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1912)
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1912)
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1912)
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1912)
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1912)
    at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1912)
    at com.android.internal.policy.DecorView.superDispatchKeyEvent(DecorView.java:685)
    at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1869)
    at android.app.Activity.dispatchKeyEvent(Activity.java:3447)
    at androidx.core.app.ComponentActivity.superDispatchKeyEvent(ComponentActivity.java:122)
    at androidx.core.view.KeyEventDispatcher.dispatchKeyEvent(KeyEventDispatcher.java:84)
    at androidx.core.app.ComponentActivity.dispatchKeyEvent(ComponentActivity.java:140)
    at androidx.appcompat.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:599)
    at com.chiquedoll.chiquedoll.view.activity.BaseActivity.dispatchKeyEvent(BaseActivity.java:654)
    at androidx.appcompat.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:59)
    at androidx.appcompat.app.AppCompatDelegateImpl$AppCompatWindowCallback.dispatchKeyEvent(AppCompatDelegateImpl.java:3089)
    at com.android.internal.policy.DecorView.dispatchKeyEvent(DecorView.java:563)
    at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:6035)
    at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5890)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5343)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5396)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5362)
    at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5521)
    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5370)
    at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5578)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5343)
    at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5396)
    at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5362)
    at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5370)
    at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5343)
    at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:8405)
    at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:8338)
    at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:8291)
    at android.view.ViewRootImpl$ViewRootHandler.handleMessage(ViewRootImpl.java:4980)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7073)
    at java.lang.reflect.Method.invoke(Method.java)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)

  • 复现步骤【必填】:未知

  • 是否必现【必填】:否

  • 出现问题的手机信息【必填】:品牌:samsung
    型号:Galaxy S8+

  • 出现问题的安卓版本【必填】:Android 9

请回答

  • 是部分机型还是所有机型都会出现【必答】:未知

  • AndroidProject 最新的版本是否存在这个问题【必答】:是

  • 是否已经查阅框架文档还未能解决的【必答】:是

  • issue 是否有人曾提过类似的问题【必答】:否

  • 是否可以通过 AndroidProject 工程来复现该问题【必答】:否

  • 使用原生的权限 API 是否会出现该问题【必答】:是
    注: 出错误来自于BaseActivity中的dispatchKeyEvent 方法

当我新建一个空activity的时候会自动在app.gradle里添加依赖,并且运行失败

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

问题描述

  • 框架版本【必填】:13.2

  • 问题描述【必填】:右键选择new-activity-empty views activity新建了一个activity过后

  • 1.会在app.gradle中新添加依赖
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.8.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'

2.并且会在app.gradle文件顶部导入插件apply plugin: 'org.jetbrains.kotlin.android'
3.清单文件也被篡改与string文件也被篡改。
4.再打包运行的时候就会报错:Can't determine type for tag '?attr/shapeAppearanceCornerSmall'

  • 复现步骤【必填】:同问题描述

  • 是否必现【必填】:是

  • 出现问题的手机信息【必填】:小米10

  • 出现问题的安卓版本【必填】:13

请回答

  • 是部分机型还是所有机型都会出现【必答】:全部

  • AndroidProject 最新的版本是否存在这个问题【必答】:是

  • 是否已经查阅框架文档还未能解决的【必答】:是

  • issue 是否有人曾提过类似的问题【必答】:否

  • 是否可以通过 AndroidProject 工程来复现该问题【必答】:是

  • 使用原生的权限 API 是否会出现该问题【必答】:否

其他

  • 提供报错堆栈(如果有报错的话必填,注意不要拿被混淆过的代码堆栈上来)

  • 提供截图或视频(根据需要提供,此项不强制)
    1701325723735
    1701325772468
    1701325811154
    1701325867484
    1701325932096

  • 提供解决方案(如果已经解决了的话,此项不强制)

无法改变手机底部导航栏的颜色

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

问题描述

  • 框架版本【必填】:最新版

  • 问题描述【必填】:activity中设置底部导航栏的颜色,底部导航栏的颜色没变!

  • 复现步骤【必填】:activity中重写 override fun createStatusBarConfig(): ImmersionBar {
    return super.createStatusBarConfig()
    .navigationBarColor(R.color.black)
    } 颜色并未改变

  • 是否必现【必填】:是

  • 出现问题的手机信息【必填】:小米10

  • 出现问题的安卓版本【必填】:安卓13

请回答

  • 是部分机型还是所有机型都会出现【必答】:部分(小米10)

  • AndroidProject 最新的版本是否存在这个问题【必答】:是

  • 是否已经查阅框架文档还未能解决的【必答】:是

  • issue 是否有人曾提过类似的问题【必答】:否

  • 是否可以通过 AndroidProject 工程来复现该问题【必答】:是

  • 使用原生的权限 API 是否会出现该问题【必答】:否

其他

  • 提供报错堆栈(如果有报错的话必填,注意不要拿被混淆过的代码堆栈上来)

  • 提供截图或视频(根据需要提供,此项不强制)

  • 提供解决方案(如果已经解决了的话,此项不强制)

android10以上系统图片裁剪后上传头像失败

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

问题描述

  • 框架版本【必填】:V13.2

  • 问题描述【必填】:小米手机mix4,系统android11,个人主页上传头像裁剪后上传文件失败,

  • 复现步骤【必填】:点击上传头像,图片裁剪,上传失败,提示图片扩展名不被接受,debug发现header中的filename不是图片的filename,不带图片格式,所以服务器不接受。不清楚这个filename是怎么赋值的。issue上传了调试截图,大佬一看应该就明白

  • 是否必现【必填】:是

  • 出现问题的手机信息【必填】:小米手机mix4

  • 出现问题的安卓版本【必填】:android11

请回答

  • 是部分机型还是所有机型都会出现【必答】:部分,mix4 Android11系统会出现,mix2 android9系统不出现,推断和存储分区有关

  • AndroidProject 最新的版本是否存在这个问题【必答】:是

  • 是否已经查阅框架文档还未能解决的【必答】:是

  • issue 是否有人曾提过类似的问题【必答】:否

  • 是否可以通过 AndroidProject 工程来复现该问题【必答】:不确定,因为这个是向服务器上传才出现的问题,AndroidProject 不能的上传图片

  • 使用原生的权限 API 是否会出现该问题【必答】:否(排查一下是不是 AndroidProject 的代码存在问题导致的)

其他

  • 提供报错堆栈(如果有报错的话必填,注意不要拿被混淆过的代码堆栈上来)

  • 提供截图或视频(根据需要提供,此项不强制)

F4343D6B-486D-4e6f-A600-2F8E251CF7AE
A28999BC-8BE4-4654-A5B0-FAB27B9989A2

proguard 配置引入 proguard-base.pro 打出来的包会比 getDefaultProguardFile('proguard-android-optimize.txt') 大 1M+

建议收集

  • issue 是否有人曾提过类似的问题?【必答】
    没有

  • 你觉得框架有什么不足之处?【必答】

    现在有两份 proguard 配置:

    配置 1
    proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-sdk.pro', 'proguard-app.pro'
    
    配置 2
    proguardFiles 'proguard-base.pro', 'proguard-sdk.pro', 'proguard-app.pro'
    

    其中 proguard-base.pro 是 base 模块 consumerProguardFiles 'proguard-base.pro' 方式引入的,配置 2 这么写只是方便对比。
    无意间发现,配置 2 打出来的包相比配置 1 打的包,会多出近 2M 左右大小。

  • 你觉得该怎么去完善会比较好?【非必答】
    阿轮,空了的话,可否优化一下 proguard 的配置,在不影响正常功能的前提下,控制一下打出包的大小。

希望增加recycleview样式支持

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

建议收集

  • issue 是否有人曾提过类似的问题?【必答】没有

  • 你觉得框架有什么不足之处?【必答】关于recyclerview可以增加多布局的封装

  • 你觉得该怎么去完善会比较好?【非必答】(你可以提供一下自己的想法或者做法供作者参考)

请问如何进行手机平板及折叠屏尺寸动态适配的修改

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

建议收集

  • issue 是否有人曾提过类似的问题?【必答】没有

  • 你觉得框架有什么不足之处?【必答】缺少手机平板尺寸适配的动态修改

  • 你觉得该怎么去完善会比较好?【非必答】

1,怎么修改demo中的基础尺寸设置
2,怎么适配折叠屏,折叠和展示,其尺寸比例差别较大,展开后屏幕尺寸接近1:1,如何进行动态修改;

关于viewBinding支持的建议

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

建议收集

  • issue 是否有人曾提过类似的问题?【必答】没有

  • 你觉得框架有什么不足之处?【必答】目前还未支持viewBinding,控件还需要自己去findById很繁琐

  • 你觉得该怎么去完善会比较好?【非必答】基类添加viewBinding的支持

当我把compileSdkVersion和compileSdkVersion改为34的时候出现一个问题!

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

问题描述

  • 框架版本【必填】:没有版本

  • 问题描述【必填】:当我把compileSdkVersion和compileSdkVersion改为34,run的时候提示Installation did not succeed. The application could not be installed: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,我已经在清单文件里面将SplashActivity的标签下加了android:exported="true"

  • 复现步骤【必填】:先把compileSdkVersion和compileSdkVersion改为34,再在清单文件里面将SplashActivity的标签下加了android:exported="true",然后打包app

  • 是否必现【必填】:是

  • 出现问题的手机信息【必填】:小米10

  • 出现问题的安卓版本【必填】:安卓13

请回答

  • 是部分机型还是所有机型都会出现【必答】:全部

  • AndroidProject 最新的版本是否存在这个问题【必答】:是

  • 是否已经查阅框架文档还未能解决的【必答】:是

  • issue 是否有人曾提过类似的问题【必答】:否

  • 是否可以通过 AndroidProject 工程来复现该问题【必答】:是

  • 使用原生的权限 API 是否会出现该问题【必答】:否

其他

  • 提供报错堆栈(如果有报错的话必填,注意不要拿被混淆过的代码堆栈上来)

  • 提供截图或视频(根据需要提供,此项不强制)

  • 提供解决方案(如果已经解决了的话,此项不强制)

DialogActivity有内存泄漏

2021-12-31 11:19:18.818 26711-27091/com.hjq.demo.debug D/LeakCanary: Analysis in progress, working on: PARSING_HEAP_DUMP
2021-12-31 11:19:18.833 26711-26711/com.hjq.demo.debug D/LeakCanary: Watching instance of android.widget.FrameLayout (android.widget.FrameLayout received View#onDetachedFromWindow() callback) with key 19406ca4-dc80-4796-b766-a2e5658e5a33
2021-12-31 11:19:19.964 26711-27091/com.hjq.demo.debug D/LeakCanary: Analysis in progress, working on: EXTRACTING_METADATA
2021-12-31 11:19:20.132 26711-27091/com.hjq.demo.debug D/LeakCanary: Analysis in progress, working on: FINDING_RETAINED_OBJECTS
2021-12-31 11:19:20.135 26711-27091/com.hjq.demo.debug D/LeakCanary: Analysis in progress, working on: FINDING_PATHS_TO_RETAINED_OBJECTS
2021-12-31 11:19:21.810 26711-26741/com.hjq.demo.debug D/LeakCanary: Setting up flushing for Thread[IntentService[HeapAnalyzerService],5,main]
2021-12-31 11:19:23.643 26711-27091/com.hjq.demo.debug D/LeakCanary: Analysis in progress, working on: FINDING_DOMINATORS
2021-12-31 11:19:23.968 26711-27091/com.hjq.demo.debug D/LeakCanary: Found 5 paths to retained objects, down to 2 after removing duplicated paths
2021-12-31 11:19:23.968 26711-27091/com.hjq.demo.debug D/LeakCanary: Analysis in progress, working on: INSPECTING_OBJECTS
2021-12-31 11:19:24.035 26711-27091/com.hjq.demo.debug D/LeakCanary: Analysis in progress, working on: COMPUTING_NATIVE_RETAINED_SIZE
2021-12-31 11:19:24.465 26711-27091/com.hjq.demo.debug D/LeakCanary: Analysis in progress, working on: COMPUTING_RETAINED_SIZE
2021-12-31 11:19:24.704 26711-27091/com.hjq.demo.debug D/LeakCanary: Analysis in progress, working on: BUILDING_LEAK_TRACES
2021-12-31 11:19:24.708 26711-27091/com.hjq.demo.debug D/LeakCanary: Analysis in progress, working on: REPORTING_HEAP_ANALYSIS
2021-12-31 11:19:24.727 26711-27091/com.hjq.demo.debug D/LeakCanary: ​
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: ====================================
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: HEAP ANALYSIS RESULT
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: ====================================
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: 2 APPLICATION LEAKS
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: References underlined with "~~~" are likely causes.
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: Learn more at https://squ.re/leaks.
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: 167056 bytes retained by leaking objects
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: Signature: e1c76f0955a7d673de751fa83bd6a78af3abee8
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: ┬───
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ GC Root: System class
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: ├─ android.app.ActivityThread class
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ Leaking: NO (a class is never leaking)
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ ↓ static ActivityThread.sCurrentActivityThread
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ ~~~~~~~~~~~~~~~~~~~~~~
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: ├─ android.app.ActivityThread instance
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ Leaking: UNKNOWN
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ Retaining 239.0 kB in 2844 objects
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ mInitialApplication instance of com.hjq.demo.app.AppApplication
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ mSystemContext instance of android.app.ContextImpl
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ mSystemUiContext instance of android.app.ContextImpl
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ ↓ ActivityThread.mNewActivities
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ ~~~~~~~~~~~~~~
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: ├─ android.app.ActivityThread$ActivityClientRecord instance
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ Leaking: UNKNOWN
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ Retaining 217.7 kB in 2440 objects
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ activity instance of com.hjq.demo.ui.activity.HomeActivity with mDestroyed = false
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ ↓ ActivityThread$ActivityClientRecord.nextIdle
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ ~~~~~~~~
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: ├─ android.app.ActivityThread$ActivityClientRecord instance
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ Leaking: UNKNOWN
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ Retaining 216.8 kB in 2420 objects
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ activity instance of com.hjq.demo.ui.activity.DialogActivity with mDestroyed = true
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ ↓ ActivityThread$ActivityClientRecord.activity
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ ~~~~~~~~
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: ╰→ com.hjq.demo.ui.activity.DialogActivity instance
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: ​ Leaking: YES (ObjectWatcher was watching this because com.hjq.demo.ui.activity.DialogActivity received
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: ​ Activity#onDestroy() callback and Activity#mDestroyed is true)
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: ​ Retaining 167.1 kB in 1704 objects
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: ​ key = ab6130d5-08ca-4c2a-ae8a-16e0474e580b
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: ​ watchDurationMillis = 5282
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: ​ retainedDurationMillis = 276
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: ​ mApplication instance of com.hjq.demo.app.AppApplication
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: ​ mBase instance of androidx.appcompat.view.ContextThemeWrapper
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: 13770 bytes retained by leaking objects
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: Signature: 50acba0689afc849672bede23bb43bfdabd34b
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: ┬───
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ GC Root: System class
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: ├─ android.app.ActivityThread class
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ Leaking: NO (a class is never leaking)
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ ↓ static ActivityThread.sCurrentActivityThread
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ ~~~~~~~~~~~~~~~~~~~~~~
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: ├─ android.app.ActivityThread instance
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ Leaking: UNKNOWN
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ Retaining 239.0 kB in 2844 objects
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ mInitialApplication instance of com.hjq.demo.app.AppApplication
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ mSystemContext instance of android.app.ContextImpl
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ mSystemUiContext instance of android.app.ContextImpl
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ ↓ ActivityThread.mNewActivities
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ ~~~~~~~~~~~~~~
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: ├─ android.app.ActivityThread$ActivityClientRecord instance
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ Leaking: UNKNOWN
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ Retaining 217.7 kB in 2440 objects
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ activity instance of com.hjq.demo.ui.activity.HomeActivity with mDestroyed = false
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ ↓ ActivityThread$ActivityClientRecord.nextIdle
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ ~~~~~~~~
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: ├─ android.app.ActivityThread$ActivityClientRecord instance
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ Leaking: UNKNOWN
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ Retaining 216.8 kB in 2420 objects
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ activity instance of com.hjq.demo.ui.activity.DialogActivity with mDestroyed = true
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ ↓ ActivityThread$ActivityClientRecord.window
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ ~~~~~~
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: ├─ com.android.internal.policy.PhoneWindow instance
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ Leaking: YES (Window#mDestroyed is true)
2021-12-31 11:19:24.728 26711-27091/com.hjq.demo.debug D/LeakCanary: │ Retaining 13.8 kB in 280 objects
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: │ mContext instance of com.hjq.demo.ui.activity.DialogActivity with mDestroyed = true
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: │ mOnWindowDismissedCallback instance of com.hjq.demo.ui.activity.DialogActivity with mDestroyed = true
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: │ mWindowControllerCallback instance of com.hjq.demo.ui.activity.DialogActivity with mDestroyed = true
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: │ ↓ PhoneWindow.mDecor
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: ╰→ com.android.internal.policy.DecorView instance
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: ​ Leaking: YES (ObjectWatcher was watching this because com.android.internal.policy.DecorView received
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: ​ View#onDetachedFromWindow() callback and View.mContext references a destroyed activity)
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: ​ Retaining 5.1 kB in 59 objects
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: ​ key = bc38649f-787b-4cf7-a59e-a1f8f48a85f7
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: ​ watchDurationMillis = 5248
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: ​ retainedDurationMillis = 231
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: ​ View not part of a window view hierarchy
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: ​ View.mAttachInfo is null (view detached)
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: ​ View.mWindowAttachCount = 1
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: ​ mContext instance of com.android.internal.policy.DecorContext, wrapping activity com.hjq.demo.ui.activity.
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: ​ DialogActivity with mDestroyed = true
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: ====================================
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: 0 LIBRARY LEAKS
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: A Library Leak is a leak caused by a known bug in 3rd party code that you do not have control over.
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: See https://square.github.io/leakcanary/fundamentals-how-leakcanary-works/#4-categorizing-leaks
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: ====================================
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: 0 UNREACHABLE OBJECTS
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: An unreachable object is still in memory but LeakCanary could not find a strong reference path
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: from GC roots.
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: ====================================
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: METADATA
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: Please include this in bug reports and Stack Overflow questions.
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: Build.VERSION.SDK_INT: 28
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: Build.MANUFACTURER: Xiaomi
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: LeakCanary version: 2.7
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: App process name: com.hjq.demo.debug
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: Count of retained yet cleared: 3 KeyedWeakReference instances
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: Stats: LruCache[maxSize=3000,hits=5704,misses=66084,hitRate=7%]
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: RandomAccess[bytes=4110624,reads=66084,travel=32053565719,range=20375371,size=25249073]
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: Heap dump reason: 5 retained objects, app is visible
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: Analysis duration: 5889 ms
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: Heap dump file path: /storage/emulated/0/Download/leakcanary-com.hjq.demo.debug/2021-12-31_11-19-16_274.hprof
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: Heap dump timestamp: 1640920764707
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: Heap dump duration: 2130 ms
2021-12-31 11:19:24.729 26711-27091/com.hjq.demo.debug D/LeakCanary: ====================================
2021-12-31 11:19:24.763 26711-26711/com.hjq.demo.debug D/LeakCanary: Watching instance of leakcanary.internal.HeapAnalyzerService (leakcanary.internal.HeapAnalyzerService received Service#onDestroy() callback) with key 892cd880-6a5a-4c94-9847-cf59a55d0c97

建议升级gradle7,这版本对构建速度有优化

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

建议收集

  • issue 是否有人曾提过类似的问题?【必答】(一旦出现重复提问我将不会再次解答)

  • 你觉得框架有什么不足之处?【必答】(你可以描述框架有什么令你不满意的地方)

  • 建议升级gradle7,这版本对构建速度有优化

  • 你觉得该怎么去完善会比较好?【非必答】(你可以提供一下自己的想法或者做法供作者参考)

  • 升级下

notifyItemRemoved导致的数组下标越界问题

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

问题描述

  • 框架版本【必填】:13.2

  • 问题描述【必填】:notifyItemRemoved导致的数组下标越界问题

  • 复现步骤【必填】:调用 notifyItemRemoved 之后,如果你移除的刚好是倒数第二个数据,此时点击最后一条数据,会报索引越界

  • 是否必现【必填】:是

  • 出现问题的手机信息【必填】:跟手机无关

  • 出现问题的安卓版本【必填】:跟安卓版本无关

请回答

  • 是部分机型还是所有机型都会出现【必答】:全部(例如:某为,某 Android 版本会出现)

  • AndroidProject 最新的版本是否存在这个问题【必答】:是(如果用的是旧版本的话,建议升级看问题是否还存在)

  • 是否已经查阅框架文档还未能解决的【必答】:否(文档会提供最常见的问题解答,可以看看是否有自己想要的)

  • issue 是否有人曾提过类似的问题【必答】:否(看看曾经有人提过类似的问题,先参考一下别人是怎么解决的)

  • 是否可以通过 AndroidProject 工程来复现该问题【必答】:是(排查一下是不是自己的项目代码写得有问题导致的)

  • 使用原生的权限 API 是否会出现该问题【必答】:是(排查一下是不是 AndroidProject 的代码存在问题导致的)

其他

  • 提供报错堆栈(如果有报错的话必填,注意不要拿被混淆过的代码堆栈上来)

  • 提供截图或视频(根据需要提供,此项不强制)

  • 提供解决方案(如果已经解决了的话,此项不强制)

根据网上的文章,我在基类中做了部分调整,目前没有问题
image

更新计划,我记得之前看过,现在找不到了

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

建议收集

  • issue 是否有人曾提过类似的问题?【必答】有过类似问题,但是貌似未按照issue模板填写被关闭了。

  • 你觉得框架有什么不足之处?【必答】没有。目前只有Bug、建议可选,选建议感觉靠谱点,毕竟只是想问问版本更新的计划?

  • 你觉得该怎么去完善会比较好?【非必答】看了关于为什么不适用ViewBinding的说明,但是感觉还是使用ViewBinding更方便一些。当然,这只是自己的感受。有没有考虑使用Jetpack Compose的打算? 打扰了,谢谢。

新建module提示错误

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

问题描述

  • 框架版本【必填】:XXX

  • 问题描述【必填】:XXX

  • 复现步骤【必填】:XXX(注意:目前不受理没有复现步骤的 Bug 单)

  • 是否必现【必填】:填是/否

  • 出现问题的手机信息【必填】:请填写出现问题的品牌和机型

  • 出现问题的安卓版本【必填】:请填写出现问题的 Android 版本

请回答

  • 是部分机型还是所有机型都会出现【必答】:部分/全部(例如:某为,某 Android 版本会出现)

  • AndroidProject 最新的版本是否存在这个问题【必答】:是/否(如果用的是旧版本的话,建议升级看问题是否还存在)

  • 是否已经查阅框架文档还未能解决的【必答】:是/否(文档会提供最常见的问题解答,可以看看是否有自己想要的)

  • issue 是否有人曾提过类似的问题【必答】:是/否(看看曾经有人提过类似的问题,先参考一下别人是怎么解决的)

  • 是否可以通过 AndroidProject 工程来复现该问题【必答】:是/否(排查一下是不是自己的项目代码写得有问题导致的)

  • 使用原生的权限 API 是否会出现该问题【必答】:是/否(排查一下是不是 AndroidProject 的代码存在问题导致的)

其他

  • 提供报错堆栈(如果有报错的话必填,注意不要拿被混淆过的代码堆栈上来)

  • 提供截图或视频(根据需要提供,此项不强制)

image
image

  • 提供解决方案(如果已经解决了的话,此项不强制)

直接引入base和weight库后dimen识别不了

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

直接引入base和weight库后dimen识别不了

  • 框架版本【必填】:直接下载的最新版本的

  • 问题描述【必填】:直接引入base和weight库后dimen识别不了

  • 复现步骤【必填】:新建项目直接引入base和weight库后dimen识别不了

  • 是否必现【必填】:是

  • 出现问题的手机信息【必填】:红米note9

  • 出现问题的安卓版本【必填】:12

请回答

  • 是部分机型还是所有机型都会出现【必答】:部分

  • AndroidProject 最新的版本是否存在这个问题【必答】:是

  • 是否已经查阅框架文档还未能解决的【必答】:是

  • issue 是否有人曾提过类似的问题【必答】:否

  • 是否可以通过 AndroidProject 工程来复现该问题【必答】:否(排查一下是不是自己的项目代码写得有问题导致的)

  • 使用原生的权限 API 是否会出现该问题【必答】:否(排查一下是不是 AndroidProject 的代码存在问题导致的)

其他

  • 提供报错堆栈(如果有报错的话必填,注意不要拿被混淆过的代码堆栈上来)

  • 提供截图或视频(根据需要提供,此项不强制)

  • 提供解决方案(如果已经解决了的话,此项不强制)

image
image
image

请问如何进行手机平板尺寸适配的修改

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

问题描述

  • 框架版本【必填】:XXX

  • 问题描述【必填】:请问如何进行手机平板尺寸适配的修改

  • 复现步骤【必填】:XXX(注意:目前不受理没有复现步骤的 Bug 单)

  • 是否必现【必填】:填是/否

  • 出现问题的手机信息【必填】:请填写出现问题的品牌和机型

  • 出现问题的安卓版本【必填】:请填写出现问题的 Android 版本

请回答

  • 是部分机型还是所有机型都会出现【必答】:部分/全部(例如:某为,某 Android 版本会出现)

  • AndroidProject 最新的版本是否存在这个问题【必答】:是/否(如果用的是旧版本的话,建议升级看问题是否还存在)

  • 是否已经查阅框架文档还未能解决的【必答】:是/否(文档会提供最常见的问题解答,可以看看是否有自己想要的)

  • issue 是否有人曾提过类似的问题【必答】:是/否(看看曾经有人提过类似的问题,先参考一下别人是怎么解决的)

  • 是否可以通过 AndroidProject 工程来复现该问题【必答】:是/否(排查一下是不是自己的项目代码写得有问题导致的)

  • 使用原生的权限 API 是否会出现该问题【必答】:是/否(排查一下是不是 AndroidProject 的代码存在问题导致的)

其他

  • 提供报错堆栈(如果有报错的话必填,注意不要拿被混淆过的代码堆栈上来)

  • 提供截图或视频(根据需要提供,此项不强制)

  • 提供解决方案(如果已经解决了的话,此项不强制)

OnScrimsListener 监听回调方法中控件参数明明传的是 this ,为什么是可空类型?

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

建议收集

  • issue 是否有人曾提过类似的问题?【必答】否

  • 你觉得框架有什么不足之处?【必答】比较疑惑 OnScrimsListener 监听的回调方法 onScrimsStateChange 中,控件参数明明传的是 this ,为什么是可空类型?

  • 你觉得该怎么去完善会比较好?【非必答】当前对象应该是不为空的吧,为什么要设计为可空的参数呢?直接非空不可以吗?

编译release版时报错

问题描述

  • 框架版本【必填】:V13.2

  • 问题描述【必填】:编译release版时报错,C:/Users/me/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-coroutines-core-jvm/1.6.0/f3b8fd26c2e76d2f18cbc36aacb6e349fcb9fd5f/kotlinx-coroutines-core-jvm-1.6.0.jar!/META-INF/kotlinx-coroutines-core.kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.6.0, expected version is 1.4.0.

  • 复现步骤【必填】:编译release,或者打包release

  • 是否必现【必填】:是

  • 出现问题的手机信息【必填】:

  • 出现问题的安卓版本【必填】: Android 12

WrapRecyclerView使用GridLayoutManager后addHeaderView可以单独一行吗?

问题描述

  • 框架版本【必填】:V13.2

  • 问题描述【必填】:使用WrapRecyclerView使用GridLayoutManager后addHeaderView现在是作为一个item方式增加到列表里面,如果想实现但是一行可以吗? 目前的效果如下面的截图。

  • 复现步骤【必填】:

        adapter = TrainAdapter(getAttachActivity()!!)
        adapter?.setOnItemClickListener(this)

        recyclerView?.adapter = adapter
        recyclerView?.addItemDecoration(GridSpaceDecoration(resources.getDimension(R.dimen.dp_5).toInt()))
        recyclerView?.layoutManager = GridLayoutManager(this.activity,2)

        val headerLayout: RelativeLayout? = recyclerView?.addHeaderView(R.layout.train_top_layout)

  • 是否必现【必填】:是

  • 出现问题的手机信息【必填】:模拟器

  • 出现问题的安卓版本【必填】:Android11

请回答

  • 是部分机型还是所有机型都会出现【必答】:全部

  • AndroidProject 最新的版本是否存在这个问题【必答】:是

  • 是否已经查阅框架文档还未能解决的【必答】:是

  • issue 是否有人曾提过类似的问题【必答】:否

  • 是否可以通过 AndroidProject 工程来复现该问题【必答】:是

  • 使用原生的权限 API 是否会出现该问题【必答】:是

其他

效果截图:
image

选择图片和发送验证码出现内存泄漏

┬───
│ GC Root: System class
│
├─ android.app.ActivityThread class
│    Leaking: NO (a class is never leaking)
│    ↓ static ActivityThread.sCurrentActivityThread
│                            ~~~~~~~~~~~~~~~~~~~~~~
├─ android.app.ActivityThread instance
│    Leaking: UNKNOWN
│    Retaining 106.3 kB in 2023 objects
│    mInitialApplication instance of com.hjq.demo.app.AppApplication
│    mSystemContext instance of android.app.ContextImpl
│    mSystemUiContext instance of android.app.ContextImpl
│    ↓ ActivityThread.mNewActivities
│                     ~~~~~~~~~~~~~~
├─ android.app.ActivityThread$ActivityClientRecord instance
│    Leaking: UNKNOWN
│    Retaining 88.6 kB in 1676 objects
│    activity instance of com.hjq.demo.ui.activity.ImageSelectActivity with
│    mDestroyed = false
│    ↓ ActivityThread$ActivityClientRecord.nextIdle
│                                          ~~~~~~~~
├─ android.app.ActivityThread$ActivityClientRecord instance
│    Leaking: UNKNOWN
│    Retaining 84.9 kB in 1622 objects
│    activity instance of com.hjq.demo.ui.activity.ImagePreviewActivity with
│    mDestroyed = true
│    ↓ ActivityThread$ActivityClientRecord.activity
│                                          ~~~~~~~~
╰→ com.hjq.demo.ui.activity.ImagePreviewActivity instance
​     Leaking: YES (ObjectWatcher was watching this because com.hjq.demo.ui.
​     activity.ImagePreviewActivity received Activity#onDestroy() callback and
​     Activity#mDestroyed is true)
​     Retaining 35.8 kB in 985 objects
​     key = c1ae8f60-3e89-47c5-b257-575db421cc9e
​     watchDurationMillis = 5212
​     retainedDurationMillis = 208
​     mApplication instance of com.hjq.demo.app.AppApplication
​     mBase instance of androidx.appcompat.view.ContextThemeWrapper

METADATA

Build.VERSION.SDK_INT: 29
Build.MANUFACTURER: OnePlus
LeakCanary version: 2.7
App process name: com.hjq.demo.debug
Stats: LruCache[maxSize=3000,hits=8232,misses=78989,hitRate=9%]
RandomAccess[bytes=4147609,reads=78989,travel=31284176847,range=19937136,size=27
967466]
Heap dump reason: 5 retained objects, app is visible
Analysis duration: 6211 ms
┬───
│ GC Root: System class
│
├─ android.app.ActivityThread class
│    Leaking: NO (a class is never leaking)
│    ↓ static ActivityThread.sCurrentActivityThread
│                            ~~~~~~~~~~~~~~~~~~~~~~
├─ android.app.ActivityThread instance
│    Leaking: UNKNOWN
│    Retaining 242.2 kB in 3674 objects
│    mInitialApplication instance of com.hjq.demo.app.AppApplication
│    mSystemContext instance of android.app.ContextImpl
│    mSystemUiContext instance of android.app.ContextImpl
│    ↓ ActivityThread.mNewActivities
│                     ~~~~~~~~~~~~~~
├─ android.app.ActivityThread$ActivityClientRecord instance
│    Leaking: UNKNOWN
│    Retaining 224.5 kB in 3327 objects
│    activity instance of com.hjq.demo.ui.activity.HomeActivity with mDestroyed
│    = false
│    ↓ ActivityThread$ActivityClientRecord.nextIdle
│                                          ~~~~~~~~
├─ android.app.ActivityThread$ActivityClientRecord instance
│    Leaking: UNKNOWN
│    Retaining 220.6 kB in 3270 objects
│    activity instance of com.hjq.demo.ui.activity.StatusActivity with
│    mDestroyed = true
│    ↓ ActivityThread$ActivityClientRecord.activity
│                                          ~~~~~~~~
╰→ com.hjq.demo.ui.activity.StatusActivity instance
​     Leaking: YES (ObjectWatcher was watching this because com.hjq.demo.ui.
​     activity.StatusActivity received Activity#onDestroy() callback and
​     Activity#mDestroyed is true)
​     Retaining 109.1 kB in 2382 objects
​     key = c9c20ec0-2472-429f-a975-f7357e90af1a
​     watchDurationMillis = 5211
​     retainedDurationMillis = 195
​     mApplication instance of com.hjq.demo.app.AppApplication
​     mBase instance of androidx.appcompat.view.ContextThemeWrapper

METADATA

Build.VERSION.SDK_INT: 29
Build.MANUFACTURER: OnePlus
LeakCanary version: 2.7
App process name: com.hjq.demo.debug
Count of retained yet cleared: 5 KeyedWeakReference instances
Stats: LruCache[maxSize=3000,hits=7783,misses=74983,hitRate=9%]
RandomAccess[bytes=3891975,reads=74983,travel=29736912157,range=19469856,size=27
502605]
Heap dump reason: 5 retained objects, app is visible
Analysis duration: 5973 ms

在点击注解切面定义中,连接点注解@Around("method() && @annotation(singleClick)"),在已经定义切点的情况下,是否可以直接使用@Around("method()")?

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

建议收集

  • issue 是否有人曾提过类似的问题?【必答】否

  • 你觉得框架有什么不足之处?【必答】无

  • 你觉得该怎么去完善会比较好?【非必答】(你可以提供一下自己的想法或者做法供作者参考)

为什么构建成功后,运行项目,提示配置ndk

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

建议收集

image
这是截图

  • issue 是否有人曾提过类似的问题?【必答】(一旦出现重复提问我将不会再次解答)

  • 你觉得框架有什么不足之处?【必答】(你可以描述框架有什么令你不满意的地方)

  • 你觉得该怎么去完善会比较好?【非必答】(你可以提供一下自己的想法或者做法供作者参考)

后面还会更新这个中台吗

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

建议收集

  • issue 是否有人曾提过类似的问题?【必答】(一旦出现重复提问我将不会再次解答)

  • 你觉得框架有什么不足之处?【必答】(你可以描述框架有什么令你不满意的地方)

  • 你觉得该怎么去完善会比较好?【非必答】(你可以提供一下自己的想法或者做法供作者参考)

Demo内存泄漏

【警告:请务必按照 issue 模板填写,不要抱有侥幸心理,一旦发现 issue 没有按照模板认真填写,一律直接关闭】

问题描述

  • 框架版本【必填】:demo

  • 问题描述【必填】:webview?

  • 复现步骤【必填】:

  • 是否必现【必填】:是

  • 出现问题的手机信息【必填】:TPS980P

  • 出现问题的安卓版本【必填】:7

请回答

  • 是部分机型还是所有机型都会出现【必答】:部分

  • AndroidProject 最新的版本是否存在这个问题【必答】:是

  • 是否已经查阅框架文档还未能解决的【必答】:否

  • issue 是否有人曾提过类似的问题【必答】:否

  • 是否可以通过 AndroidProject 工程来复现该问题【必答】:是

  • 使用原生的权限 API 是否会出现该问题【必答】:是

其他

  • 提供报错堆栈

┬───
│ GC Root: System class

├─ android.app.ActivityThread class
│ Leaking: NO (a class is never leaking)
│ ↓ static ActivityThread.sCurrentActivityThread
│ ~~~~~~~~~~~~~~~~~~~~~~
├─ android.app.ActivityThread instance
│ Leaking: UNKNOWN
│ Retaining 143.5 kB in 2731 objects
│ mInitialApplication instance of com.hjq.demo.app.AppApplication
│ mSystemContext instance of android.app.ContextImpl
│ ↓ ActivityThread.mActivities
│ ~~~~~~~~~~~
├─ android.util.ArrayMap instance
│ Leaking: UNKNOWN
│ Retaining 132.1 kB in 2541 objects
│ ↓ ArrayMap.mArray
│ ~~~~~~
├─ java.lang.Object[] array
│ Leaking: UNKNOWN
│ Retaining 132.1 kB in 2539 objects
│ ↓ Object[].[3]
│ ~~~
├─ android.app.ActivityThread$ActivityClientRecord instance
│ Leaking: UNKNOWN
│ Retaining 132.1 kB in 2538 objects
│ Library leak match: instance field android.app.ActivityThread$ActivityClientRecord#nextIdle
│ activity instance of com.hjq.demo.ui.activity.HomeActivity with mDestroyed = false
│ ↓ ActivityThread$ActivityClientRecord.nextIdle
│ ~~~~~~~~
├─ android.app.ActivityThread$ActivityClientRecord instance
│ Leaking: UNKNOWN
│ Retaining 125.4 kB in 2325 objects
│ activity instance of com.hjq.demo.ui.activity.PersonalDataActivity with mDestroyed = true
│ ↓ ActivityThread$ActivityClientRecord.activity
│ ~~~~~~~~
╰→ com.hjq.demo.ui.activity.PersonalDataActivity instance
​ Leaking: YES (ObjectWatcher was watching this because com.hjq.demo.ui.activity.PersonalDataActivity received
​ Activity#onDestroy() callback and Activity#mDestroyed is true)
​ Retaining 52.7 kB in 924 objects
​ key = cc01d22d-0ed5-4502-bc91-db7666a09f3e
​ watchDurationMillis = 5307
​ retainedDurationMillis = 304
​ mApplication instance of com.hjq.demo.app.AppApplication
​ mBase instance of androidx.appcompat.view.ContextThemeWrapper

                                                                                                METADATA
                                                                                                
                                                                                                Build.VERSION.SDK_INT: 25
                                                                                                Build.MANUFACTURER: rockchip
                                                                                                LeakCanary version: 2.7
                                                                                                App process name: com.hjq.demo.debug
                                                                                                Stats: LruCache[maxSize=3000,hits=2538,misses=46890,hitRate=5%]
                                                                                                RandomAccess[bytes=10815310,reads=46890,travel=29482433498,range=20901836,size=33254247]
                                                                                                Heap dump reason: 7 retained objects, app is visible
                                                                                                Analysis duration: 6588 ms

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.