Android
文章平均质量分 81
深海Enoch
我们的目标是星辰大海~
展开
-
【Build】Linux / Android 动态库常用操作方法 查找、查看依赖、版本,pkg-config 用法
Linux快速查找机器上的库ldconfig -p | grep <lib_name>ldconfig -p 会打印出当前系统已经安装的动态库信息,然后使用grep找你的lib即可查看库的依赖readelf -d <lib_name> 该命令查看库依赖哪些库,但不能查看它依赖的库存放在机器的什么位置ldd <lib_name> 该命令能看到库依赖的那些库的具体路径及名称查看 Android 库的依赖使用位于 ndk 目录下的工具,例如~/Android/原创 2022-05-25 12:37:19 · 1727 阅读 · 0 评论 -
【AVD】 FFmpeg 获取 JPG 图片旋转信息等 Exif 信息
前段时间写了篇 杀鸡用牛刀,FFmpeg API 加载存储图片,比 ImageMagic 和 stb_image 快多了,后来发现有个问题,有些 JPG 图片是带有旋转信息的,如果只解码,不获取它的旋转信息,将导致图片的方向错误。av_dict_get那如何才能用 FFmpeg 来获取 JPG 的旋转信息呢?查过很多资料,最后终于找到一种方法。由于再次查找时又要翻阅多篇文章,因此记录在此。答案就是使用 av_dict_get 这个方法。首先,要完成使用 FFmpeg 对 JPG 图片的解码过程,得.原创 2021-12-22 13:49:00 · 2772 阅读 · 0 评论 -
【AVD】解决 HarmonyOS 2.0.0 系统上 NDK MediaCodec 硬解码概率性失败的问题
之前参考 Google 官方 native codec demo 实现了一个 Android 机上硬解码的功能,期望能改善手机的 CPU 使用率,提高应用性能。但是后来同事报出说在 华为 Mate10 手机上解码失败,由于当时我手边没有 Mate10,只有 P30,而在 P30 、小米8 和 小米 MIX 2S 上测试均未复现。因此一直没处理,最近再次提上日程,本想给华为提 case,写了个硬解码 Demo,竟然解决了这一概率性失败的问题。原创 2021-12-16 14:04:37 · 4475 阅读 · 0 评论 -
【AVD】NDK MediaCodec 编码中的坑 configure: err(-2147479551) error -38 Fatal signal 4 (SIGILL) ILL_ILLOPC
感觉程序开发的状态,大约是这样的,昨天,横看成岭侧成峰,远近高低各不同;今天,山重水复疑无路,柳暗花明又一村;明天,正入万山圈子里,一山放过一山拦。尤其是搞一些自己并不熟悉的领域,最开始,绞尽脑汁,不知道问题是怎么出现的,又该怎么解决;就在接近放弃之时,忽然通过查找资料、或者提问,找到了答案,豁然开朗;解决完问题之后再次试运行,咔,又崩了,又不知道是哪里又出了什么问题,又该怎么解决了。就这样循环往复。最近做 Android 平台音视频硬件编解码就是如此。...原创 2021-08-12 20:51:30 · 3693 阅读 · 3 评论 -
【AVD】FFmpeg + MediaCodec 实现 Android 硬件解码,中间有个大坑
最近在做移动端音视频编解码,首先要实现的是移动端视频的解码功能。纯的 FFmpeg 方法在移动端也能实现,但是效率上的确要慢一些,1080p 的视频还好,但是上到 2k、4k,那个解码速度(以肉眼可见的速度解码一帧),就没法忍受了。因此要搞移动端硬件解码,以加速解码速度,同时释放部分 CPU 资源。参考 FFmpeg 源码中 examples参考 FFmpeg 官方源码中的 examples 的相关功能实现,来实现自己的程序设计,应该是最快的思路。但是,关于视频解码,FFmpeg 官方源码中,有 d.原创 2021-07-29 12:49:25 · 2442 阅读 · 10 评论 -
【AVD】FFmpeg avcodec_open2 返回 -1 (Operation not permitted) 的一种解决方案
最近在搞 Android 硬解码。在 软解码 和 硬解码 的兼容实现上,进行了各种尝试。后来,忽然发现,无法正常解码了,竟然出现 Failed to open codec。使用 ret = avcodec_open2(ctx, codec, nullptr) 查看到 返回值为 -1,获取到的错误信息是 “Operation not permitted”。这让我很头疼,对 Android 开发而言,权限这种东西,唉。但是经过百度,发现,有网友称是因为 timebase.den 和 timebase.n.原创 2021-07-19 17:02:22 · 2112 阅读 · 1 评论 -
【转】Windows 下用 ndk-r20b/ndk-r22b 编译 FFmpeg 4.2 Android 库
1. FFmepg简介ffmepg是一个音视频的开发工具。一套可以用来记录、处理数字音频、视频,并将其转换为流的开源框架。采用 LPL、GPL许可制,提供了录制、转换以及流化音视频的完整解决方案。1.1 命令行工具概述下面是一些FFmepg使用时的基本命令,是最基础的内容,我们不用太熟悉FFmpeg里面的代码是如何写的,如我们只需调用:ffmpge -i input.avi -r 24 output.avi就可以把input.avi中的帧率变成24,输出的output.avi就是24fps的视频转载 2021-04-27 15:04:03 · 726 阅读 · 0 评论 -
android.mk 与 makefile文件的区别
makefile文件控制整个工程的编译规则,比如指定需要生成哪些目标文件,指明生成这些目标文件依赖哪些源文件,指明生成的目标文件放在哪个文件夹下等等。而make就是一个命令工具,可以解析makefile文件中的指令的一个命令工具。android.mk也是一样的功能,只不过它是android编译环境下的一种特殊的“makefile”文件, 它是经过了android编译系统处理的。所谓android编译系统,就是android顶层目录下的build目录里面的一系列编译控制文件,其实就是一系列makefile文转载 2020-07-15 15:40:54 · 4200 阅读 · 0 评论 -
【Android】android NDK开发 静态/动态注册 jni
关于jni有两种方法注册 分别为 静态注册和动态注册。静态注册Java 调用 C++首先 来看看静态注册 所谓的静态注册 就是直接在Java文件里写个native方法 然后再c/c++文件中实现这个方法就行了!来看看代码:package com.example.ndk_test; import android.support.v7.app.ActionBarActivity;impo...转载 2019-10-15 20:03:19 · 200 阅读 · 0 评论 -
【定制Android系统】Android O 应用静默升级安装、安装后静默打开
需求:在没有操作屏的设备上,通过手机连接设备发送命令可以触发应用升级,但升级过程中需要不断点击弹出的确认、安装、允许等命令,需默认允许所有弹窗、使手机发送命令后整个安装过程能自动完成并自动重新打开升级后的应用。原理Android 默认的安装应用的系统应用为 PackageInstaller,首先确定平台源码没有裁剪该应用,然后修改该应用 onResume 时的相关处理。自动重新打开升级后的...原创 2019-02-20 19:05:38 · 1503 阅读 · 0 评论 -
【定制Android系统】Android O 修改吉字节为GB
需求:默认源码中,当使用中文时,流量使用、存储容量等位置的单位为中文表述:字节、吉字节、兆字节。需要将其改为 B、GB、MB 等。原理Android O 里的网络流量使用、存储容量这两处位置的单位显示并非使用了不同语言的 values,而是使用了 Formatter 类来控制修改。其大致流程是,检测到需要使用单位时,调用相关类的 formatRoundedBytesResult 方法,该方...原创 2019-02-20 08:50:24 · 1473 阅读 · 0 评论 -
【定制Android系统】Android O Camera(1)——简单梳理 Camera1 的 setParameters 通路.2(未完不续)
需求:接上一篇,疏通 Camera1API 的 setParameters 通路,按照分析,应该调用到 CameraClient.cpp 的 setParameters,然后进入 HAL 层。然而,通过打印 Log 发现,并没有走到 CameraClient 类,而是走进了 Camera2Client 类。CameraService::makeClient()在 Open Came...原创 2019-02-18 10:47:35 · 363 阅读 · 3 评论 -
【定制Android系统】Android O 一种 Framework 层实现按键长按功能的方法(以长按 CENTER 键实现系统重启为例)
sdf原创 2018-12-14 19:42:36 · 1045 阅读 · 0 评论 -
解决Unknown host 'd29vzk4ow07wi7.cloudfront.net'. You may need to adjust the proxy settings in Gradle.
把 总项目 下的 build.gradle 中的两个 jcenter() 用 maven{ url ‘http://maven.aliyun.com/nexus/content/groups/public/’}代替。原创 2018-10-10 17:09:24 · 8071 阅读 · 5 评论 -
【定制Android系统】Android O 默认允许应用弹窗申请权限
需求:Android 应用在 6.0 以后?就需要动态申请权限了,那些写在 AndroidManifest.xml 中的权限在应用运行时会弹窗申请。如果应用跑在不方便与最终用户做交互的场景,例如摄像头等,或者单纯地不希望应用再弹窗申请权限,而是默认授予应用全部的权限。https://blog.csdn.net/frakie_kwok/article/details/78531500 这篇文章提到...原创 2018-10-19 09:12:20 · 7553 阅读 · 3 评论 -
Android OTA升级原理和流程分析(一)
转载自: http://blog.chinaunix.net/uid-22028566-id-3533848.html,侵删这篇及以后的篇幅将通过分析update.zip包在具体Android系统升级的过程,来理解Android系统中Recovery模式服务的工作原理。我们先从update.zip包的制作开始,然后是Android系统的启动模式分析,Recovery工作原理,如转载 2017-07-27 19:15:02 · 13652 阅读 · 1 评论 -
OpenGLES FBO-BlitFramebuffer MSAA 抗锯齿的实现
OpenGLES FBO-BlitFramebuffer MSAA 抗锯齿的实现不太好用的FBO-Blit MSAA昨天写了一篇 OpenGLES 在几种情况下的 MSAA(Multisample Anti-aliasing)抗锯齿,其中唯独没有提到一种利用 FBO-Blit 的抗锯齿方法,那是因为我没能实现。我对 OpenGL MSAA 的大部分代码的了解都是根据 关于支持多重采样的FBO和Tex原创 2017-09-19 17:59:53 · 4379 阅读 · 3 评论 -
.stamp 文件用处一瞥
删除 stamp 文件应该可能会导致相应的模块被重新编译。原创 2017-10-30 14:32:15 · 4075 阅读 · 0 评论 -
【定制Android系统】Android 7.1 在 user 版本中默认关闭 开发者选项 的总开关
需求:user 版本中,Settings 中的开发者选项默认隐藏,且总开关默认关闭。eng 版本默认存在且默认打开总开关。 源码位置:packages/apps/Settings/src/com/android/settings/DevelopmentSettings.java 解决方案: 在 DevelopmentSettings.java 的 onResume() 函数中,做出如下修改。...原创 2018-05-29 15:10:17 · 6139 阅读 · 0 评论 -
【定制Android系统】Android 7.1 默认的 USB 配置模式,默认的 usb debug 配置
需求:在 user 版中,插入 usb 连接电脑时,默认只有 mtp (传文件)功能,关闭 adb 功能。在 eng 版中,插入 usb 连接电脑时,默认打开 adb 功能,且兼具 mtp (传文件)功能。 提示:Android 4.4 之后貌似修改了整个 usb 模式配置的 方案,从 DatabaseHelper.java 中配置默认功能是行不通的了。试图在 SystemServer....原创 2018-05-29 15:39:15 · 15743 阅读 · 2 评论 -
【定制Android系统】Android 7.1 实现连接 Captive Portal WiFi 时自动弹出登录页面
需求:系统连接WiFi时,若连接到需要登录的WiFi,则弹出登录页面。 说明:像 MIUI 等系统,现在的表现是弹出一个专门的页面(虽然我也不知道这个页面从哪儿能再次打开,以至于每次想更换账号都很费劲)。但是本文实现的是弹出一个普通的浏览器页面。 解决方案:在 NetworkMonitor.java 的 processMessage 中,当 Android 原生系统判断到需要登录时,发送 in...原创 2018-06-01 14:44:32 · 9302 阅读 · 0 评论 -
【定制Android系统】Android O Camera(1)——简单梳理 Camera1 的 setParameters 通路.1
需求:最近在做一个 Camera 相关的项目,最简单粗暴的一个目的就是使用 C++ 开发。也就是说,作为 System/Framework 层,我们需要把 Android 的 Camera 系统封装出一套 C++ 接口,以供 SDK/Application 调用,使得 SDK/Application 可以直接使用 C++ 开发,以便更高效地加入 AI 相关的算法。 那么,打开 Came...原创 2018-08-28 17:06:26 · 2231 阅读 · 0 评论 -
【定制Android系统】Android O 在ROM中添加自己的 so 库(1)——Android.mk 与 Android.bp 的区别
需求:在 Android 源码中添加一个模块,重新封装接口给应用软件或SDK调用。提示:其实该问题需要在合适的源码位置,当然最好是 vendor 目录下,使用 android 的 overlay 机制替换到合适的位置。当然,如果不太正规的开发,或者迫于时间的开发。直接在源码中合适的位置创建目录和编译文件也是能达到目的的。Android.mk 的编译目录下Android.mk 应...原创 2018-08-24 15:52:30 · 4026 阅读 · 3 评论 -
【定制Android系统】String16 打印、 String16 转 int 、 int 转 String16
String16 转 int其实一切的一切,只需要一件事,那就是。借助 android::String8。查看 String16 的头文件,其中有个private 的函数。inline std::string String16::std_string(const String16& str){ return std::string(String8(str).strin...原创 2018-09-08 09:51:22 · 6392 阅读 · 0 评论 -
【C++】【指针】把指针传出去使用的函数,指向指针的指针
需求:在函数中 new 一个变量,并将其地址传出去给函数调用者使用。今天在 coding 时遇到一个错误。我在 Ctrl 类写了一个成员函数 int init(Camera *p),并声明了一个成员变量 Camera *m_pC然后在该函数的定义中这么写的:int Ctrl::init(Camera *p){ m_pC = new Camera(); p = m_...原创 2018-09-13 17:30:36 · 1494 阅读 · 1 评论 -
(Mali Graphics Debugger)MGD 在 64bit Arm Based Rooted Android 7+ 及 Windows 上的快速配置
一,安装 Windows .exe 文件下载地址: https://armkeil.blob.core.windows.net/developer/Files/downloads/mgd/4.7.0/Mali_Graphics_Debugger_v4.7.0.4453324b_Windows_x64.exe安装完成后,进入安装目录可以看到如下内容。主要注意一个用户指南和一个非常重要的 target原创 2017-07-25 11:41:28 · 2617 阅读 · 0 评论