android开发
文章平均质量分 60
lin-0410
最痛苦的事情,不是失败了,而是我本可以......
所以,如果目标还没去实现,不要感叹为时已晚,因为种一棵树最好的时间是十年前,其次是现在!
展开
-
Android 调试工具介绍
Android调试工具介绍查看帧率:adb shellsetprop debug.sf.showfps 1logcat | grep fps输出log:01-10 11:24:15.554 399 582 D SDM : HWCDisplay::DebugShowFps: fps=4在帧率偏低情况下,查看cpu,gpu利用率:adb shellsu...原创 2017-08-02 16:46:25 · 5482 阅读 · 0 评论 -
binder传输大数据分析
分析在android中传递大数据的方式,及实现原理。原创 2022-05-29 07:26:08 · 2191 阅读 · 0 评论 -
Android硬件加速
深度好文:理解Android硬件加速原理转 https://baijiahao.baidu.com/s?id=1709178794607037191&wfr=spider&for=pc教育专家雷教授发布时间: 2021-08-27 01:45工具主管,教育领域创作者关注硬件加速,直观上说就是依赖GPU实现图形绘制加速,软硬件加速的区别主要是图形的绘制究竟是GPU来处理还是CPU,如果是GPU,就认为是硬件加速绘制,反之,软件绘制。在Android中也是如此,不过相对于普通的软件绘转载 2022-03-21 16:42:55 · 764 阅读 · 0 评论 -
java调用栈中行号
java 调用栈 行号 getLineNumber,,原创 2021-12-30 20:07:48 · 425 阅读 · 0 评论 -
android studio 应用的插件存放位置
apply plugin: ‘’/.gradle/caches/modules-2/files-2.1/com.tencent.matrix/matrix-gradle-plugin/2.0.2/aaa931ed5755a3770abbc11951acb6b99b9411c8原创 2021-11-18 10:01:45 · 2549 阅读 · 0 评论 -
mediapipe 编译用于android的aar包
简要记录下,怎么编译mediapipe用于android aar包。一,mediapipe的介绍:参考博客 https://www.it610.com/article/1290670846662221824.htm参考官网,https://google.github.io/mediapipe/,本篇笔记以运动检测的使用为例:https://google.github.io/mediapipe/solutions/instant_motion_tracking二,我尝试了在windows环境下编译,原创 2021-06-18 21:49:00 · 2574 阅读 · 4 评论 -
通过gradle动态更改AndroidManifest.xml
记录下,通过通过gradle动态更改AndroidManifest.xml属性:使用场景,有些功能用到的Application,Activity类需要动态开关,在不打开这个功能时,相关的Application,activity,都不要被编译。1,先再gradle.peoperties中定义开关,APP_FEATURES=false2,然后修改app下的build.gradle,替换原mainfest中application,activity类。//update android:nam原创 2021-05-17 08:40:07 · 2239 阅读 · 3 评论 -
RecyclerView分隔条
因为没能找到直接的控件,给RecyclerView添加item间隔,及定义分隔条颜色,所以自定义RecyclerView分隔条,方便自定义分隔条颜色,item间隔,package com.custom.views;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.gra原创 2021-04-26 08:51:10 · 179 阅读 · 1 评论 -
使用Java代码自定义ConstraintLayout
因为xml格式的布局,在打包成jar时无法使用,所以在需要给合作方提供jar,有需要在jar包提供UI需求时,还是用java代码实现UI组件更合适。相关源码,已经上传到github,https://github.com/whcx/custom-widget基于ConstraintLayout定义组件,仅适用java代码完成布局,方便在jar包中使用。在这里做个笔记记录,方便重用,控件的测试以View + Fragment启动1,图片与文本的叠加 :LuckyView,RedPap..原创 2020-08-30 09:49:11 · 1161 阅读 · 0 评论 -
Android Native内存分析,systrace,
Google官方的调试本地内存工具:https://source.android.com/devices/tech/debug/native-memory1.malloc debug: adb shell setprop wrap.com.gritworld.gritmobile '"LIBC_DEBUG_MALLOC_OPTIONS=backtrace\ leak_track\ logwrapper"' adb shell am force-stop com.gritworld.g...原创 2020-08-09 15:17:29 · 2853 阅读 · 0 评论 -
HeapSnap的使用
github地址:https://github.com/albuer/heapsnapgithub的源码,缺少相关库,所以不能编译出可执行文件,及想要的lib,我补充了缺少的库,可以正常编译出可执行文件,及lib。HeapSnap的使用,在https://github.com/albuer/heapsnap地址有比较详细的说明。这里只是记录下,添加编译依赖库,可以正常编译出在手机上使用的可执行文件,及lib。这是我上传的一个可以在android上正常编译的资源路径:https://git原创 2020-08-09 14:05:13 · 515 阅读 · 0 评论 -
MonkeyTest脚本
Monkey测试的相关源码:android\development\cmds\monkeyandroid\development\tools\monkeyMonkey的使用,搜一下,有很多博客介绍。下面是monkey测试的脚本,可以直接拿来用,相关参数,通过帮助文档很容易理解:首先是一个批处理文件:Monkey_app.bat,文件名可以改成你自己应用的名字。adb rootadb wait-for-deviceadb shell sleep 3原创 2020-08-09 11:13:22 · 356 阅读 · 0 评论 -
NativeActivity使用流程
NativeActivity.java的使用中,屏幕绘制的操作是用native代码实现(如C++),显示UI的窗口跟普通的java层app是一样的,也是一个Activity.java,就是NativeActivity.java,原创 2020-04-21 15:08:00 · 2312 阅读 · 0 评论 -
Camera + opengl es 使用opengls绘制摄像头数据(二)
实现Camera数据的预览,可以使用TextureView,作为View heirachy的一个硬件加速层,从SurfaceTexture中获取到的纹理数据更新到HardwareLayer中,完成显示;也可以如这篇文章里讨论的,使用opengles完成绘制,相比较与前一种,使用opengles实现绘制,可以更方便的借助opengl的强大api添加特效处理,比如完成美颜的功能等.OpenGL...原创 2020-03-22 10:45:24 · 3576 阅读 · 3 评论 -
Android中音频元数据的采集,及RTMP推流
在用手机做直播推流时,不管是录屏直播,还是摄像头直播,都要用到音频的元数据.在Android中,可以借助AudioRecord来采集音频数据,然后通过faac编码库,将编码后的数据交给RTMP去封包后发送给服务器.这篇主要讨论从AudioRecord获取音频数据,然后通过faac编码,经过RTMP封包后发送到直播服务器的过程.一,如果要使用手机的录音功能,需要在AndroidMan...原创 2020-03-19 21:14:00 · 2285 阅读 · 1 评论 -
Camera直播视频数据的获取,及RTMP推流(一)
通过摄像头直播推流的场景中,需要先从摄像头获取去视频元数据,然后交给x264编码器(加入用的视频编码器是x264)编码,最后经RTMP封包后发送给服务器.我们使用CameraX来获取摄像头数据,对于CameraX的使用,参考官方文档:https://developer.android.google.cn/training/cameraxCameraX 是一个 Jetpack 支持库,旨...原创 2020-03-19 23:25:53 · 5287 阅读 · 1 评论 -
IOC技术-编译时注入(Butterknife,dagger2的实现原理)
不同于运行时注入的思想,编译时注入主要是借助APT工具,在编译时生成辅助类,来达到解耦,方便编程的目的.编译时注入比较流行的框架有Butterknife,Dagger2,针对android平台有daggerAndroid,实际daggerAndroid是对dagger2的优化,因为dagger2使用过程中有点违反了注入的核心思想(在注入的类里面,能够看到提供注入的类的对象),而daggerAn...原创 2020-03-07 22:32:10 · 341 阅读 · 0 评论 -
IOC技术-运行时注入(View注入,Event注入的原理)
什么是IOC?官方定义:IOC是原来由程序中主动获取的资源,转变为由第三方提供,并有原来的程序被动接受的方式,已达到解耦的效果.当然,这种以专业名词解释专业名词的方式,看了还是一头雾水.直白点说:Inversionof control ,直接翻译过来就是控制翻转,这个理论主要用于实现对象之间的解耦.也叫依赖注入,就是IOC容器在运行过程中,动态的将某种依赖关系注入到对象之中....原创 2020-03-02 22:44:25 · 345 阅读 · 0 评论 -
Android中插件化实现的原理,宿主app运行插件中的类 (一)
分析下Android中插件化实现的原理这里的场景是通过Java层的Hook技术,实现Activity插件化,以api29为例,如果其他的api版本,需要根据具体代码做兼容.Hook技术,通常就是用反射,代理模式改变系统的调用流程,或者说拦截事件的传递,做一些特定的处理.这样就可以在应用进程,通过hook技术改变系统进程的执行流程.要实现Hook,就要先找到Hook的点,Hook点的选择...原创 2020-02-06 23:48:11 · 1269 阅读 · 0 评论 -
Android中插件化实现的原理,hook Activity(二)
继续分析Android中插件化实现的原理这里的场景是通过Java层的Hook技术,实现Activity插件化,以api29为例,如果其他的api版本,需要根据具体代码做兼容.Hook技术,通常就是用反射,代理模式改变系统的调用流程,或者说拦截事件的传递,做一些特定的处理.这样就可以在应用进程,通过hook技术改变系统进程的执行流程.要实现Hook,就要先找到Hook的点,Hook点的选...原创 2020-02-29 23:29:16 · 770 阅读 · 0 评论 -
腾讯开源组件MMKV的使用及原理(1)
https://github.com/Tencent/MMKV/blob/master/readme_cn.md在需要持久化保存key-value这样的键值对时,通常考虑使用的是SharedPreference,SP最终以xml文件的形式保存数据,并且是直接IO的方式读写数据,在使用中会概率性碰到ANR的问题,不管是使用异步的方法apply,还是阻塞式的commit提交数据,都看会因为IO的瓶...原创 2020-02-23 19:50:19 · 3401 阅读 · 0 评论 -
Android中减小apk大小的方式
减小APK空间的方式:一,矢量图,不会因为缩放而让图片质量下降,又可以减小apk的大小,但是有个限制,通常矢量图常应用于小图标,比如200*200以下的.除去美工给出,还可以从Android studio中直接使用默认的一些资源.用法是,在资源上点右键 ->新建 -> Vector assert,其中有很多预制的矢量图,标准的矢量图是<svg>为根节点的,and...原创 2020-02-14 10:21:56 · 916 阅读 · 0 评论 -
ViewPager中的高度属性设置后为什么不符合预期
分析一个Viewpager中设置高度属性wrap_content为什么不是预期的内容给大小,而是充满整个屏幕高度.截图:先说下简单的布局:<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" ...原创 2020-02-11 16:08:37 · 379 阅读 · 0 评论 -
Android序列化Serializable,Parcelable接口的应用,及可能的坑
什么是序列化?简单说就是将数据结构或者对象,转换成可以存储或者传输的数据格式的一个过程,也即是把数据结构,对象转成二进制串的过程.序列化的是对象,确切说是对象中的变量,不是方法,不是类.为什么需要序列化?在操作系统底层,数据是以字节序列传递,所以如果要传递对象,就需要序列化,反序列化操作.所以,进程间通信,本地数据存储,网络数据传输都需要序列化的支持.序列化的实...原创 2020-02-05 15:23:02 · 494 阅读 · 0 评论 -
嵌套View的滑动,及拦截冲突问题.
分析嵌套view滑动时为什么会有冲突,怎样解冲突这里的一个场景是:父View是一个可以左右滑动的界面(可以自定义ViewPage,模拟出冲突的情况,因为ViewPager已经处理了滑动冲突,所以如果不重写,模拟不出这里的场景),其子View是一个可以上下话的界面,比如是一个listView.抛开ims侧的事件处理逻辑,直接说应用侧.应用侧事件分发的起点从Activity开始.pu...原创 2020-02-04 00:03:19 · 2919 阅读 · 0 评论 -
动态代理设计模式,及实现原理
动态代理模式,前提还是代理模式,只是优化了静态代理的一些不足。比如,静态代理在一对一关系出现时,创建的代理对象较多,代码量也大,可维护性就会稍差,在一对多的代理关系出现是,可扩展性就更差了。而动态代理,就是在使用时,才去创建代理类和实例,这样就可以通过一个动态代理类解决创建多个静态代理的问题,更灵活了。当然动态代理的缺点也是有的,就是相比静态代理直接调用目标对象方法,动态代理效率会低,...原创 2020-01-07 18:53:16 · 263 阅读 · 0 评论 -
模拟MotionEvent事件
这两天在做模块的单元测试,需要模拟触屏事件,手势操作,下面针对MotionEvent做下代码记录:下面的事件注入都会调用一个函数:Instrumentation mInstrumentation; public void sendPointerEvent(int action, Point point) { MotionEvent event = MotionE...原创 2019-10-31 19:03:52 · 1985 阅读 · 0 评论 -
android sdcard访问权限问题
如果app不能读写sdcard,提示如下类似异常:Limited by the system, external sd card is unavailable ...可以修改以下2个文件:1. Add the permission 'android.permission.WRITE_MEDIA_STORAGE' in the 'AndroidManifest.xml' of原创 2015-12-09 11:00:40 · 679 阅读 · 0 评论 -
解压android系统映像文件system.img
前一篇文章说了系统中的多数映像都可以使用类似 ramdisk.img的解压方法,但是system.img 那样解压相对麻烦写,这里采取mount的方法,是比较简介的解压方式。1)这里会用到一个文件 simg2img ,在编译好的android项目里,这个可执行文件放在目录:out/host/linux-x86/bin 中,把simg2img 复制到跟system.img 同级的目录。执行下原创 2015-12-29 22:22:56 · 1825 阅读 · 2 评论 -
解压android系统的映像文件ramdisk.img
有时候需要解压系统的映像文件,来验证一些问题,如何解压系统中的×.img类的映像文件呢,下面以ramdisk.img 为例,其他的映像文件也是类似的.1)对ramdisk.img 执行file命令,得到如下结果:linjw@linjw:~/ramdiskImg$ file ramdisk.img ramdisk.img: gzip compressed data, from Unix原创 2015-12-29 22:03:26 · 801 阅读 · 0 评论 -
android 手机端 常用命令
android 手机端 常用命令:adb shell pm list packages:列出所有的包名。adb shell dumpsys package:列出所有的安装应用的信息dumpsys package com.android.XXX:查看某个包的具体信息查看cpu的使用率:adb shell top 查看内存使用情况:adb shell procr原创 2015-12-01 14:27:03 · 410 阅读 · 0 评论 -
同一个应用安装时的类型却不同
这2天碰到一个问题,从一个客户预制的应用商店下载的apk,从文件管理这个路径可以正常安装,但是从downloadProvider这里却安装不了,分析:在filemanager和downloadprovider两处解析出的mimetype不一样,在filemanager代码里,查看mimetype类型是:application/vnd.android.package-archive,原创 2015-12-15 10:26:22 · 656 阅读 · 0 评论 -
清空一个模块,然后显示编译命令行
helloworld 模块 clean: make clean-helloworld“make clean-$(LOCAL_MODULE)” 是 Android 编译 环境提供的 make clean 的方式。Android 编译 环境提供了 ”showcommands” 选项来显示编译命令行make helloworld showcomma原创 2016-01-26 18:17:56 · 325 阅读 · 0 评论 -
预置多媒体文件等到手机的指定目录
预置mp3,video,picture等文件到手机的指定目录的步骤:一:先把要预置的文件放到系统的文件目录,通常是放在:out\target\product\msm8916_64\data 这个目录下,在这里创建一个文件夹media。实现代码如下:1)在目录:LINUX\android\device\qcom\msm8909 添加一个文件夹:built_in_media,需要预置的多媒原创 2015-12-09 17:03:54 · 1997 阅读 · 0 评论 -
android对多物理按键,方向键的支持
声明:这里只是做个笔记,如有高见,请多指教!现在的android手机多是触屏的,对实体按键的支持仅限home,menu,volumeup,volumedown,power等常用的几个,如果想支持类似功能机的全键盘,方向键等,可以修改以下文件,1,修改 :frameworks/base/core/res/res/values/Config.xml文件 false原创 2016-03-14 14:17:47 · 3619 阅读 · 0 评论 -
文件管理添加删除图片,视频等多媒体文件时,图库不会即时更新的问题
遇到过这样的问题,在文件管理删除一个文件夹,这个文件夹里面包含有图片,然后进入图库查看,发现删除的那个文件夹及图片还在,但是不能查看了,同理的问题,如果是音频,视频也会有这个问题,下面说下修改方法:首先,在文件管理中,做完删除操作后,发出一个广播消息,告诉mediaprovide需要重新扫描一些路径,删除文件或者文件夹的操作,最终会调用下面这个文件:\android\packages\原创 2016-04-12 16:06:46 · 3508 阅读 · 0 评论 -
查看ico格式图片
ico格式图片,在文件管理器中可以通过gallery打开,但是在设置-->存储-->不能查看问题:首先图库的要能匹配 : image/x-icon,带有这种mimetype的intent的请求,所以先要检查gallery的intent匹配规则: android:configChanges="keyboardHidden|orientatio原创 2016-11-16 15:53:36 · 2166 阅读 · 0 评论 -
清除缓存,同时删除缓存文件夹
在清除应用缓存时,默认不会删除cache文件夹,所以清除缓存后,查看缓存大小为12k(也可能是别的值,只是不为0),可以修改:frameworks/native/cmds/installd/commands.cppint delete_cache(const char *uuid, const char *pkgname, userid_t userid){ std::str原创 2016-11-14 19:05:42 · 1095 阅读 · 0 评论 -
Android编译系统简析
Android 编译系统 的简单理解一,Makefile 入门 :简单来说,Makefile提供了一种机制,让使用者可以有效的组织“工作”,这里说的是“工作”,而不是“编译”,因为Makefile并一定是用来完成编译工作,事实上它本身只是一种“规则”的执行者,而使用者具体使用它来做什么没有任何限制,比如可以用它来架构编系统,也能用来生成文档,或者打印log信息等。所以理解makefile原创 2016-04-04 22:09:06 · 989 阅读 · 0 评论 -
由DocumentsUI 得到文件path
uriForCapture = content://com.android.providers.media.documents/document/video%3A98uriForCapture = content://media/external/video/media/98针对这2中uri第二种通过查多媒体数据库很容易得到文件path,类似:uriString = /storage/em原创 2017-02-10 14:35:37 · 1792 阅读 · 0 评论