自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(300)
  • 资源 (1)
  • 收藏
  • 关注

原创 Android studio中通过Gradle依赖无法下载三方库Failed to resolve: com.scwang.smartrefresh:SmartRefreshLayout:1.1.0

在老版本Android studio中已经在build.gradle中配置了国内镜像源/依赖库。

2024-05-22 14:37:05 637

原创 Android中华为手机三态位置权限申请理解

这样,在下次用户再次打开应用程序时,应用程序可以直接使用之前获得的权限,而不需要再次请求用户的授权。总的来说,"仅使用期间允许"更加严格,确保应用程序只能在用户使用应用程序的时候获取位置信息,而"允许本次使用"则允许应用程序在一定时间内持续获取位置信息,即使用户已经离开应用程序。思考:如果我们点击了允许本次使用,那我们在位置信息权限页面则会看到每次使用询问被选中,那是不是每次进入APP如果需要用到位置权限,岂不是每次都要申请权限,但是我测试发现并不是这样,并不需要再去获取权限了。

2024-05-21 18:16:22 1244 1

原创 Android中对MVC,MVP,MVVM架构的理解

但是随着软件越来越来复杂,会发现这样的写法不是太好,有些缺陷,Controller和View越来越耦合了,Controller指挥View去显示,具体怎么显示Controller是不关注的,比如setContentView(R.layout.activity_m_v_c),和具体的摆放逻辑全部是在xml中进行摆放布局的,但是Controller层要操控具体的数据应该放在哪个控件上,随着软件越来越大,Controller和View层的关系越来越紧密,所以引入了MVP架构。1、Model层对应的代码。

2024-05-07 12:03:45 1335 1

原创 Android中TabLayout与ViewPager结合使用生命周期详解

这里我们想要探讨的是生命周期这块,如上所示我们是继承的带一个参数的FragmentPagerAdapter,但是已经被废弃了,内部其实实现的是。我们现在使用最新的AndroidX中,尽量使用该行为BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT。先执行了标签一的onResume()方法,标签二的onResume()方法并没有执行。当我们在切换标签页的时候,生命周期方法也没有再次执行,因为已经加载过了。可见首次加载都会执行Fragment的onResume()方法。

2024-05-06 10:52:45 576

原创 Android中Gradle的生命周期详解

settings.gradle 执行setting.gradle文件里面的代码,把对应的项目结构给配出来。第二个阶段:定义阶段(配置阶段),通过执行多个build.gradle去画一个任务的有向无环图。如果在第二三阶段之间插代码,那么是在根目录的build.gradle文件的最后面加入。这个时候有向无环图就画好了。如果想要在第一二阶段之间插代码,那么在setting.gradle文件下。第三个阶段:执行阶段,按照任务的依赖按照顺序执行即可。这个项目先执行项目根目录下的build.gradle。

2024-03-13 17:18:10 501

原创 Android中compile,implementation和api的区别,以及gradle-wrapper的详解

如果你已经有被wrap的gradle,那么就使用已经有的,如果没有就下载下来进行使用。:项目变小了,只需要指定需要版本的gradle,不需要将gradle放进项目里面,如果其他人要使用该项目,只需要使用使用其他人电脑上面的gradle即可,如果没有下载下来使用。重要:当我们使用了传递依赖compile,0级项目依赖了1级项目,1级项目依赖了2级项目,2级项目代码的改动,会导致0级项目重新编译。那么就是A能使用C中的类。不进行传递依赖,2级项目代码的改动,不会导致0级项目编译,这样项目打包的总时间会变快。

2024-03-13 15:51:58 2177

原创 Android studio Gradle下载失败,如何手动配置解决该问题详解

今天在打开公司一个项目时,突然要重新下载相关的gradle,不知道Android studio抽了什么风哈哈哈,但是一直提示下载失败,把项目根目录下的.gradle缓存删除也无济于事。前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。通过Android studio加载任何项目后,都会自动下载gradle,找到项目对应的gradle版本进去。下载对应的.zip压缩包。以下就是一个gradle下载失败的一个情况,具体步骤已在图片中给出。

2024-03-08 10:32:03 3296

原创 Android中自定义View时尺寸需要注意的相关事项

在Android中自定义View时,一定要用dp或者sp不要用px,这样在不同的设备上面才有一至的显示效果,这可能是做了很多自定义View的安卓开发者所没有注意的事情。但是我们在自定义View时,只有像素px来进行设置,那么这个时候就需要通过把对应的dp转换为像素值px之后应用到对应的视图上面。前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。下面提供两个Kotlin的拓展函数,来将dp,sp转换为px。

2024-02-22 18:04:52 693

原创 Android中通过属性动画实现文字轮播效果

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。一、创建一个自定义ProvinceView类,具体代码如下。三、在Activity中通过属性动画来实现文字轮播效果。二、在对应的xml中引入该自定义View。

2024-02-22 17:53:20 658

原创 Android中Transition过渡动画的简单使用

二、Activity代码如下。

2024-02-22 17:38:54 910

原创 Android约束布局中用ConstraintHelper实现过渡动画效果

通过继承 ConstraintHelper 类,CircularRevealHelper 类可以继承 ConstraintLayout 的功能,并且可以通过调用父类的方法来获取 ConstraintLayout 中的子视图,进而对这些子视图进行 CircularReveal 动画的实现。继承ConstraintHelper的作用:继承 ConstraintHelper 类的主要目的是为了在自定义 CircularRevealHelper 类中重用 ConstraintLayout 的布局约束和属性。

2024-02-22 14:18:04 639

原创 Android studio报错误提示 Some Kotlin libraries attached to this project 问题解决方案

问题原因:Android studio默认生成的依赖库版本太高,是用最新的Kotlin编译器编译的,需要更新Kotlin插件,这个时候,我们只需把依赖版本降低即可。这个项目附带的一些Kotlin库是用更新的Kotlin编译器编译的,无法读取。请更新Kotlin插件。app目录下的build.gradle为,这是Android studio默认生成的。这是可以编译通过的版本依赖,把这写依赖拷贝到你的项目中即可通过。Android新建项目后,报以下错误。

2024-01-05 11:07:31 1370 3

原创 Android 项目适配64位架构后,腾讯X5内核加载失败解决方案

这个可用的依赖是来自 com.tencent.tbs.tbssdk 组织的项目,具体原因不得而知,但是已经解决了加载失败的问题。在接入最新腾讯X5内核后,发现初始化会失败,在APP模块的build.gradle文件中放入对应的依赖,依赖由官网提供。这个时候我们把真机上原有的APP删掉,之后重新运行,不然无法真实的测试是否能正常加载。用这个将包更改为2020年发布的版本即可使用,X5内核也能正常加载了,大家也能发现仓库名成也变了。如果知道原因的朋友们,可以在评论区一起讨论一下,一起成长,一起进步!

2024-01-04 11:54:44 1974

原创 一位安卓开发程序员的2023年终总结

在新环境办公确实挺欣喜,因为毕竟搬到了一个新环境,新鲜感还是有的,工作也很有干劲,因为新办公场地,比以前大了将近四倍,当时觉得公司未来可期,自己估计也能跟着喝个汤,年底涨个薪啥的,就在我还没从梦中醒来的时候,在我正在热火朝天工作的时候,同事跟我说公司开始裁员了,当时我的心想裁就裁呗,我这边活多的很,我还这么年轻,技术也还算OK,跟我有什么关系呢,主打一个事不关己的样子,两个小时候后,我便收到HR的消息,让我去办公室一躺,这个时候我才知道也裁到了我的头上。接下面的事情关注我的人应该都知道,马不停蹄的找工作。

2023-12-30 13:16:23 535

原创 Flutter最新配置本地资源文件详解,报错看这篇文章就对了!

放开后还需要微调一下,原有的是images文件下,存放图片资源,也可以自己新建文件夹,这里我用的是assets文件夹,这里面存放本地资源图片。前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。Flutter中配置对应的资源图片等本地资源,需要在pubspec.yaml文件中进行相应的依赖配置。这个不是另加的,在大概60多行的位置已经有给出的模版,把注释放开。1、配置的位置不对,如下图所示。这个时候点击Pub get。

2023-11-16 15:32:23 469

原创 Android studio配置Flutter开发环境报错问题解决

2、在Flutter项目下的Android目录下,找到gradle.properties文件。博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家。Flutter默认使用的Gradle版本为7.3.0 ,所以需要JDK 11。这就是每次创建Flutter项目所默认的gradle插件的版本。配置对应的JDK11路径即可。下载后,放到对应的路径下。1、首先下载JDK11。

2023-11-15 15:29:32 1244

原创 Android中OkHttp源码阅读二(责任链模式)

博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家。2、定义四个Task类,都继承自BaseTask,这里只写一个其它三个同理。2.定义一个链条管理类ChainManager。3.定义三个Task1,Task2,Task3。1、定义一个抽象类BaseTask。4、定义一个Test类进行测试。3、定一个Test类进行测试。1.首先定义一个接口。

2023-09-03 18:03:22 1687

原创 Android OkHttp源码阅读详解一

博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家。4、根据OkHttp中构建者模式写一个例子。4、定义一个类DesignerPerson。2、OkHttp源码阅读之线程池详解。5.定义一个类UserClient。1.定义一个类HomeParam。2、OkHttp主线流程源码阅读。1、首先回顾OkHttp的使用。3、定义一个类Worker。2.定义一个类House。

2023-09-03 17:52:34 1017

原创 Android全面屏下,默认不会全屏显示,屏幕底部会留黑问题

若开发者没有声明该属性,ratio_float 的默认值为1.86,小于2.0,因此这类应用在全面屏手机上,默认不会全屏显示,屏幕底部会留黑。具体声明如下,其中的 ratio_float 被定义为是高除以宽,以 16:9 为例,ratio_float = 16/9 = 1.778 (18:9则为2.0)。这个属性设置为了false,我们新建的项目,是没有这个属性的,然后我把这个属性设置为了true,底部黑条便没有了,实现了全面屏。最终解决了这个问题,以后排查问题,一定要细心细心,再细心。

2023-08-28 14:48:42 1420

原创 Android JNI实现锅炉压力显示系统详解

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。第三步实现在MainActivity中,调用相关的C代码,显示锅炉压力值,根据压力值显示不同的UI在Android设备上。第二步在build.gradle文件中,进行相关配置。第四步实现自定义View,PressureView。第一步创建GuoLu.c文件。

2023-08-13 16:16:24 354

原创 Android JNI开发从0到1,java调C,C调Java,保姆级教程详解

第三歩,在app目录下的build.gradle文件中的,android{}闭包中,指定CMakeLists.txt路径。2.根据命令行javah +JNI2的全类名,生成com_example_jniproject_JNI2.h头文件。在app目录下,指定CmakeLists.txt文件,根据注释进行相应添加。3.根据jni协议,去写对应的c代码,创建Test.c文件,代码如下。2.根据命令行,javah +JNI3全类名,生成对应的头文件。第五步,C代码调用Java代码,首先创建JNI3.java。

2023-08-12 16:17:01 1971

原创 C语言基础入门详解三

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。二、C语言中联合体的理解。五、C语言中结构体指针。一、C语言之函数指针。四、C语言中的结构体。

2023-07-30 12:48:51 173

原创 C语言基础入门详解二

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。静态内存是程序编译执行后系统自动分配,由系统自动释放,静态内存是栈分配的。三、C语言中让用户输入数组。四、C语言中数组的取值运算。六、C语言中静态内存分配。七、C语言中动态内存分配。八、C语言中动态创建数组。一、C语言多级指针入门。二、C语言中数组的简介。五、C语言中的指针长度。

2023-07-30 11:44:51 154

原创 C语言基础入门详解一

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。3、被调函数中通过修改 *形参名的方式修改主调函数相关变量的值。执行switch1()函数控制台输出的结果。执行switch2()函数控制台输出的结果。通过被调函数修改主调函数普通变量的值。1、实参必须是普通变量的地址。一、C语言基本数据类型详解。七、C语言中函数返回多个值。四、C语言指针的初步认识。五、C语言指针的深入理解。二、C语言输出函数详解。三、C语言输入函数详解。

2023-07-29 13:53:06 221

原创 Android 获取项目证书指纹MD5、SHA1、SHA256步骤详解

第一步,首先找到Android studio依赖的本地JDK路径。这样便可以拿到MD5、SHA1、SHA256这些值。第二步,找到路径输入cmd。第三步,输入指令如下。

2023-07-21 16:40:50 3787

原创 Android Hook技术实战详解

而通过Hook技术,我们可以修改或拦截这些API的行为,以达到修改系统或应用程序行为的目的。Android Hook技术是指在Android平台上通过修改、拦截或替换系统或应用程序的API、方法或行为,实现对系统或应用程序的定制和扩展的技术手段。前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。1.首先定义MainActivity,在该类里面通过hook()方法,进行了Hook,具体注释已经在代码中给出。下面实现一个简单的例子。

2023-07-16 20:52:47 1759 1

原创 Android手写占位式插件化框架之apk解析原理系统源码分析

问题引出,在宿主app中获取插件包中静态注册的广播接收者StaticeReceiver,这个时候就需要apk解析原理系统源码分析,分析后进行再来操作。一、在宿主APP中的PluginManager类中,增加一个方法parserApkAction(),通过反射源码,来解析apk文件里的所有信息。前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。分析完apk解析原理后,然后通过反射技术进行获取对应的信息。

2023-07-16 10:40:18 681

原创 Android手写占位式插件化框架之Activity通信、Service通信和BroadcastReceiver通信

因为插件APK是没有安装和运行的一个APK文件,是没有上下文环境的,所以插件内部的Activity也就无法直接运行,只能通过代理的Activity,做为其上下文,并加载布局进行显示。很多大厂APP内会有很多功能模块,但是包体积却很小,那么就用到了插件化技术,点击某个模块后,从服务器获取对应的APK文件,并使用其内部的功能。因为插件APK是没有安装和运行的一个APK文件,是没有上下文环境的,所以不能使用自身的this,因为自身的this为空。3、这种插件化,在写插件开发的时候,有什么要注意的事项?

2023-07-15 16:28:51 856

原创 Android PackageManagerService源码分析和APK安装原理详解

mPM是系统中写的AIDL文件,通过mPM.getPackageInfo(),调用到代理对象Proxy类中重写的getPackageInfo()方法,代理对象又调用到PackageManagerService中的getPackageInfo()方法。首先通过adb install 输入包名后,一敲回车,会执行到commandline.c文件下的,adb_commandline()方法。1.静默安装,又叫无界面的安装,从各大手机厂商应用商店下载的APK,便是无界面的安装。

2023-07-13 21:17:21 1310

原创 No signature of method: build_dr75kj88i2pi195a6zalvt5yu.android() is applicable for argument types

因为本项目创建时勾选的是Kotlin语言,因此Android studio会自动加入插件apply plugin: “kotlin-android”!

2023-06-02 15:16:42 351

原创 Android中Binder在项目中的具体使用详解

在 Android 应用程序中使用 Binder 通常可以通过两种方式实现,一种是使用 AIDL(Android 接口定义语言)定义接口,并通过 Binder 服务实现接口的跨进程调用,另一种是通过 Messenger 实现基于消息的跨进程通信。Binder API:位于 Java 层,是 Android 应用程序和 Binder 驱动之间的接口,它提供了创建 Binder 服务和跨进程访问 Binder 服务的方法和实现。在服务端B程序进行登录后,跳转到客户端程序A,打印的。

2023-05-30 15:21:08 2329

原创 Flutter中 解决自定义阿里妈妈图标一直显示不出来的问题

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。Flutter中 自定义图标一直显示出来的问题,这里引用的是阿里妈妈图标。

2023-05-07 17:09:38 390 1

原创 Android GridLayoutManager.setSpanSizeLookup的使用介绍

使用setSpanSizeLookup后的效果图如下。

2023-03-12 11:01:28 1092

原创 Android RecyclerView的notify方法和动画的刷新详解

7、执行insert_3_2(),实际调用的是notifyItemRangeInserted(3, 2);1、执行notifyAllData(),实际调用的是 notifyDataSetChanged 刷新全部,适配器执行方法如下。7、执行move_2_4(),实际调用的是notifyItemMoved(2, 4);2、执行notify_2(),实际调用的是 notifyItemChanged(2),适配器执行方法如下。8、执行remove2(),实际调用的是notifyItemRemoved(2);

2023-03-11 12:39:12 1803 1

原创 Android 网络请求库Retrofit使用详解

1、首先在Android项目中引入需要的依赖。2、创建一个单例类,返回Retrofit对象。

2023-02-25 17:21:44 2521

原创 Android项目中运行main方法,进行测试,配置方法

博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家。2、在gradle.xml文件夹中添加一个配置。这样就可以运行main方法了。1、找到.idea文件夹。

2023-02-15 21:38:14 1316

原创 Kotlin中与Java互操作与可空性、类型映射、属性访问、@JvmOverloads、@JvmField、@JvmStatic、@Throws和函数类型操作详解

Java世界里所有对象都可能是null,当一个Kotlin函数返回String类型值,你不能想当然地认为。博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家。二、类型映射、属性访问、@JvmOverloads详解。四、@JvmStatic、@Throws和函数类型操作。一、Kotlin与Java互操作与可空性。2、使用Java创建一个Person类。2、Kotlin代码调用Java代码。1、使用Kotlin创建一个类。1、首先定义一个Java类。

2023-02-11 11:00:10 332

原创 Kotlin中函数式编程的详解

我们一直在学习面向对象编程范式,另个一个较知名的编程范式是诞生于20世纪50年代,基于抽象数学的λ(lambda)演算发展而来的函数式编程,尽管函数式编程更常用在学术而非软件领域,但它的一些原则适用于任何编程语言。函数式编程范式主要依赖于高阶函数(以函数为参数或返回函数)返回的数据,这些高阶函数专用于处理各种集合,可方便的联合多个同类函数构建链式操作以创建复杂的计算行为。函数式编程用到的函数生来就是可组合的,也就是说,你可以组合多个简单函数来构建复杂的计算行为。三、为什么要使用函数式编程?

2023-02-07 22:02:48 840

原创 Kotlin中扩展函数、infix关键字、apply函数和DSL的详解

扩展可以在不直接修改类定义的情况下增加类功能,扩展可以用于自定义类,也可以用于比如List,String,以及Kotlin标准库里的其他类。和继承相似,扩展也能共享类行为,在你无法接触某个类定义,或者某个类没有使用open修饰符,导致你无法继承它时,扩展就是增加类功能的最好选择。博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家。1、定义扩展函数和超类上定义扩展函数。6、定义扩展文件和重命名扩展。2、标准函数与泛型扩展函数。4、可空类型扩展函数。

2023-02-02 22:05:42 308

原创 Kotlin中接口、抽象类、泛型、out(协变)、in(逆变)、reified关键字的详解

一、Kotlin中接口的定义。四、out协变和in逆变详解。五、reified关键字。

2023-02-01 21:47:47 476

SwipeRefreshDemo.zip

Android中使用SwipeRefresh实现了RecyclerView的下拉刷新和上拉加载

2021-05-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除