自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AndroidStudio右下角显示内存使用情况

4.在“Appearance & Behavior" 下的“Appearance”中,找到“Show Memory Indicator” 选项。5.勾选“Show Memory Indicator”选项,以显示内存指示器,点击 Android Studio 左上角的“File”,然后选择“Settings”3.在设置界面中,选择“Appearance & Behavior”。6.点击ok即可,未生效,重启下studio。1.打开 Android Studio.

2024-04-17 11:02:00 269

原创 EditText不显示系统键盘,可用来显示自定义的键盘

/ isOpen若返回true,则表示输入法打开。4.2低版本中有一个setSoftInputShownOnFocus方法, 但是被声明成hide了, 所以通过反射调用.以上方法调用后, EditText获取到焦点时,就不会弹出系统的键盘了.再低一点的版本,直接通过setInputType的方式兼容.系统键盘 包含普通键盘和现在很多ROM定制的密码安全键盘。然后弹出自定义的键盘,就可以完美解决冲突了.

2024-03-13 14:40:01 942

原创 Android 中注解的使用

Android Support Library 从 19.1 版本开始引入了一个新的注解库,其中包含了很多的,使用它们修饰我们的代码, 可以让我们提高程序的开发效率,让我们更早的发现问题。以及对代码施以规范,让代码更加有可读性。这篇文章就来简单了解下这些注解,以及其使用。如有错误和遗漏,欢迎留言和补充~注:现在我们新建项目直接就依赖了 support.appcompat 包,其中已经依赖了 annotations 包。

2023-11-12 23:23:02 451

原创 反编译so文件(IDA_Pro)

安卓应用程序的开发语言是java,但是由于java层的代码很容易被反编译,而反编译c/c++程序的难度比较大,所以现在很多安卓应用程序的核心部分都使用NDK进行开发。使用NDK开发能够编译c/c++程序,最终生成so文件。而so文件是一个二进制文件,我们是无法直接分析so文件的,所以这里需要用到一个反编译工具IDA Pro。IDA Pro能够对so文件进行反汇编,从而将二进制代码转化为汇编语言,利用IDA Pro神奇的F5功能还能将汇编语言反编译成c/c++程序。

2023-09-18 16:13:06 1797

原创 Android 查看当前手机、APP的ABI架构信息

命令:adb shell getprop ro.product.cpu.abi。

2023-09-07 11:00:23 990

原创 Android 中SettingsActivity(PreferenceFragmentCompat)的简单使用

如果你需要一个简单的APP设置,可以使用sharedPreferences进行存储,我们可以借助AndroidStudio快速创建一个用于设置的Activity,其实它是继承PreferenceFragmentCompat,存储方式用的就是sharedPreferences,只是帮我们节省了很多操作。

2023-08-28 19:22:29 865

原创 位运算(包括OR,AND,XOR,NOR,NAND,XNOR,以及&0xFF等常见应用)

位运算(包括OR,AND,XOR,NOR,NAND,XNOR,以及&0xFF等常见应用)位运算是C语言的重要特点,是其他计算机高级语言所没有的,位运算是以二进制为对象的运算,二进制表示法与计算机内存完全对应,每个单元(位)都可以设置成开(1)或关(0)。而且位运算比正常的运算符速度要快很多,因为位运算是一种底层的运算,但是理解起来会偏难一些。其他补充:1、位运算符中除~外,均为耳目运算符2、运算只能是整型或者字符型的数据,不然会报错常见的位运算符。

2023-08-26 01:34:00 1051

原创 Kotlin 高阶函数详解

一个函数如果参数类型是函数或者返回值类型是函数,那么这就是一个高阶函数。如果一个函数的参数是函数类型或者返回值是函数类型,那么这个函数就是高阶函数。高阶函数可以简化我们的代码,并且利用 inline 关键字可以提高高阶函数的性能。在 kotlin 源码的 Standard.kt 文件中定义了几个我们平时会经常用到的高阶函数,可以去看一看。

2023-08-23 23:38:36 551

原创 Android NDK JNI与Java的相互调用

/获取一个自定义java对象//获取一个自定义长度的java对象数组extern "C"//其实这个内容前面基本已经说过,要想通过jni生成一个java类对象,其实最主要的一步就是获取那个java类的对象//1、获取到java类Student的class//2、第二部获取Student的构造方法,第二个参数固定传,第三个方法是签名,无参构造方法的签名就是 ()V//3、获取Student的对象,后面给对象赋值就完成了java类对象的创建。

2023-08-22 22:01:33 716

原创 c语言strtol函数、strtod函数、strtoul函数浅悉

可以被转换的合法字符依据base而定,举例来说,当base为2时,合法字符为‘0’,‘1’;base为8时,合法字符为‘0’,‘1’,……base为10时,合法字符为‘0’,‘1’,……base 为16时,合法字符为‘0’,‘1’,……‘n’,base为36时,合法字符为‘0’,……如果base为0或者16,并且字符串以0x(或者0X)开头,那么,x(或者X)被忽略,字符串按16进制转化。最后,需要说明的是,对于nptr指向的字符串,其开头和结尾处的空格被忽视,字符串中间的空格被视为非法字符。

2023-08-18 18:21:41 4013 1

原创 android Ndk Jni动态注册方式以及静态注册

1.项目名\app\src\main下新建一个jni目录2.在jni目录下,再新建一个Android.mk文件写入以下配置LOCAL_PATH := $(call my-dir)//获取当前Android.mk所在目录include $(CLEAR_VARS)//清空变量,确保不会有不必要的变量被继承下去LOCAL_MODULE := TestJni//定义了将要生成的库的名称,及xx.so。

2023-08-12 21:18:50 463

原创 android res中values-swxxdp计算

注意该配置文件得读取规格是最接近但不超过,如还有两个values-sw660dp和values-sw678dp,则会选取最接近得values-sw674dp读取。最小宽度计算方法:s w = 160 ∗ 手机宽度像素 / d p i sw=160*手机宽度像素/dpisw=160∗手机宽度像素/dpi。如面板分辨率为480x480,dpi为160,density为1,那么px : dp = 1 : 1。过公式计算得sw=674,即文件类型是values-sw674dp(二.px与dp之间转换。

2023-08-08 14:48:33 843

原创 Android中的ABI

ABI是Application Binary Interface的缩写。ABI常表示两个程序模块之间的接口,且其中一个模块常为机器码级别的library或操作系统。ABI定义了函数库的调用、应用的二进制文件(尤其是.so)如何运行在相应的系统平台上等细节。。

2023-08-07 22:45:26 883

原创 深入剖析java字节码

在Java语言中,要重载(Overload)一个方法,除了要与原方法具有相同的简单名称之外,还要求必须拥有一个与原方法不同的特征签名,特征签名就是一个方法中各个参数在常量池中的字段符号引用的集合,也就是因为返回值不会包含在特征签名之中,因此Java语言里无法仅仅依靠返回值的不同来对一个已有方法进行重载。如果C的常量池中包含某个CONSTANT_Class_info成员,且这个成员所表示的类或接口不属于任何一个包,那么C的ClassFile结构的属性表中就必须含有对应的InnerClasses属性。

2023-08-04 15:25:24 134

原创 Java对象创建回收全过程

在讲java创建之前,我们先来了解下组成,当Java虚拟机启动后,会将系统分配给JVM的空间逻辑上划分为五个部分,如下图所示::放置new出来的对象、数组:线程运行前,会给其分配一个线程栈空间,线程中每个方法执行都会生成一个栈帧放入线程栈中,栈帧里面包含局部变量表、操作数栈、动态连接和方法出口四部分。局部变量表:存储方法中的局部变量操作数栈:用于赋值或者计算的数据动态链接:方法执行的入口地址方法出口:返回调用方法的地址:与虚拟机栈类似,是调用非java方法的栈:存储类元信息、常量池。

2023-08-04 00:03:56 247

原创 JVM GC ROOT分析

这个对象又有可能在引用其他对象,然后被引用的其他对象又有可能在引用其他对象,只要由op2这个对象去触发,能够去找到最终的一个对象,假如你有一个对象preson.这个对象经过由op2触发的对象。注意:static 成员其实他是在我们的方法区中的,一般的他是不会随着对象的生命周期去创建。java是进程跑起来,这里面会有很多的线程,不管是垃圾回收线程,还是用户线程等等这样一个个线程,Thread 的这类也能称之为GCROOT,也就是说成为GCroot的会有很多。它对应的是一个方法的执行,那么然后呢?

2023-08-03 23:56:10 885

原创 Android P 之Zygote进程源码分析

c++世界(app_main.cpp入口):动态加载虚拟机动态库,启动java虚拟机注册JNI本地函数,减轻虚拟机负担装载ZygoteInit到java虚拟机,正式进入java世界java世界(ZygoteInit.java入口):绑定套接字,用来接收新Android应用程序运行请求预加载Android资源,提高应用进程启动速度启动并运行SystemServer(运行AMS、PMS等核心服务)处理新Android应用程序运行请求。

2023-07-17 23:22:49 238

原创 Android init 进程启动相关分析

init进程是linux系统中用户空间的第一个进程,进程号为1.当bootloader启动后,启动kernel,kernel启动完后,在用户空间启动init进程,再通过init进程,来读取init.rc中的相关配置,从而来启动其他相关进程以及其他操作。init进程被赋予了很多重要工作,init进程启动主要分为两个阶段:第一个阶段完成以下内容:ueventd/watchdogd跳转及环境变量设置挂载文件系统并创建目录初始化日志输出、挂载分区设备启用SELinux安全策略。

2023-07-13 22:37:06 618

原创 新版studio没法筛选Log

在Settings->Experimental->Logcat->Enable new Logcat tool window勾选去掉即可。1.在下图红框处,支持以下多种过滤,其中level就是以前的Error,infor等过滤。2.除了单独过滤之外,还支持逻辑运算符。

2023-07-12 18:49:41 714

原创 framework编译应用代码

lib代码编译和apk编译前面步骤是一样的,只是输出的产物不同。将路径下的APK push到车机对应的目录中,push成功后需要同步重启下。在源码项目中找到你想要编译的模块下的Android.mk文件找到LOCAL_PACKAGE_NAME或者。第一种和第二种的区别在于第一种make编译会把有关联的模块也都编译了,第二种只是编译当前模块。建议尽量用第一种,如果你的模块调用了其他模块在其他模块也有改动时编译出的文件会有问题。mmm /xxx/xx/x 是编译/xxx/xx/x指定目录下的mk文件。

2023-06-15 17:24:26 912

原创 Android修改aar并重新打包

注:(下面工具,点击名称可进入下载链接,如果链接失效,请百度搜索下载)

2023-06-09 16:19:15 1971

原创 Linux常用命令

使用查找时的其他变化 是:要查找当前目录中使用的文件,请使用 find . -name notes.txt 要查找目录,请使用 /-type d -name notes. txt13. grep 命令无疑对日常使用很有帮助的另一个基本 Linux 命令是 grep。如果要查看其他目录的内容,请键入 ls,然后键入目录的路径。您可以使用 ls 命令使用以下变体:ls -R 还将列出子目录中的所有文件 ls -a 将显示隐藏的文件 ls -al 将列出文件和目录以及详细信息,例如权限,大小,所有者等。

2023-06-07 11:27:27 448

原创 dex2jar 报错 com.googlecode.d2j.DexException: not support version

使用dex2jar工具反编的时候,一输入指令,结果报com.googlecode.d2j.DexException: not support version错误(如下图)正常获得jar包.png。,然后保存文件即可,再使用反编指令:d2j-dex2jar.bat classes.dex 反编即可成功。的构造方法中报出来的错误,打开dex2jar-2.0\lib目录,将dex-reader-2.0.jar。​ 使用notepad++文件浏览工具(任何能打开文件的工具都可以,例如记事本...)打开dex文件,

2023-05-29 17:09:34 2853

原创 Android生成二维码

链接: https://pan.baidu.com/s/1toPsCFS1yV6ZifXC1hwwkw?//该位置用于存放图片信息。//如果log为null,//记录图片每个像素信息。//将logo图片缩放成二维码的5分之一大小。* @param size 需要生成二维码的大小。* @param size 需要生成二维码的大小。* @param url 需要生成二维码的网址。* @param url 需要生成二维码的网址。* 生成带logo的二维码。--来自百度网盘超级会员v3的分享。

2023-05-24 16:47:14 1141 1

原创 ViewPager屏蔽左右滑动和切换时的滚动动画

需重写ViewPager,覆盖ViewPager的onInterceptTouchEvent(MotionEvent arg0)方法。* 这样ViewPager就不会消耗掉手指滑动的事件了,转而传递给上层View去处理或者该事件就直接终止了。这样ViewPager就不会消耗掉手指滑动的事件了,转而传递给上层View去处理或者该事件就直接终止了。* 这两个方法的返回值都是boolean类型的,只需要将返回值改为false。* 则需重写viewpager的setCurrentItem()方法就可以了。

2023-05-24 14:06:16 2248

原创 常用adb 命令

2、adb get-state: 获取设备的状态(设备的状态有三种:device,设备连接正常;# adb shell pm install –r /data/local/tmp/test.apk 重新安装。# adb shell screencap -p /sdcard/screen.png 截图并保存到指定位置。# adb shell pm install /data/local/tmp/test.apk 安装。

2023-04-28 18:16:59 1523

原创 Semaphore详解

判断是否满足获取锁条件, 关键方法若获取锁成功,则也会修改state若获取锁失败,关键方法阻塞的获取锁.添加到双向链表若是头节点后继, 则尝试获取锁, 否者则判断进入睡眠等待唤醒, 唤醒后继续执行3.2若不进入睡眠,则直接运行到3.2步释放N个许可, 因为存在并发释放, 需要CAS确保设置更新后的值.唤醒双向链表中有效的等待节点. (可能存在并发问题,引入PROPAGATE状态)被唤醒的节点调用获取锁的流程.

2023-04-26 15:57:25 1278

原创 androidStudio不显示Svn或git版本控制

在svn等版本控制工具配置正常的情况下,在Settings的Version Control点击红圈的加号添加对应版本控制即可.

2023-04-19 14:14:31 420

原创 开源协议 GPL、BSD、MIT、Mozilla、Apache和LGPL的区别

但是如果修改LGPL协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。就宽松许多了,一样是只需要附上许可证的原文,不过比较有趣的是,它还要求所有进一步开发者将自己的版权资料放上去,所以拿到以BSD许可证发行的软件可能会遇到一个小状况,就是这些版权资料许可证占的空间比程序还大。的主要内容是只要在一个软件中使用(”使用”指类库引用,修改后的代码或者衍生代码)GPL 协议的产品,则该软件产品必须也采用GPL协议,既必须也是开源和免费。类库而不需要开源商业软件的代码。

2023-04-17 11:49:54 667

原创 You must either set a text or a view

如下图,当response.getErrmsg()返回null时可能会报此错误。

2023-04-10 17:46:12 1092

原创 当使用retrofit+Rxjava时,如何得到非200响应的body

2023-03-29 14:58:53 110

原创 安卓递归获取文件夹以及子文件下所有文件

调用recursionAllFile方法获取(注意耗时操作放子线程)* @param folders 文件夹列表。* @param allFiles 文件列表。* 递归获取文件夹以及子文件夹下面所有文件。* @param path 路径。* @param path 路径。

2023-03-23 16:48:16 717

原创 registerForActivityResult使用

虽然包含一些预先构建的可用类,但您可以使用自己的协定,提供您所需要的精确类型安全 API。每个都需要定义输入和输出类,如果您不需要任何输入,可使用Void(在 Kotlin 中,使用Void?或Unit)作为输入类型。每个协定都必须实现方法,该方法接受Context和输入内容作为参数,并构造将与配合使用的Intent。每个协定还必须实现,这会根据指定的resultCode(如或)和Intent生成输出内容。如果无需调用、启动另一个 activity 并借助。

2023-02-22 13:54:58 3459

原创 Android WebView加载Html 解决图片自适应屏幕宽度问题

【代码】Android WebView加载Html 解决图片自适应屏幕宽度问题。

2023-01-05 14:22:54 799

原创 AndroidStudio启动报错:If you already have a 64-bit JDK installed, define a JAVA_HOME variable in Compute

C:\Users\DELL\AppData\Roaming\Google\AndroidStudio2021.1(可能会看不到AppData, 查看显示隐藏项目即可),你编辑的文件就在这个目录下面,打开studio64.exe.vmoptions文件,把你编辑的内容删除即可解决问题。

2022-11-10 09:52:37 1659

原创 ANR分析

log格式: 20003 dvm_lock_sample (process|3),(main|1|5),(thread|3),(time|1|3),(file|3),(line|1|5),(ownerfile|3),(ownerline|1|5),(sample_percent|1|6)线程名称是启动线程的时候手动指明的,这里的main标识是主线程,是Android自动设定的一个线程名称,如果是自己手动创建的线程,一般会被命名成“Thread-xx”的格式,其中xx是线程id,它只增不减不会被复用;

2022-10-25 10:50:50 2093

原创 adb 抓取ANR日志

android anr文件抓取。。。

2022-10-25 10:43:09 2438

原创 adb命令logcat抓取日志

3、开始抓取日志,输入如下命令把日志写入到文件中:adb logcat -v time > D:\Logcat\logcat.log。1、将手机和电脑连接,连接后可在终端(或者studio的terminal)输入adb devices查看连接状态。打开手机重现操作步骤,然后按下Ctrl+C结束日志的抓取。(-v time的意思是按照时间记录日志)2、抓取日志前,清除旧的日志信息输入下面的命令并执行。4、最后只要在设置存放日志的目录中查看日志即可。查看10条级别为错误(Error)的日志。

2022-10-24 20:15:55 9150

原创 studio点击打开转圈后无任何响应

今天电脑有点卡,卸载一大堆东西,然后然后studio就出现打开转圈后无任何响应和提示问题..........

2022-09-28 14:18:19 1048

原创 Android事件分发机制--浅显易懂解析

第四个条件:li.mOnTouchListener.onTouch(this, event),其实这个方法就是回调控件注册的touch事件的onTouch()方法,也就是如果我们在onTouch()里返回true,这四个条件也就满足了,从而让整个方法直接返回了true,如果我们在onTouch()方法返回false,就会执行onTouchEvent()方法。但onTouch优先于onTouchEvent()执行,如果在onTouch()中返回true,onTouchEvent() 将不再执行。

2022-09-09 07:18:25 386

alipay_demo.zip

支付宝Demo,下载即可用,请注意手机上安装支付宝

2019-07-26

空空如也

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

TA关注的人

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