自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(86)
  • 资源 (3)
  • 收藏
  • 关注

原创 常用adb命令总结

2.查看当前屏幕显示的Activity。3.查看apk包详细信息。1.查看设备cpu架构。

2023-12-22 13:06:14 99

原创 使用系统ProgressBar实现三色进度条

【代码】使用系统ProgressBar实现三色进度条。

2023-12-01 18:00:34 637

原创 windows与wsl互传文件

1.把windows上的文件传到wsl中,\\wsl.localhost\Ubuntu-22.04\mnt\wsl。将wsl中的文件放到 /mnt/c 或 /mnt/d 中,这两个路径代表着windows系统的c盘和d盘。将你要传的文件放到wsl这个路径下,Ubuntu-22.04是我的子系统,换成自己对应的。2.把wsl中的文件传到windows中。

2023-11-16 16:19:02 1424

原创 Android NDK 开发学习笔记(一) --jni

创建好工程后,会默认生成一个jni接口文件,一般命名为:main/cpp/native-lib.cpp。jfieldID fielD:通过GetStaticFieldID()获取到的。jfieldID fielD:通过GetStaticFieldID()获取到的。但如果我记不住或不确定该怎么办呢?const char* sig) //属性的签名。const char* sig) //属性的签名。const char* sig) //方法签名。const char* sig) //方法签名。

2023-08-09 10:21:53 533

原创 docker实践

2.Docker 容器与宿主服务器文件复制。3.docker run 选项设置。4.docker 内存占用情况查看。5.docker 清理cache。

2023-05-22 16:14:11 80

原创 Activity四种启动模式分析

而提到这四种启动方式的差异,必然要提到一个重要的概念Activity的Task任务栈,我们需要明确的一点是Activity从静态上来看它属于某一个Application,但Task并不对应某一个Application,Task是系统层级的调度结构,即一个Task中可以有多个Application的Activity,或一个Application中的不同Activity会存在于多个Task中。四种启动模式的差异主要在于创建新的Activity实例时不同的复用逻辑。二、四种启动模式差异。

2023-05-06 16:28:06 822 1

原创 The minCompileSdk (32) specified in adependency‘s AAR metadata (META-INF/com/android/build/gradle...

导致的问题,所以降低material的版本直到符合编译检查。报错背景:升级了androidstudio跑老项目...同理,可以按照此方法逐个排查此类问题。

2023-04-26 19:55:52 1760

原创 Android性能优化--ANR问题

注:input的超时机制与其他的不同,对于input来说即便某次事件超过限时,只要用户后续没有后续输入,则不会产生ANR问题。后台service:onCreate(),onStart(),onBind()等生命周期方法在200s内没处理完导致ANR。前台service:onCreate(),onStart(),onBind()等生命周期方法在20s内没处理完导致ANR。1.集成bugly,可以拿到手机品牌,型号,配置,以及anr的大概位置。前台广播:onReceiver在10s内没处理完导致ANR。

2023-04-21 16:05:06 548

原创 Android系统启动流程--system_server进程的启动流程

上一篇的结尾提到zygote进程中会fock出一个system_server进程,用于启动和管理Android系统中大部分的系统服务,本篇就来分析system_server进程是如何创建并运行的以及它都做了哪些重要的工作。到此,zygote进程fork出了systemserver进程,android系统启动流程也从zygote阶段过渡到了systemserver阶段,下面我们就可以看看在systemserver进程中主要都做了哪些事儿。到这里对SystemServer进程的分析就结束了。

2023-04-17 16:08:51 521

原创 Android系统启动流程--zygote进程的启动流程

这里放一张图用于表示进程与虚拟机的关系,即每个进程都有独立的虚拟机,而虚拟机就是一块大的内存区域,这块大内存又划分为堆、线程栈、方法区、程序计数器、本地方法栈等等更小的内存块。和上一篇中的init一样,zygote进程也具化到了设备中的执行程序,即app_process,我们来看下他是由那个文件编译出来的。至于怎么去找这么文件的路径目前没有发现太好的办法,只能是多熟悉每一层的bp编译脚本+关键字搜索。

2023-04-13 17:27:11 708

原创 Android系统启动流程--init进程的启动流程

"/bin/init"是在Android系统源码编译时编译出的一个可执行程序,路径为Android设备上的"system/bin/init",而这个init程序则是由system/core/init/main.cpp文件编译生成的(可查看同目录下的Android.bp,其中描述了编译规则),所以执行这个init程序其实就是运行到了main.cpp的main()方法。②init(pid=1)进程,它是用户空间的第一个进程,由此开始后面创建的进程都是由init或其子进程fork而来。基于Android11。

2023-04-13 10:15:17 1652

原创 Android IPC Binder机制学习(一)

在使用demo中也能看到AIDL文件在客户端和服务端中都要用到(且内容相同),但在客户端与服务端中使用的部分是不一样的,Proxy是给客户端使用的,Stub是服务端使用的,或者说Stub是服务端所持有的。答:有两点1是拷贝到内核会对uid和pid等进行身份检测,权限安全,2是有一次拷贝,这就是个单向操作,server端哪怕修改了内存映射中的数据,也不会影响到client端中的数据,保证数据安全。客户度想要请求系统服务时,要向serviceManager中传对应的系统服务名来获取对应的系统服务Binder。

2023-04-04 16:59:00 536

原创 Android系统启动流程 -- ServiceManager进程的启动流程

当执行到 start servicemanager 这条命令,就会运行android设备(比如手机)中 /system/bin/servicemanager这个可执行文件,而这个可执行程序就是servicemanager进程,他由 frameworks\native\cmds\servicemanager\main.cpp 文件编译生成的。1.ServiceManager是一个独立的进程,由init进程创建,且在创建zygote进程之前被创建。*注:基于Android11源码。

2023-03-30 20:08:48 928

原创 Handler源码分析之Message类型

队头是同步消息时,就是正常取出,比如将m1取出了,m2就成了队头,就这样取当取到m3时发现这个msg.target=null,就知道m3是一个屏障消息,取到它代表后面跟着一个急需处理的异步消息(UI刷新消息),那么就会一直往后找直到遍历到m5时发现它是异步消息,那就赶紧把m5先取出并分发它去执行UI刷新的逻辑(这里对应MessageQueue的next()方法中的逻辑),还记得上面mTraversalRunnable吗?所以,当分发了异步消息后,在取下一个消息前,这个屏障消息就被移除了。

2023-03-22 17:42:19 463

原创 Handler源码分析之epoll机制

而阻塞是一个和 I/O 相关的概念,这涉及一个操作系统级的操作epoll_wait,当读取磁盘文件时会有内存速度不匹配的问题,中间需要有个缓存过程,是从磁盘读到缓存,缓存满了,再从缓存中读数据,等待缓存满的时候就需要阻塞住先不读取。举个例子,假设你要收个快递,但你不知道快递小哥什么时候送,你又没有其他事可做,那么你可以去睡觉了(释放cpu资源),因为你知道快递小哥到了会打电话通知你,这个睡觉的状态就是。epoll可以过滤出可以进行读写的流,而不用我们再去轮询了,此时我们对所有流的处理都是有意义的。

2023-03-22 11:05:17 423

原创 HandlerThread源码分析

它是一个封装了Looper(Handler)机制的Thread。你可以将一些需要串行执行的子任务(耗时任务)交给它去做。*注:阅读本文需要具备基本的Handler基础。HandlerThread是什么?它的应用场景是什么?

2023-03-20 16:19:24 69

原创 Android Studio Electric Eel:Could not resolve com.android.tools.build:gradle:7.4.1

Could not resolve com.android.tools.build:gradle:7.4.1

2023-02-21 17:12:56 273

原创 Camera2:获取Depth16深度图并进行可视化转换

到此,我们根据官方文档提供的方法可以得到每个像素点的深度值和置信度值,但遗憾的是这种格式的Image对象并不能像ImageFormat.JPEG格式的Image对象能直接生成Bitmap位图,而对于此种格式如何进行可视化操作,官方文档中也没有提及,可能官方也没想到会有这种需求吧。的api获取,在查看文档时捕捉到一个关键信息:即ImageFormat.DEPTH16的深度信息值为0~8191mm。,后来发现8191是2进制13位的值,也就是文档中提到的16位数据中,高3位是置信度值,低13位是深度值。

2022-12-30 16:45:22 1383 2

原创 android中MVC MVP MVVM三种架构对比

mvp架构由mvc架构发展而来,p层将业务逻辑处理从activity中抽离出来,实现了view层与model层的完全解耦,但view层和presenter层还是有耦合(p层需要持有v层的引用,来更新view)。缺点:随着业务的增加Activity会变的臃肿,因为activity中既要处理业务逻辑又要更新view,不符合单一职责设计思想,耦合度高,扩展性、可重用性差。presenter层:presenter接口,及实现类,View层与Model层的桥梁并对业务逻辑进行处理。优点:分层清晰,耦合降低。

2022-11-13 13:35:12 987

原创 android:线程工具类

【代码】android:线程工具类。

2022-10-24 11:29:16 1064

原创 Rxjava学习(一)简单分析Rxjava调用流程

无论是看官方文档还是自己打log验证,都会得出以上一二三四五的执行步骤(步骤四会在onError()和onComplete()选其一执行)。当时我的第一感觉先不管设计合不合理,我就想知道它是怎么执行下来的?到此被观察者中发射的onNext()事件流程执行完毕,然后继续看执行四处发射了onComplete()或onError()事件。很明显能发现这是链式调用,链式调用的核心就在于每个方法都返回相同的对象,当先省略掉其中的回调细节,我们可能会看的更清晰...到此,调用到执行五,整个调用流程执行完毕。

2022-10-22 21:02:32 1175

原创 shell脚本批量重命名文件名

可参考此方式修改自己所需的命名规则,此例以序号排列。

2022-10-19 12:42:30 922

原创 java基础-静态代理与动态代理

再说一个真实场景帮助大家理解,当我们进行Android开发时会用到网络请求框架,比如最早使用的是Volley框架,之后我想换成okhttp框架,如果之前是强关联(即在业务代码中直接引用Volley),想要做框架替换无疑是痛苦的,如果在设计之初,我们写了一个代理层则可以快速进行框架转换,哪怕将来要求替换为Retrofit也会毫不费力,代理模式可以增强我们代码的扩展性。首先需要说明的是静态代理和动态代理的思想和原理是一模一样的,只是实现代理类的方式不同。正因静态代理的缺点,由此引出动态代理。...

2022-08-16 11:25:49 2555 2

原创 java基础-注解

source使用场景:ide 语法检查,如:@IntDef。1.3、注解的保留级设置(@Retention)1.2、注解作用位置设置(@Target)1.4、保留级对应的使用场景。1.6、使用注解限定传参范围。

2022-08-10 18:08:13 164

原创 EventBus3.0源码分析(四)

这一篇我们来分析一下post()及postSticky()相关的源码,在进入post()方法之前,我们先来了解一个数据结构PostingThreadState,它也是EventBus的一个静态内部类:并且在EventBus中这个类是和ThreadLocal一起使用的,也就是说在使用中它是线程私有的。接下来打开post()方法:继续跟入方法postSingleEvent():继续跟入postSingleEventForEventType()方法:继续跟入postToSub

2022-07-06 12:02:08 149

原创 EventBus3.0源码分析(三)

这一篇我们来分析EventBus的register()方法。紧跟注释2,看他是怎么寻找Subscribe方法的:接下来进入注释1@findSubscriberMethods处的方法:这里先留个印象暂不往下分析,在上面findSubscriberMethods方法中的else分支中有一种情况也会调用到findUsingReflectionInSingleClass()方法后面一起看。ok,我们来到注释2@findSubscriberMethods处的方法:这个方法中反复提到了一个数据结

2022-07-05 12:29:39 289

原创 EventBus3.0源码分析(二)

根据上一篇的规划,本篇先分析EventBus使用过程中调用的第一个方法,即:首先看下ADT生成的类MyEventBusIndex的内容需要简单提一下的是,ADT在编译期会去解析和处理特定的注解(EventBus中就是@Subscriber),它会扫描出有关这个注解的方法信息,类信息等,拿到所需的信息后生成一些类。ADT的使用这里就不展开了,有兴趣的同学可以看下EventBus中的相关实现,EventBusAnnotationProcessor。......

2022-07-04 12:32:56 153

原创 EventBus3.0源码分析(一)两种使用方式

EventBus在3.0及以上版本中加入了以APT(Annotation Processing Tool)实现的方式,但他还是保留了之前反射的实现方式。下面将展示两种实现方式使用上的区别。

2022-07-01 17:45:48 632

原创 jenkins:Caused: java.io.IOException: Failed to create a temp file on /root/.jenkins/workspace/...

jenkins:Caused: java.io.IOException: Failed to create a temp file on /root/.jenkins/workspace/

2022-06-25 17:50:11 3019

原创 Android设备上直接运行C/C++程序,无需ROOT!!!

在Android开发过程中难免和JNI NDK打交道做混合开发,按一般方式当交叉编译完成得到so库后,我们将so库集成到Android项目里,打包成apk安装到手机上验证运行效果。但当我们想快速在手机上验证so的功能与性能时,上面提到的传统方式就过于繁琐了。那我们能不能在Android设备上直接运行C/C++程序来直接调用so库呢?答案是肯定的,因为我们在linux系统就可以直接运行C/C++程序,而Android系统与Linux系统的关系大家也都了解。下面来看一下具体的实现流程:首先先展示一下我需要用到的

2022-06-07 15:54:11 7795 3

原创 Android:启动优化

一、前言首先,我们先提出一个问题,为什么要做启动优化?随着项目的迭代,App的功能越来越丰富,无可避免的是我们将会引入更多的第三方库及各种SDK,因此App在启动时要做的初始化工作也会更繁重,不当的初始化行为就会拖慢App的启动响应速度,给用户带来糟糕的使用体验。既然是启动优化,我们就需要先了解应用的启动类型:冷启动 :应用从头开始启动,系统进程在冷启动后才创建应用进程,发生冷启动的情况包括应用自设备启动后或系统终止应用后首次启动。 热启动 :将处于后台中的应用进程恢复显示到前台,如果应用

2022-05-23 16:18:59 1865

原创 djinni使用实践(三)--Android项目中的使用

djinni使用实践(一) -- 官方文档djinni使用实践(二) -- djinni究竟都有哪些配置选项 本篇是介绍djinni在Android项目中JNI开发的使用场景,所以默认大家有一定的Android JNI开发经验,此篇中涉及到的JNI相关的知识点不做介绍,大家可自行学习。 djinni工具集成过程中需要用到该项目中的一些文件,我们先下载到本地以备使用djinni项目地址接下来先看下工程结构:着重看下djinni相关的文件夹: api_ge...

2022-05-08 19:07:37 1400

原创 Android报错:java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader

开发过程中crash了,报错如下提示说一个so库找不到了,看了打包的apk文件发现armeabi-v7a和arm64-v8a中这个so,都存在所以确定不是缺so文件导致的,在排查过程中发现主module和lib module中的abiFilters配置不一致:主module:ndk { abiFilters 'armeabi-v7a' }lib module:ndk { abiFilters 'armeabi-v7a','a

2022-04-26 17:05:21 2063

原创 Android:NV21格式图片裁剪抠图(规则矩形)

首先需要大家对yuv数据格式有一定的了解,不了解的可以先看下YUV格式说明这篇文章,主要是看懂这两张图:上面的链接文章已经介绍的很清楚了,这里就不在赘述。代码如下: /** * @param src 原图 * @param w 原图宽 * @param h 原图高 * @param dstRect 要截取的块 * @return 截取后的图 */ public static...

2022-01-25 17:08:16 4337

原创 c++:报错Undefined symbols for architecture x86_64:

在学习c++是报了这个错:Undefined symbols for architecture x86_64: "StackMy<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::~StackMy()", referenced from: _main in main.cpp.old: symbol(s) not...

2021-11-29 19:15:37 2262

原创 Android Studio:This file is not part of the project. Please include it in the appropriate build file

在java-c++混编的时候出现了这个问题查询了一波,大多数文章提到的是gradle、tools、cmake的版本问题,不过我的情况是新从git拉下的代码出现这个问题,之前的工程是正常的且代码是完全一致的,因此可排除是版本的问题。这个提示的意思其实工程构建时这个c++文件没有被包含进去,随后检查CMakeLists文件已经正确引入了C++文件,之后发现是ide构建的问题,可把CMakeLists中的内容注掉两行,再打开注释,触发cmake重新编译CMakeLists文件即可。...

2021-11-05 17:48:51 1775 4

原创 djinni使用实践(二) -- djinni究竟都有哪些配置选项

djinni使用实践(一) -- 官方文档上一篇是官方文档的中文译文方便大家查阅,这一篇整理下djinni究竟都有哪些配置选项,大家也可以在djinni项目根目录下运行命令查看。src/run --helpAlready up to date: DjinniUsage: djinni [options] --help --idl test.djinni 此命令后接我们自己写的idl文件,后缀名为“.djinni”,如:test.djinni,需要

2021-08-18 11:48:03 372

原创 djinni使用实践(一) -- 官方文档

djinni项目地址DjinniDjinni 是一个生成跨语言类型声明和接口绑定的工具。 它旨在将 C++ 与 Java 或 Objective-C 连接起来。 Python 支持在 python 分支上的实验版本中可用。Djinni 可用于在 Android 和 iOS 上将跨平台 C++ 库代码与特定于平台的 Java 和 Objective-C 接口。 我们在 CppCon 2014 上发布了 Djinni。你可以看到幻灯片和视频。 有关 Djinni 以及其他人如何使用它的更多信息,请查

2021-08-17 17:23:30 1830 1

原创 android gradle的常见配置

1.build.gradle 常见设置//依赖其他gradle文件apply from: "config.gradle"plugins { //添加使用插件 id 'com.android.application' id 'kotlin-android' id 'kotlin-kapt'}example = “this is a test message”android { compileSdkVersion 30 //冲突文件处理

2021-08-02 16:24:39 2139

原创 git使用采坑记录

1.git不关心文件夹(路径),只关心文件,即不能向git传空文件夹,当删除一个文件夹下的所有文件时此文件夹自动删除采坑:mac系统会在文件夹生成隐藏文件(.DS_Store),因存在隐藏文件导致git远程仓库中的文件夹不能消失方法:git rm -f .DS_Store 删除此文件包裹他的文件夹自动删除...

2021-06-17 10:35:58 106

armeabi-v7a.rar

ffmpeg-4.0.4编译的用于android平台的静态库,编译方法可见:https://blog.csdn.net/qq_27246079/article/details/90402385

2019-05-24

ffmpeg-4.0.4编译的用于android平台的静态库

ffmpeg-4.0.4编译的用于android平台的静态库,编译方法可见:https://blog.csdn.net/qq_27246079/article/details/90402385

2019-05-22

简单实现基于Qt5的音乐播放器

Qt5初级学习音乐播放器实例

2016-04-07

空空如也

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

TA关注的人

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