- 博客(86)
- 收藏
- 关注
原创 Android10 硬件抽象层(HAL)概要介绍和学习计划
写本篇文章目的:参考了罗升阳的《Android硬件抽象层(HAL)概要介绍和学习计划》, 发现老罗的博客内容是很久以前写的。直接运行会有些代码api过时,且android版本太低不太适合我门现在的学习。所以想写了本篇文章,本篇文章代码都会直接复制老罗博客的,并按照他的博客内容格式修改相关过时内容。编译环境: - android 版本 - android-10.0.0_r41 - 架构 - aosp_x86_64-eng - 内核分支:android-goldfish-4.14-gchi
2022-05-12 23:20:04 939
原创 android10 在Ubuntu上为Android系统的Application Frameworks层增加硬件访问服务
修改…/frameworks/base目录下的Android.bp然后执行 mmm ./frameworks/base/core/java/android/os/ 注意:千万别执行mmm ./frameworks/base,这个命令会将base中的所有文件都编译一遍,会导致一些多余Apk,导致。。。 在/frameworks/base/services/ core /java/com/android/server目录下新建HelloService.java文件 (添加了一些日志)package co
2022-05-12 23:17:37 639
原创 android10 在Ubuntu为Android硬件抽象层(HAL)模块编写JNI方法提供Java访问硬件服务接口
#define LOG_TAG "HelloService"#include <nativehelper/JNIHelp.h>#include "jni.h"#include <utils/Log.h>#include <utils/misc.h>#include <utils/String8.h>#include <dirent.h>#include <fcntl.h>#include <stdio.h>
2022-05-12 23:05:37 272
原创 Android 10增加硬件抽象层(HAL)模块访问Linux内核驱动程序
error: use of GNU old-style field designator extension [-Werror,-Wgnu-designator]
2022-04-20 21:32:18 2201
原创 在Ubuntu上为Android 10 系统内置C可执行程序测试Linux内核驱动程序
编译环境: - android 版本 - android-10.0.0_r41 - 架构 - aosp_x86_64-eng - 内核分支:android-goldfish-4.14-gchips参考教材: 罗升阳:https://blog.csdn.net/luoshengyang/article/details/6571210 依赖前文:https://blog.csdn.net/silently_frog/article/details/124184244目的记录
2022-04-18 22:51:25 2119
原创 在Ubuntu上为Android 10 系统编写Linux内核驱动程序
编写环境: - android 版本 - android-10.0.0_r41 - 架构 - aosp_x86_64-eng - 内核分支:android-goldfish-4.14-gchips参考资源 罗升阳:https://blog.csdn.net/luoshengyang/article/details/6568411目的这篇博客的主要目的是补充罗升阳博客中我认为不够详细的地方和修改部分由于代码过时导致的编译错误。补充不够详细的地方内核源码下载参考:htt
2022-04-14 23:26:49 422
原创 android ----- goldfish内核编译
error: Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install libelf-dev, libelf-devel or elfutils-libelf-develsudo apt-get install libelf-devfatal error: openssl/bio.h: No such file or directory21 | #include <openssl/bio.h>su.
2022-04-12 21:16:06 4165 2
原创 android10 源码编译异常记录
android源码编译异常编译环境:ubuntu20.04android11emulator x861. 启动模拟器后,进入模拟器桌面闪退,并报错:android emulator Segmentation fault (core dumped)解决方法: 1. 更新ubuntu 驱动 android emulator Segmentation fault (core dumped) 2. 编译目录下的/out/target/product/generic_x86/con
2022-04-06 23:58:16 1262
原创 Android S 适配问题 “Installed Build Tools revision 31.0.0 is corrupted ”
主要原因是 SDK 31 缺少了两个文件:dx.bat 和 dx.jar解决方法:在sdk\build-tools\31.0.0目录下找到d8.bat,将其名字改为dx.bat.在sdk\build-tools\31.0.0\lib目录下找到d8.jar,将其名字改为dx.jar
2021-08-06 10:53:45 505 2
原创 Android ----------- LayoutInflater的由来
如果我们的 MainActivity 继承的是 AppCompatActivity,则在onCreate()中 设置LayoutInflater#Factory2activity.onCreate() ------->AppCompatActivity.onCreate()------> AppCompatDelegateImpl.installViewFactory() ----------LayoutInflater.setFactory2()而设置的Factory...
2021-03-24 18:19:21 141
原创 Android ---------- ANR
导致Anr 可能的原因:输入事件(按键和触摸事件)5s内没被处理: Input event dispatching timed out BroadcastReceiver的事件(onRecieve方法)在规定时间内没处理完(前台广播为10s,后台广播为60s):Timeout of broadcast BroadcastRecord 07-27 19:18:47.448 1707 1766 W BroadcastQueue: Receiver during timeout: ResolveInfo{
2021-03-20 22:10:47 151
原创 设计模式 ------- 仿写Android RxJava 中的装饰器模式
仿写RxJava中的装饰器模式:整个例子的背景:用户选择商品、下单、店家发货、快递、拿到商品。交易类:Deliverypublic abstract class Delivery { public abstract void transport(Product product); public void arrive(Product product){ transport(product); } // 创建订单与收获地址 publ
2020-12-01 18:11:48 289
原创 android -------- 使用 Retrofit2 问题集锦
遇见的问题:1. 访问报404a. 可能一:baseUrl中的字符串没有以“/”结尾b. 可能二:在使用了注解@Path时,其值中存在/会被编译为乱码。举个例子: baseUrl= "https://www.baidu.com/" @FormUrlEncoded @POST("{bus}") Call<PersonInfoResponse> getUserInfo(@Path("bus") String bus, .
2020-11-26 15:01:52 777
原创 android ------- MVVM+ databing + lifecycle 错误集锦
1.Caused by: java.lang.RuntimeException: view tag isn't correct on view:null导致这个错误的原因是:模块之间的layout资源冲突了. 以我的项目为例子:我在Mvvm 模块中使用了DataBindingUtil.setContentView(this,R.layout.activity_main); 而 app模块中也有一个activity_main;在运行后,会合并多个库项目,导致Mvvm 模块中的activity_m
2020-11-20 18:37:14 709
原创 Android ---------- 疑难杂症
ERROR: Unable to find method 'org.gradle.api.tasks.compile.CompileOptions.setBootClasspath(Ljava/lang/String;)V'.Possible causes for this unexpected error include:Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection.
2020-11-13 09:52:40 545
原创 Android------- IjkPlayer 源码学习目录
在看了雷霄华的VideoEye后,发现其视图层使用的是SDL在windows上展示的。但是本人是搞Android App开发的,读其源码时,总是感觉有点不对劲。最后在找到了bilibili 为移动端封装ffmpeg的框架------ijkplayer。Android----ijkplayer的学习目录: ijkplayer 的配置 ijkplayer 配置时,遇到的问题(二)...
2020-10-06 16:15:28 2052 1
原创 Android --- IjkPlayer 阅读native层源码之解码成功后的音频数据如何发送回Android播放(九)
步骤4: audio_open 这里欠一篇。
2020-10-04 18:46:04 1385 7
原创 Android --- IjkPlayer 阅读native层源码之将AvPacket解码为一帧视频(八)补充
本篇会有很多源代码,请注意阅读每行代码上面的注释。本来是不准备写解码帧的,因为前面写了一篇关于解码一帧音频的博客。但是后面发现:虽然音视频(包括字幕)解码流程一样,但是它们解码后还会对帧有一些处理。而对于视频帧来说,这些处理还是很重要的。所以本篇主要目的介绍解码对视频帧的处理。如果还不知道解码的流程请看:Android --- IjkPlayer 阅读native层源码之如何将AvPacket数据解码出一帧数据(六)将视频的AvPacket数据解码为AvFrame的线程为ff_ffplay.c.
2020-10-02 16:52:18 1463
原创 Android --- IjkPlayer 阅读native层源码之如何将AvPacket数据解码出一帧数据(六)
audio_thread:static int audio_thread(void *arg){ //循环 do { // 将音频队列的存储个数、大小、和音频能播放多长时间这些信息存入 // FFPlayer.stat.audio_cache ffp_audio_statistic_l(ffp); // 注意: // 将缓存队列中一个AVPacket数据解码为Frame数据,解码出来的最新一帧存放
2020-09-23 11:08:36 1349
原创 Android ---- Ijkplayer阅读native层源码之IjkMediaPlayer_prepareAsync(五)
IjkMediaPlayer_prepareAsync的作用为播放器播放前做准备。其被Java层的IjkMediaPlayer.prepareAsync调用。IjkMediaPlayer_prepareAsync:static int ijkmp_prepare_async_l(IjkMediaPlayer *mp){ 省略。。。。 // 1.向消息链表发送一个FFP_MSG_PLAYBACK_STATE_CHANGED消息,改变IjkMediaPlayer的状态为MP_.
2020-09-22 15:28:24 1819
原创 Android --- IjkPlayer提供的播放器设置表
一个完整的播放器,少不了会有很多的默认设置或者提供给用户设置的选项。而IjkPlayer 同样也用。从Java层设置IjkPlayer播放器选项的流程请看这篇文章:https://www.jianshu.com/p/ab405e5bc1de。本篇记录上面博客中ff_ffplay_options.ffp_context_options中没解释的一些选项: { "max-buffer-size", "max buffer size should be.
2020-09-20 22:26:15 2022
原创 Android --- Ijkplayer源码阅读native层之自定义消息处理机制(四)
这篇主要介绍Ijkplayer 在native 自定义的消息处理机制,其原理于Android的handler相识。native层的消息处理机制本命为message_loop,其启动在ijkplayer_jni->IjkMediaPlayer_native_setup中message_loop:message_loop_n:注意这里有一个死循环,不停的去队列中取消息。这里预留一个空间A: post_event方法ijkmp_get_msg:获取一个消息这里第二
2020-09-13 17:57:23 713
原创 Android ----Ijkplayer源码阅读native层之动态库的加载和初始化(三)
在Android ----- ijkplayer源码阅读Java层(二)中欠了一篇细说加载Ijkplayer动态库时到底干了写啥???那我们就来聊聊。VideoActivity.onCreate中调用native_profileBegin这个是加载----性能分析工具android-ndk-profiler的动态库。这方面没用过,不说。loadLibrariesOnce:加载三个动态库ffmpeg:音视频编解码的核心库ijksdl:在native层创建一些java类对象,并存
2020-09-13 11:30:34 1164
原创 React Native 0.44.3 ----------微信h5支付
本篇记录ios使用ReactNative完成微信h5支付的一些注意事项。 a. 支付完成或者取消微信h5支付,会跳转到手机默认的浏览器中(safari),无法回到原App. b. 如何获得支付状态???1. 微信sdk与微信h5支付链接的不同微信sdk:{"package":"Sign=WXPay","appid":"wx41647c3ca4a4c6de","sign":"735D651D1BA5733EC12AC2B9218CC6DA","prepayid":"wx1...
2020-08-31 11:19:28 1739
原创 Android-------配置IjkPlayer遇到的问题集锦
1.ijkplayer-android/android/ijkplayer/ijkplayer-x86/src/main/jni/ijkmedia/ijkplayer/ff_ffplay.c:2589: error: undefined reference to 'ijk_soundtouch_translate'解决:修改文件:ijkplayer/ijkmedia/ijkplayer/Android.mk#LOCAL_SHARED_LIBRARIES := ijkffmpeg ij.
2020-06-20 20:52:38 1526
原创 Glide-----拍照或者相册裁剪的圆形图片不显示或者刷新后才能显示
简单叙述下----踩坑场景: 用户中心界面(假设为A界面):需要Glide加载一张服务端的圆形头像照,照片通过拍照或者本地相册裁剪后,上传到服务器。现在我拍了一张照片,将其上传到服务器后,如果上次成功,就直接将setImageBitmap这张图片到头像照上。但是你会发现图片不显示或者刷新后才能显示。原因: 当A界面(Activity或者Fragment)去相册或者拍照,然后拿到照片返回A界面这个过程,A界面生命周期会经历以下变化: onStop->onS...
2020-06-17 15:30:58 432
原创 音视频-----------在字节数据中提取ACC的profile、采样率和长度
参考博客: AAC音频码流解析每个ADTS frame之间通过0xFFF(二进制“111111111111”)分割。上图为ACC数据:蓝框为需要分析数据 1. 红框为分割符-----0xFFF 2. 紧跟着的50是一个16进制的表示-------0x50,其二进制位1010000,通过下面的计算取得ACC的profile// 0xC0------11000000// 假如, aacframe[2]=0x50;// 取前两位,eg 01010000 &am...
2020-05-24 21:48:58 730
原创 音视频-----------h264入门(如何获得NALU中参数的值)
typedef struct{ int startcodeprefix_len; //! 4 for parameter sets and first slice in picture, 3 for everything else (suggested) unsigned len; //! Length of the NAL unit (Excluding the start code, which does not belong to the NALU).
2020-05-23 18:51:36 710
原创 c---------菜鸟眼中的fopen
本篇为一个菜鸟记录使用fopen的一个笑话。代码如下:FILE *h264bitstream = fopen(url, "rb+");printf("文件指针:%p\n", h264bitstream);//断点处......fread (Buf, 1, 4, h264bitstream)printf("缓存指针:%p\n", Buf);上面代码打断点,调试运行。然后拿着h264bitstream指向的地址,去内存1查看该地址存储的值。buf的内存存储的值:而
2020-05-20 09:52:16 259
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人