android
文章平均质量分 83
峥嵘life
目前职业:android开发工程师
2016年江西农业大学计算机信息工程学院毕业
展开
-
Android14 手机蓝牙配对后阻塞问题解决
Android13、14 手机配对蓝牙后会造成阻塞问题。Google 问题。测试了Android13 Google 手机也是有这个问题。具体复现步骤和现象就是:一台Google手机蓝牙配对另外一台手机的蓝牙后,Google 手机重新扫描蓝牙设备就会无法扫描到其他设备,需要等待20多秒超时处理后才能重新看到扫描的蓝牙设备。原创 2024-09-21 19:27:45 · 831 阅读 · 0 评论 -
Android14 蓝牙启动流程
基于Android14 分析了一下蓝牙的开启流程,本来以为比较简单的,但是发现具体处理会有点绕。主要是从应用上层到cpp层蓝牙的开启过程代码进行的一定的分析。BluetoothAdapter、BluetoothManagerService、AdapterService 是蓝牙开启最相关的上层代码。这个对蓝牙开启失败、或者蓝牙其他流程有问题有一定的分析研究价值,有助于确定是哪个流程出现了问题。这个介绍比较简单一点,没有到后面 AdapterService 的代码。原创 2024-09-21 19:26:04 · 1705 阅读 · 0 评论 -
Android14 待机关机蓝牙自动关闭分析解决
Android14 设备蓝牙开启的情况,待机关机后再开机出现有概率蓝牙关闭的问题。设备开机后手动打开蓝牙是可以正常打开的。通过分析发现是上层的蓝牙服务中有监听关机广播,有关闭蓝牙动作。但是为啥会出现有概率关闭呢,具体原因是因为有时候蓝牙关闭流程没走完或者有些蓝牙关闭流程未走到设置蓝牙关闭属性的情况。原创 2024-09-14 19:14:12 · 1340 阅读 · 0 评论 -
Android14 蓝牙 BluetoothService 启动和相关代码介绍
蓝牙开关和使能开发主要用到:BluetoothService、BluetoothManagerService、BluetoothManager、BluetoothAdapter 这几个系统相关类。某个蓝牙的配对、连接、断开 使用的是 BluetoothDevice 对象。蓝牙开关状态不记忆或者打开异常就可以看看BluetoothManagerService的日志,里面有打开关闭相关过程日志和时间点,这个对问题分析有一定的帮助。本文主要介绍一下 framework 相关的几个类,原创 2024-09-14 19:06:02 · 2112 阅读 · 0 评论 -
Android 源码中jni项目 加载so目录小结
如何实现把so放到Android设备目录system/lib64下面,系统应用apk就能自动获取里面的so?如果实现了这个功能,后续修改了jni具体功能实现,就不用修改这个apk的代码,只要替换这个so就可以完成不同的实现了。其实这个功能不难,只要是系统源码编译的应用就可以;具体如何编译可以看本文最后的介绍。本文主要介绍一下,系统源码应用编译后,load so的顺序:顺序就是优先apk目录下的 lib/arm64/,然后 system/lib64/,有的还会加载 vendor/lib64/原创 2024-09-06 20:19:29 · 1065 阅读 · 0 评论 -
Android 系统源码项目加载预编好的so库
Android 系统开发中会源代码有加载so库的情况,本文进行简单介绍。Android Studio 项目加载so库,已经有介绍过:Android Studio加载so和使用so还是比较方便的,环境OK的情况,几分钟就可以完成验证测试了。但是如果要在系统源代码Java里面加载和使用so就比较麻烦了,主要通过Android.mk或者Android.bp编译加载so,反正网上的代码写的mk/bp基本都是不行的。本来以为只是介绍一下编译使用的Android.mk或者Android.bp就可以了,原创 2024-09-06 20:14:18 · 1676 阅读 · 1 评论 -
Android wifi主要广播详解
wifi应用开发肯定会用到wifi开关和wifi连接状态监听的广播,有些广播比较容易混淆,本文进行详细总结。比如wifi网络变化广播:CONNECTIVITY_ACTION、WIFI_STATE_CHANGED_ACTION、NETWORK_STATE_CHANGED_ACTION 这三个比较容易搞混。SUPPLICANT_STATE_CHANGED_ACTION 和 SUPPLICANT_CONNECTION_CHANGE_ACTION 比较容易搞混。原创 2024-08-29 14:41:07 · 1505 阅读 · 0 评论 -
Android 获取ip地址多种方式介绍
adb shell 的 ifconfig可以获取当前设备网络节点信息;这些信息使用Android代码也是可以获取的;Android 获取网络ip有多种方式,有时候某种方式获取失败的情况下;那么就可以换一种获取方式,所有多学习一下获取网络ip相关信息是有用的。本文介绍三种获取网络ip信息的方式,并且最后一种的代码不用任何权限就能获取到相关节点的ip和MAC地址,有兴趣的可以看看。原创 2024-08-29 10:55:12 · 2295 阅读 · 0 评论 -
Android14 WPA2和WPA3 类型的WiFi网络连接
Android WiFi网络类型常用就是WPA/PA2,Android10之后很多手机支持了WPA3 网络的连接和热点WPA3类型设置。开发过程中是有遇到WPA3网络无法连接的问题,之前方案WPA3网络是可以用WPA2的配置连接成功的,但是Android14的MTK方案上不行了。本文的分析处理事对自己设置应用上的优化,原生设置应用是可以正常连接WPA3 网络。原创 2024-08-09 19:02:35 · 656 阅读 · 0 评论 -
Android设备发送蓝牙文件到电脑笔记本失败解决
普通手机之间蓝牙配对后,是可以相互传输一下音视频和图片文件的。但是,Android 手机和window电脑配对后,手机端发送会提示失败。Android 无法进行蓝牙传输文件到Window 电脑?通过测试发现确实是这样,普通手机、谷歌手机都试过发送蓝牙文件到笔记本都会失败。刚开始以为是手机兼容问题,后面通过网页搜索发现,是笔记本设置的问题。本文只是一个说明类的文章,并不是代码技术讲解,原创 2024-08-03 19:18:55 · 1524 阅读 · 0 评论 -
Android原生设置Settings 具体Fragment和Activity界面跳转实现
Android 原生设置Settings中如果要跳转到某个界面,如何实现?从代码上看,只能看到某些Activity的跳转,或者一些主要的Fragment是有暴露的,而对于多层级的Fragment 没看到有代码有直接暴露的代码。这种情况,如果要跳转到某个Fragment,要如何实现呢?其实原生Settings 对这块需求是有设计实现功能的,可以实现跳转到某个未暴露的Fragment 界面,但是有个限制:跳转未暴露的Fragment 应用需要是系统签名uid=1000d的应用,不然会报错。原创 2024-08-03 19:06:40 · 1183 阅读 · 0 评论 -
Android13 应用代码中修改热点默认密码
Android 有些情况会有修改热点信息的需求,比如修改热点默认名称、默认密码登信息。但是Android13 或者更新的代码,外销国外的设备都要通过EDLA验证了,集成谷歌那套代码,无法修改 packages\modules\Wifi 的代码,所以无法修改热点的默认信息?其实办法肯定还是有的,只要在系统第一次启动时通过WifiMannager接口获取wifi信息,再修改一次热点的信息即可。如果有需求都可以看看下面的实现代码。修改热点其他默认信息也可以同样参考。原创 2024-07-18 19:41:48 · 1319 阅读 · 1 评论 -
Android Settings应用 PreferenceScreen 条目隐藏实现和简单分析
Android 原生设置Settings应用很多界面都是使用xml的 PreferenceScreen 形式进行显示,PreferenceScreen 里面包含很多条目,如果要隐藏某个条目就要修改xml或者Java代码,有些情况修改xml是无效的,修改Java代码才有作用。本文简单记录一下Settings PreferenceScreen 某个条目隐藏实现。网上百度到的像View那样隐藏item的代码肯定是不对的。上面 Preference 代码的显示和隐藏使用的是View的那套。原创 2024-07-11 19:39:06 · 989 阅读 · 0 评论 -
wifi代理、静态ip设置无效解决
Android 系统中如果是自己开发的应用,需要连接网络设置静态ip或者代理信息,可能会出现设置的代理信息后无效的情况,自己应用配置的代理信息,在原生Settings也能同步显示,但是浏览器并没有更新代理设置的信息,比如设置代理后不弹框提示代理登录,需要关开一次wifi才生效,或者关闭代理后依然弹框提示代理登录,需要关开一次wifi才生效,具体原因是网络信息没有被重新加载。这里简单记录一下。原创 2024-07-11 19:28:44 · 595 阅读 · 0 评论 -
Android13 串口控制是能wifi adb实现
Android 系统开发初期调试,一般有串口功能调试,但是可能没有adb功能。adb功能比串口调试方便一些,比如可以直接传输文件,定向打印日志到电脑,投屏,安装电脑中的apk等功能。目前网上是没有详细分析的文章的。原创 2024-06-28 16:41:03 · 1236 阅读 · 0 评论 -
Android 使用adb操作WiFi连接扫描等相关指令
Android系统调试是,如果没有系统原生设置应用又需要调试验证WiFi功能时,可以使用一些指令来验证调试WiFi相关功能,最常用的就是 svc wifi enable/disable,或者使用iv dev来验证,但对于AP功能就没办法验证了,并且可调试功能比较少,其实Android系统自带有组很强大的shell指令集,这里记录下平时使用的cmd wifi 相关指令。系统初期开发或者定位一下wifi、热点问题会比较有用。原创 2024-06-28 15:11:56 · 4979 阅读 · 1 评论 -
Android 蓝牙配对Settings应用里面的简要流程记录
本文只是简单分析一下原生设置Settings中蓝牙配对的大致流程,具体细节有需要的自行研究。另外我这里的开发平台是AML平台的,所以会有Settings和TvSettings,其实这两个应用都会监听到蓝牙配请求,都会进行处理,这也是为啥会出现两次蓝牙配对弹框确认的情况。//监听蓝牙配对广播//;蓝牙配对广播@Override//设置蓝牙配对//关闭广播传递,防止原生设置监听到配对这里是监听到蓝牙配对后,后台直接确认配对,不用点击系统Settings的配对对话框就会确认配对。原创 2024-06-15 17:46:00 · 1111 阅读 · 0 评论 -
Android13 蓝牙协议属性配置详解
Android系统中蓝牙协议是否使能一般是通过一个属性值,如果这个属性值设置为false,会导致这个协议的服务未启动,也就是说这个蓝牙功能会没有作用。比如 Android 蓝牙传输文件协议是opp,如果opp未使能,那么整个系统是不支持蓝牙文件传输的。在Android13之前的版本,我们可以通过 config.xml 中的 profile_supported_a2dp 属性控制蓝牙的某个协议是否使能。这些属性是res属性,只能在资源文件中修改,还不方便查询。原创 2024-06-15 15:22:36 · 2255 阅读 · 0 评论 -
Android 几个简单的自定义对话框介绍
Android 对话框直接使用肯定是不好看的,如果需要添加取消和确定按钮,肯定是需要进行自定义修改的。本文简单介绍一个简单的可扩展的对话框,并且支持不同类型样式,加了点小动画。有需要的可以看看。//(1)默认字符串显示,显示一个确认按钮,只是用来测试//(2)修改标题和文本内容,显示一个确认按钮")").show();//(3)修改标题和文本内容和类型图标,显示一个确认按钮").show();大部分场景上面三个代码比较常用。原创 2024-05-19 12:29:06 · 1827 阅读 · 0 评论 -
Android 系统设置拉起后台非全屏应用不隐藏前台应用
Android 原生流程中,如果切换后台应用界面,会先执行返回Home界面,再切换到新的应用界面;验证方法:手机打开一个应用1界面,底部往上滑,切换一个之前的后台应用2到前台,左右滑动退出应用2,发现回到的是Home界面而不是应用1界面。原生在startActivityFromRecent时,先回到Home了。但是Android 大屏设备,一般是需要显示多个应用,界面部分应用都是悬浮Activity,理想效果是:不返回Home界面,直接拉起后台应用。下面是实现的代码,其实就是在关键方法返回就行。原创 2024-05-19 12:25:30 · 437 阅读 · 0 评论 -
Android14 普通应用registerReceiver注册广播报错One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be
Android14 普通应用注册广播registerReceiver会报错,提示需要添加一个参数RECEIVER_EXPORTED 或者 RECEIVER_NOT_EXPORTED;系统framework或者系统应用是不会报这个错误的!这个问题比较好解决,加一个参数就行,但是网上目前没有人对这个问题今天深入分析。本文对registerReceiver报错进行分析,具体到哪个类哪行代码报错,分析了解后对于系统其他相关报错能有个认识,或者有分析思路。原创 2024-04-30 14:54:19 · 7355 阅读 · 9 评论 -
Android13 源码环境编译app源码报错AndroidManifest.xml.fixed分析解决总结
Android13 从Studio正常编译运行的app代码在源码中编译 有可能报错:AndroidManifest.xml.fixed …网上说法很多,有的说是添加android:appComponentFactory=“XXX” 和 tools:replace="XXX"就可以。Android·13 之前的方案使用上面的属性添加可能有效,这个修改主要针对包冲突问题(support和androidx ),原创 2024-04-30 09:21:33 · 1864 阅读 · 2 评论 -
Android13 Studio新建的代码编译报错INSTALL_PARSE_FAILED_MANIFEST_MALFORMED解决
这个错误信息表明安装失败,原因是Android应用的Manifest文件存在格式错误。Manifest文件是每个Android应用必不可少的一部分,它包含了应用的名称、版本、权限等重要信息。如果Manifest文件中的某些信息不符合规定或者有语法错误,系统将无法解析这个文件,导致应用无法安装。新建的项目为啥会报错呢?其实是Android13开始,四大组件都是要设置 exported 属性,否则会报错。其实就是缺少了必要的信息。给组件添加 android:exported 属性即可。原创 2024-04-20 20:26:36 · 1241 阅读 · 0 评论 -
Android Studio 新建Android13 代码提示Build Tools revision XX is corrupted无法编译解决
Android Studio 新建Android13或者app下的build.gradle文件配置 compileSdkVersion 33上面提示看似简单,提示重新卸载 再下载Build Tools33.0.0就行了,但实际上重新下载也不行!其实就是SDK新版本编译环境问题,不用重新下代码,从低版本复制两个文件过去或者修改两个文件的命名就行。具体原因是SDK对应版本build-tools里面缺少了dx.bat和dx.jar,解决方法从低版本复制一个过来,原创 2024-04-20 20:20:37 · 849 阅读 · 0 评论 -
Android Studio项目加载预编好的so库
Android 项目中需要调用别人的so的实现,那么我们的应用需要如何操作呢?本文主要介绍Android Studio中如何调用现有的so库代码。Android JNI生成的so库有很多不同架构类型,比如:armeabi、armeabi-v7a、arm64-v8a、x86;原创 2024-03-27 16:00:00 · 2299 阅读 · 1 评论 -
Android JNI SO库和对应的CPU架构详解
Android JNI生成的so库有很多不同架构类型,比如:armeabi、armeabi-v7a、arm64-v8a、x86;Android 系统不同的cpu架构就要使用不同类型的so库,如果不考虑内存大小,放全套也是没有问题的;但是实际使用中,很多时候只会放一套或者两套就可以了。本文介绍Android cpu不同架构的so库区别,以及如何查看当前系统是什么cpu架构,以便在实际场景中做出最优选择。原创 2024-03-27 08:42:59 · 1681 阅读 · 0 评论 -
Android Preference简单介绍
想刀一个人的心是藏不住的,我要吐槽一下Google工程师;写代码就写代码,Settings代码非要写Preference那套布局.没怎么学过Preference相关知识,之前很多次想修改获取一直Settings里面的某个功能或者布局就看得蛋疼。PreferenceScreen、PreferenceCategory、SwitchPreference这个东西,看Settings里面的代码是一脸懵逼。如果你把Preference相关的类和布局当成普通类,想要修改一两个文件的布局界面和具体事件,原创 2024-03-21 11:06:16 · 2365 阅读 · 1 评论 -
Android adb命令发送广播介绍
Android 广播除了代码中发送,还可以使用命令模拟发送,只要应用代码中进行了监听,都可以正常接收到的。掌握手动发送广播命令,可以方便某些代码的调试。所以学习一下Android adb方式 发送广播命令是有用的。其中, `` 是广播的动作,可以是Android系统定义的动作,也可以是自定义的动作;-d是数据的URI;-t是数据的MIME类型;-c是广播的类别;-n是广播的组件;-f是标志位;–es|ei|ef` 是额外的键值对参数。原创 2024-03-21 08:49:50 · 4925 阅读 · 1 评论 -
Android JNI常用API函数介绍
(1)JNIEnv 结构体相关函数(2)JavaVM 结构体相关函数(3)jclass 相关函数(4)jobject 相关函数(5)字段相关函数(6)数组相关函数(7)字符串函数其实主要的JNI API 函数就上面这些相关的内容;大部分会用,那么JNI 的API 就没啥难度了。其他的API函数可以看jni.h文件,但是这个文件是没有注释的,根据字面意义理解就差不多了。除了JNIEnv和JavaVM使用的获取使用比较少,其他API使用的还是比较多的;原创 2024-03-14 17:01:51 · 1319 阅读 · 1 评论 -
Android JNI静态注册和动态注册方法详解
这里的JNI静态方式注册方法和JNI的static方法是没有关系的。本文主要介绍jni.cpp代码中动态注册方法的讲解。很多人对这块知识还是比较陌生的,什么是静态注册?什么是动态注册?有些人可能都不清楚。JNI静态注册和动态注册是哪里的代码?什么时候使用静态注册?什么时候使用动态注册?为什么呢?其实一般情况用不到动态注册,但是复杂JNI项目或者系统源码中可能会用到动态注册。特别是系统源码中基本都是用的动态注册的形式,注册JNI方法,所以是有必要进行学习的。原创 2024-03-14 10:13:20 · 1589 阅读 · 0 评论 -
Android JNI 普通方法和静态方法详解
Android Jni中Java的静态方法和普通方法有什么区别?很多人可能都不清楚,如果想知道的可以了解一下。这个问题很少人会关注,一个是因为很少会静态方法调用JNI或者回调静态的Java方法;另外一个是因为知道了或者调试过就不难了,所以很多人觉得没必要讲解和记录。但是对于JNI 的初学者来说静态方法还是比较陌生的,很容易会懵逼的,不知道有啥区别。本文主要讲解一下上面两种静态方法在JNI中的区别,有兴趣的可以看看。原创 2024-03-06 16:59:22 · 1436 阅读 · 0 评论 -
Android JNI 复杂数据demo ,字符串、数组对象等数据操作讲解
Android JNI复杂数据的传输,比如数组,字符串等数据传给底层处理,对于JNI使用不多的开发者,可能开发会比较吃力。本文主要介绍JNI复制数据的传递和打印,不是很复杂的JNI Demo代码,但是对于复杂数据的处理的使用是很有帮助的。原创 2024-03-06 16:53:36 · 1282 阅读 · 0 评论 -
Android JNI复杂用法,回调,C++中调用Java方法
/创建对象的本地变量//获取类对象I)V");上面(1)和(2)是没什么研究价值的,NewGlobalRef和FindClass都是固定的写法。(3)和(4)的不用方法的调用区别就比较大了,使用不同的api函数还可以修改Java的变量属性。静态方法和动态方法调用的api函数也不一样,有返回值的方法和没有返回值的方法调用的api函数也是不一样的。并且Java方法或者变量即使是private修饰的也不影响cpp调用过去,因为反射是不受修饰符影响的。原创 2024-03-02 17:39:58 · 2146 阅读 · 0 评论 -
Android Jni添加打印(C++打印)
Android Jni中添加日志打印其实就是C/C++日志打印Android环境的C/C++代码打印,可以添加相关头文件后,调用打印方法跟Android打印类似,也是有打印级别,I,D,W,E#include //添加头文件#define LOG_TAG "TstCPlus" //定义TAG其他级别打印也是同理使用。上面的方法把定义都写在打印的定义都写在一个类里面了,如果多个类使用打印就不方便了,原创 2024-03-02 17:34:07 · 1995 阅读 · 0 评论 -
Android Jni的介绍和简单Demo实现
JNI 全程:JNI(Java Native Interface),通俗翻译:Java本地方法官方说法:提供一种Java字节码调用C/C++的解决方案,JNI描述的是一种技术。所以这里的Nativie的本地的意思就是C/C++,所以JNI通俗理解就是Java调用C/C++的方案技术。//定义变量和方法private:int number;public://定义方法。原创 2024-02-26 09:19:47 · 2000 阅读 · 0 评论 -
Android13 设置固定热点ip地址192.168.43.1
Android 热点ip一般的系统都是随机生成的,地址一般是:192.168.XX.XX如果要设置成一个固定的ip地址,就需要适配系统代码。相关的适配代码主要都在 IpServer.java 里面。为啥要设置固定热点ip?一般是投屏软件需求,或者其他一些开机或者打开热点后被自动连接场景的需求。原创 2024-02-26 09:05:46 · 8878 阅读 · 2 评论 -
Android 应用添加系统签名权限的几种方式实现介绍
Android 应用添加系统签名就能获取到系统权限调用一些系统接口,添加系统签名的方式主要包括:在Android Studio中配置签名文件生成apk 和 在源码目录编译添加系统签名生成apk。本文介绍的都是一些基础的签名知识,后续延伸介绍相关权限内容。有兴趣的可以进行了解。源码中生成 jks 签名文件:android {。。。//证书信息在这里配置main {storeFile file("./platform.jks") //签名文件路径,根目录release {原创 2024-02-04 12:51:01 · 3970 阅读 · 0 评论 -
Android13 系统源码适配安装可卸载的三方apk应用
本文主要介绍 手机的三方应用比如游戏,微博等应用,在源码中如何默认配置到手机中的。Android手机中的系统应用是无法手动卸载的,但是这些三方应用安装后是可以手动卸载的。源码编译中配置系统应用是比较简单的,只要在apk文件并且再Android.mk或者Android.bp中进行配置即可。但是如果要默认配置三方应用确实有点麻烦,网上很多文章讲得都比乱,大部分只是贴了相关代码,基本没有介绍完整流程和分享解决配置过程还有一些编译报错。原创 2024-02-04 12:42:35 · 2120 阅读 · 0 评论 -
Android.mk和Android.bp的区别和转换详解
简单的说:Android.mk和Android.bp都是用来编译出类库.jar,应用文件.apk,动态库.so,静态库.a等等作用。Android.mk就是一个GNU make语法的脚本文件。Android.bp文件是Android 7.0及更高版本中引入的一种构建脚本文件,是使用Starlark语法编写的,它是一种基于Python的轻量级脚本语言。他们的关系如下:ninja是一个编译框架,系统会根据相应的ninja格式的配置文件进行编译。原创 2024-01-19 18:37:40 · 3111 阅读 · 5 评论 -
Android系统目录priv-app 和app 详解
Android4.4增加了/system/priv-app/目录,那么它与/system/app/目录有什么差别?本文主要从定义,作用,具体效果等方面进行分析。有一些是网上没有介绍到的内容。如果只是知道 priv-app 目录比 app目录权限大一点,但是不了解具体区别的可以看看。(1)普通应用。只用到了普通权限,比如上网权限等等。(2)system/app 系统应用,用来可以限制无法手动卸载,对系统权限没有要求的情况,无法调用系统api。原创 2024-01-19 18:32:06 · 3258 阅读 · 0 评论