- 博客(130)
- 资源 (32)
- 收藏
- 关注
原创 mac出现java程序运行版本不一致解决方案
所以也就是编译jadx-1.5.1-all.jar用的JRE是java11,而我现在电脑上的java运行时环境是java8,用命令查看一下。mac下的JDK都默认安装在这个目录下:/Library/Java/JavaVirtualMachines/如果当前使用的shell是zsh就编辑.zshrc文件,如果是bash就编辑.bash_profile文件。javac -version 查看当前Java的jre版本。java -version 查看当前Java的jdk版本。我这里下载的是JDK22版本。
2025-03-18 14:25:08
517
原创 常用Kotlin方法
kotlin的集合分为可变和不可变,可变的集合带有mutable形容词。list转array,set转list,list转MutableList。
2025-03-11 09:16:30
179
原创 ViewBinding使用
ViewBinding是 Android 开发中用于替代 findViewById的功能,以更简单、安全的方式访问布局文件中的视图组件。View Binding 会为每一个activity文件生成一个绑定类,类的名称 NewsContentFragBinding 是一个自动生成的类,它为布局文件 news_content_frag.xml 提供 binding 类。现在就可以使用生成的 View Binding 类访问和修改布局文件内的视图组件。现在,你可以在代码中使用 View Binding。
2025-03-07 15:22:21
162
原创 kotlin中reified如何实现真泛型
reified是 Kotlin 的「」,配合inline函数,让泛型在运行时保留类型信息,直接看到具体的类型(不再被类型擦除蒙蔽双眼)。
2025-02-28 15:13:38
457
原创 Gradle 依赖配置详解:`api`、`compile`、`compileOnly`、`implementation` 的区别
在 Gradle 构建系统中,理解依赖配置对于优化项目结构和构建速度至关重要。随着 Gradle 版本的演进,compile配置已经被废弃,取而代之的是更现代的api和配置。此外,用于特定场景。这篇文章将详细介绍这些依赖配置的用法及其区别。compileapi。
2025-02-26 16:55:21
566
原创 Android程序自身重启程序的几种方法
可以创建一个新的 Intent 对象,将需要重新启动的 Activity 添加到 Intent 中,并使用 FLAG_ACTIVITY_CLEAR_TOP 和 FLAG_ACTIVITY_SINGLE_TOP 标志,其中 FLAG_ACTIVITY_CLEAR_TOP 是用来清除 Activity 堆栈的,而 FLAG_ACTIVITY_SINGLE_TOP 表示只是重新使用已有的 Activity,而不是创建新的 Activity。使用 recreate() 方法。
2025-02-18 15:18:06
366
原创 javac生成的名称中的$$含义
但是由于规范允许任意共享/重用表示等效lambda表达式的类和实例(执行相同的操作)和方法引用(针对相同的方法),所以这种命名模式并不是每个实现策略都能实现的。此外,第3次执行总是遇到与第2次相同的类,因为它是相同的方法引用表达式(注意:由于所有表达式的目标是相同的,所以不同的表达式),并且类被重复使用。ClassD$ClassDd$ClassDdd.class,这里ClassDdd是对底层的普通内部类,它的父类ClassDd,而ClassDd的父类也是最外层的外部类ClassD。
2025-02-14 09:31:49
467
原创 Android-目前最稳定和高效的UI适配方案
为了更形象的展示,假设我们在布局文件中把一个ImageView的宽度设置为360dp,那么在下面两张图中表现是不一样的:图一是1080P,480dpi的手机,图二是1080P,420dpi的手机从上面的布局中可以看到,同样是1080P的手机,差异是比较明显的。在这种情况下,我们的UI可能需要做一些微调甚至单独适配。
2025-01-15 15:15:39
932
原创 Android string.xml中特殊字符转义
进行显示、在XML中空格符不是用HMTL中的表示、而是用编码表示。针对特殊字符:@号 冒号等,直接写肯定不行,需转译。项目中要在string.xml 中显示特殊符号。(一个中文宽度,但用起来会比中文字宽一点点)(半个中文宽度,但两个空格比一个中文略大)(中文全角空格 (一个中文宽度))(普通的英文半角空格但不换行)不要忘记,需一同带上。
2025-01-14 16:49:26
1054
原创 Fragment setMaxLifecycle方法
ViewPager2中最新的Fragment代码淘汰了方法,转而支持用方法,言外之意是设置最大生命周期,懂行的人应该知道,Fragment一直都是无法直接设置生命周期,必须通过addattachremovedetachshowhide方法间接干预,本来就此功能,简单介绍一下的原理和上手效果;定义在中,和之前的addattachremovedetachshowhide等方法是并列关系;fragment即需要操作的Fragment对象,前提条件是这个fragment必须已经加到中;state。
2025-01-14 15:41:00
611
原创 Kotlin中异常
1、kotlin中的异常处理和java处理相似,除了Kotlin不要求你声明函数可以抛出的异常。2、如果一个try代码块执行一切正常,代码块中最后一个表达式就是结果。3、如果捕获到一个异常,那么cache代码块中最后一个表达式就是结果。
2025-01-10 17:56:59
846
原创 Kotlin接口
实例中接口 A 和 B 都定义了方法 foo() 和 bar(), 两者都实现了 foo(), B 实现了 bar()。因为 C 是一个实现了 A 的具体类,所以必须要重写 bar() 并实现这个抽象方法。然而,如果我们从 A 和 B 派生 D,我们需要实现多个接口继承的所有方法,并指明 D 应该如何实现它们。这一规则 既适用于继承单个实现(bar())的方法也适用于继承多个实现(foo())的方法。实现多个接口时,可能会遇到同一方法继承多个实现的问题。一个类或者对象可以实现一个或多个接口。
2025-01-10 17:35:47
194
原创 Kotlin高阶函数
所有函数类型都有一个圆括号括起来的参数类型列表以及一个返回类型:(A, B) -> C 表示接受类型分别为 A 与 B 两个参数并返回一个 C 类型值的函数类型。因为这其实是个假的调用,它是 Kotlin 的语法糖,实际上你对一个函数类型的对象加括号、加参数,它真正调用的是这个对象的 invoke() 函数。我们可以很容易地直接调用它(isOdd(5)),但是我们也可以将其作为一个函数类型的值,例如将其传给另一个函数。高阶函数是将函数用作参数或返回值的函数,还可以把函数赋值给一个变量。
2025-01-10 17:09:10
950
原创 Kotlin 内建代理
观察者模式是一种设计模式,在这一模式中,一个对象会维护一个它的从属者的列表,这些从属者即被称为观察者。对象会在它自己的状态改变时对观察者进行通知。由于惰性初始化是同步的,所以在第一次访问时仍会消耗与非惰性初始化过程相同的时间,这意味着那些初始化过程较为耗时的对象仍会在被访问时阻塞 UI 线程。会创建一个ObservableProperty对象,用于在每次 setter 被调用时执行您传给代理的 lambda 表达式。lambda 表达式会在属性第一次被访问时执行,而它的值将会被存储以用于接下来的访问。
2025-01-09 17:09:28
909
原创 Kotlin学习(一)
为了让 Java 不能访问 Kotlin 中的函数,可以在 Kotlin 中将这些函数的命名改为不合法的形式,然后用反引号包起来,这么做之后,Java 代码是不能调用这些方法的,而 Kotlin 可以调用,从而可以实现在 Java 中屏蔽某些 Kotlin 函数的效果。说明不够,代码来凑!Java 中,对象的首地址是它在内存中存放的起始地址,它后面的地址是用来存放它所包含的各个属性的地址,所以内存中会用多个内存块来存放对象的各个属性值,而通过这个首地址就可以找到该对象,进而可以找到该对象的各个属性。
2025-01-09 16:10:41
1428
原创 Docker访问公网的方法
Docker访问公网的方法有:配置正确的网络模式、设置DNS服务器、调整防火墙规则、使用Docker Compose管理网络。 其中,配置正确的网络模式是确保Docker容器能够访问公网的关键。Docker的网络模式包括bridge、host、none和container模式,其中bridge模式是默认的网络模式,它创建了一个虚拟网桥,将容器连接到宿主机的网络上。正确配置bridge模式可以确保容器能够正常访问公网。要详细了解Docker如何访问公网,我们需要从多个方面来探讨,包括Docker网络模式的选择
2024-11-21 16:18:14
968
原创 HashMap多种遍历方式
①entrySet()遍历map1.put("小明", 1);map1.put("小红", 2);map1.put("小张", 3);//for-each + entrySet()遍历②lambda表达式遍历map1.put("小明", 1);map1.put("小红", 2);map1.put("小张", 3);//lambda表达式遍历});
2024-11-18 10:06:41
1477
1
原创 WebView多进程错误
Crash信息:项目中开启了两个进程:com.xxx.app.test 和 com.xxx.app.test.pushcore错误原因:Android P行为变更,不可多进程使用同一个目录webView,需要为不同进程webView设置不同目录。
2024-11-06 14:15:15
1073
原创 Android DataBinding的使用
本文是用来简记DataBinding使用前的配置及一些情况下的使用。默认情况下,生成的Binding类的名称是布局文件去除下划线、(),所有单词首字母大写(被下划线分割的视为一个单词)。然后再后面加上Binding。被放置在build\generated\source\apt\debug\项目包名\databinding包下。自定义Binding类名称:...更换生成的Binding类所在的包:直接在刚刚的指定的名称前指定包名就可以了。...
2024-09-26 21:41:33
1728
原创 rxjava Emitter
在这个例子中,我们创建了一个Observable,然后定义了一个Subscriber来订阅这个Observable。方法来创建Observable,并通过Emitter发射了一个事件,然后完成。Subscriber中的方法会根据Emitter发出的事件类型(在Android开发中,RxJava是一个流行的库,用于处理异步和基于事件的编程。Emitter是RxJava的一个组件,它用于发射事件。: 发射一个错误事件,表示事件流出现异常。: 发射一个完成事件,表示事件流结束。: 发射一个非结束事件。
2024-09-19 15:42:39
248
原创 Android JetPack系列之——Navigation
根据官方介绍,JetPack是一个由多个库组成的套件,可帮助开发者遵循最佳做法,减少样板代码并编写可在各种Android版本和设备中一致运行的代码,让开发者可将精力集中于真正重要的编码工作。下面是官方关于Jetpack的描述图1. 基础组件``(1) AppCompat:使得支持较低的 Android 版本。从以前继承 Activity 到现在继承AppCompatActivity 就是属于这一部分``(2) Android KTX:Kotlin 的扩展支持库`
2024-09-19 15:23:34
1659
转载 Android多开/分身检测
多开/分身原本用于方便有多个微信/QQ解决同时登录的问题,但近来年被各种黑产所利用,多见于薅羊毛,部分多开App甚至提供了篡改功能。对于普通用户根本不会有多开的需求的App,一旦检测到当前运行在多开环境下,有理由限制该用户的后续行为。在尝试了目前市面上多款多开App后,总结了几种检测方案。
2024-08-27 13:56:49
687
原创 ImageView scaleType属性
(1)当图片大于ImageView的宽高:以图片的中心点和ImageView的中心点为基准,按比例缩小图片,直到图片的宽高有一边等于ImageView的宽高,则对于另一边,图片的长度大于或等于ImageView的长 度,最后用ImageView的大小居中截取该图片。(2)当图片小于ImageView的宽高:以图片的中心店和ImageView的中心点为基准,按比例扩大图片,直到图片的宽高大于或等于ImageView的宽高,并按ImageView的大小居中截取该图片。小图放大两边都大等于IV,大的一边裁切掉)
2024-08-15 09:34:44
1079
原创 Android 15 适配之16K Page Size
15来了 适配问题也就来了,之前讲过里面有简单提到过16K内存适配,本文就针对16KB页面设备适配详细介绍一下,
2024-07-29 16:42:32
2601
原创 Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
老项目放到新AS上面报错:解决方法:在gradle.properties文件最后添加:
2024-07-29 08:58:28
1116
原创 安卓项目中so库选择
NDK编译出来的。一些重要的或者核心协议一般都用c写然后给java调用。这样可以避免反编译后查看到应用的源码。放置so文件的正确方式:• 为了减小 apk 体积,只保留 armeabi 和 armeabi-v7a 两个文件夹,并保证这两个文件夹中 .so 数量一致• 对只提供 armeabi 版本的第三方 .so,原样复制一份到 armeabi-v7a 文件夹。
2024-07-08 23:51:50
815
原创 java.lang.IllegalArgumentException: pointerIndex out of range
这是ViewPager自身对于多点触控处理的bug,该bug可以追溯到Android4.4。该问题会导致应用崩溃。根本原因在于没有调用 super.onInterceptTouchEvent();造成 mActivePointerIdactivePointerIndex的值不能正确获取。导致父类 onTouchEvent取值错误,最终 onTouchEvent不能正确执行。或者在调用getX getY的位置添加异常捕获。
2024-07-04 18:07:14
454
原创 编译错误:module java.base does not “opens java.io“ to unnamed module @45208b59
修改工程中gradle.properties 文件。
2024-07-02 14:44:56
319
原创 编译错误:org.gradle.api.plugins.UnknownPluginException: Plugin with id ‘maven‘ not found
在 build.gradle文件中 将原代码。
2024-07-02 14:14:25
642
原创 android gradle错误:Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt
【代码】android gradle错误:Duplicate class kotlin.collections.jdk8.CollectionsJDK8Kt。
2024-07-02 10:13:28
857
原创 Lambda表达式讲解
Lambda表达式是JDK1.8之后的一种语法,是一个匿名函数,是对匿名函数的简写形式,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递),可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升;//之前的排序@Override});//使用Lambda表达式通过上面的对比,发现Lambda表达式式书写起来更为简洁;
2024-06-27 23:37:18
863
原创 Android studio Logcat 功能介绍
Android Studio Jellyfish版本下logcat功能,不同的tag会有不同的颜色,不同level等级的log默认也有不同的颜色。log过滤修改的更简洁了,原先的log视图只需要勾选就可以选择不同level的log了,只需要选择只展示当前应用的log就可以过滤掉其他应用的log。
2024-06-26 14:48:55
2324
原创 Mac环境下反编译apk
将xxx-dex2jar.jar 文件拖拽到 jd-gui下面查看代码即可。对xxx.apk进行反编译,得到一个同名的目录,里面就是布局文件。1)将xxx.apk拷贝到dex2jar所在目录中。2)命令行下定位到dex2jar文件夹,执行。生成 xxx-dex2jar.jar。dex2jar反编译。
2024-06-25 17:23:25
1607
1
原创 关于jd-gui启动报This program requires Java 1.8+的错误
然后,打开“Contents/MacOS/universalJavaApplicationStub.sh”文件,使用以下资源替换,保存即可。在“访达”中,右击JD-GUI图标,点击“显示包内容”。
2024-06-25 16:41:48
1470
原创 Android源码目录结构介绍
Android源码包含比较多的文件,比如Android系统的所有页面,里面的所有app程序,还包含了sdk,各种镜像img等等。完整Android源码基本在200多G左右,而且这还是比较初始的设计板,里面几个基本功能的app程序。Android源码编译得到镜像文件img并不是很大,一般1-2G,把这几个镜像烧录到我们的Android设备上,Android设备就可以运行起来,就像我们正常使用的手机那样。
2024-06-25 14:26:38
970
原创 SVN常用命令
svn cp -m "描述内容" http://svnbucket.com/repos/trunk http://svnbucket.com/repos/branches/online1.0。# 显示文件的每一行最后是谁修改的(出了BUG,经常用来查这段代码是谁改的)# 若想创建一个文件夹,并且把它加入版本控制,但忽略文件夹中的所有文件的内容。# 查看文件列表,可以指定-r查看,查看指定版本号的文件列表。# 查看指定版本的文件内容,不加版本号就是查看最新版本的。# 查看指定文件的所有log。
2024-06-25 10:18:55
761
Tinker 打补丁命令行工具包
2024-07-24
universalJavaApplicationStub.sh
2024-06-25
android的几个小应用程序
2011-07-23
Android_API_中文_(15)_——_GridView.doc
2011-04-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人