
Android
文章平均质量分 60
Fighting Horse
专注移动端、桌面端跨平台程序架构;深入网络、音视频、3D渲染等技术应用。
展开
-
android ota 升级包制作分析 (1 简介)
工具ota-from-target-files 该脚本用来制作升级包。 根据输入参数情形,制作的升级包有“完整包”和“差量包”两种。 制作过程的输入文件是target-files结构的zip文件,输出文件是ota-package结构的zip文件。原创 2014-06-08 10:25:51 · 1654 阅读 · 0 评论 -
android ota 升级包制作分析 (3 打包流程)
主流程(main) 解析输入参数(common.ParseOptions) 解压输入zip文件(input_zip,common.UnzipTemp) 读入META信息字典(common.LoadInfoDict) META/misc_info.txt 其他可选的META目录下的文件:mkyaffs2-extra-flags.txt、recovery-原创 2014-06-08 10:52:48 · 7631 阅读 · 0 评论 -
android ota 升级包制作分析 (4 设计细节)
设计细节 (一) 文件权限 META/filesystem_config.txt system 0 0 755 system/fonts 0 0 755 system/fonts/DroidSans-Bold.ttf 0 0 644 system/fonts/DroidS原创 2014-06-08 10:56:43 · 2608 阅读 · 0 评论 -
android ota 升级包制作分析 (2 包结构)
中间包 target-files 目录结构: OTA/ android-info.txt bin/ sqlite3 check_prereq updater applypatch applypatch_static原创 2014-06-08 10:42:57 · 2983 阅读 · 0 评论 -
android ota 升级包制作分析 (5 工具)
工具 1 mkbootfs mkbootfs的源代码在system/core/cpio中。 Ø cpio_百度百科 Ø Cpio - 维基百科 Ø cpio命令详解- 51CTO.COM mkbootfs -f boot_filesystem_config.txt targetfiles/BOOT/RAMDISK | minigzip > ramdisk.img 2 mkbootim原创 2014-06-08 11:04:32 · 6229 阅读 · 0 评论 -
Android -> Windows 多样化投屏方案
需求投屏有两种方式:镜像屏幕和扩展屏幕,分别在两个屏幕上显示相同、不同的内容。多样化场景下,需要结合两种方式,比如:在两种方式下切换,某些页面(Activity)镜像投屏,某些需要在扩展屏另外展现不同的内容 两种方式叠加,在镜像上面显示部分不同的内容 部分区域镜像,类型PPT演讲者模式方案(一)多端互动局域网发现采用mDns相对更独立灵活一些,Android原生有AP...原创 2019-04-28 11:30:28 · 2193 阅读 · 0 评论 -
构建 Aria2 (Android share library)
搭建工具环境安装系统工具sudo apt-get install autoconf ???point docbook2x tofrodos下载NDK,android-ndk-r14b-linux-x86_64.zip,解压后,在NDK目录执行:mkdir -p /mnt/work/toolchain/android-standalone-r14bexport ANDROID_...原创 2019-04-28 09:28:26 · 2742 阅读 · 1 评论 -
基础库 - 网络体系 - 支持http缓冲
http cache-control 指令的设置以及意义HttpFetcher.init 配置缓存配置缓存大小缓存目录使用进程名称加 Cache("HttpFetcher-Cache-" + name)原创 2019-04-21 10:50:51 · 146 阅读 · 0 评论 -
播放框架 - GL渲染
1、WallpaperGLThread2、GLMediaDisplay3、GLRenderer4、GLImageRenderer5、GLVideoRenderer问题:从GL渲染切回正常渲染,会播放失败(即使刷新Surface,也被GL绑定,依赖解决)播放框架 - GLVideoRendererOpenGL 从零开始写一个Android平台下的全景视频播放器TextureVi...原创 2019-04-21 10:49:29 · 1200 阅读 · 0 评论 -
Android 投屏实现纪要
在前文里介绍了Android -> Windows 多样化投屏方案这里记录具体的实现(一)屏幕截取MediaProjection/VirtualDisplay因为权限问题,不能直接创建镜像(VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR)类型的VirtualDisplay,需要通过MediaProjection 提示用户授权。 Medi...原创 2019-04-28 13:12:36 · 5918 阅读 · 0 评论 -
优化 Android 投屏实时性
优化编码延迟编码器延迟主要优化方式有:去除B帧,目前Android编码器基本都是 H264 Baseline 配置,没有启动B帧编码。另外Android 最新 API 多了 MediaFormat.KEY_LATENCY 编码参数,在平台上有没有用,目前资料比较少,不太清楚。优化网络延迟通过抓包发现,网络上数据包存在周期性脉冲输出流量,怀疑网络传输中存在小报文拼接批量传输的行为...原创 2019-04-28 15:21:01 · 2398 阅读 · 0 评论 -
基础库 - 插件体系 - 对话框异常分析
备注1:08-09 10:37:13.191 11055 11055 W DebugLog: OverlayLayoutFactory: onCreateView InflateException more cause [java.lang.NullPointerException]08-09 10:37:13.191 11055 11055 W DebugLog: java.lang.N...原创 2019-04-25 07:02:52 · 241 阅读 · 0 评论 -
ARouter实现分析
网络上已经有很多分析ARouter的文章了,但是各有偏重;这里整理一些关键技术点,尽量能够将完整的流程都覆盖到,并且将一些容易错误使用的细节列举出来。Java注解处理ARouter大量使用了Java注解,并且通过APT(Annotation Processing Tool )自动处理注解,生成完成路由功能的代码。ARouter使用的是RetentionPolicy.CLASS形式的注解...原创 2019-05-14 16:21:58 · 567 阅读 · 0 评论 -
Android 多端互动实现方案
网络发现网络发现中有主控设备(一般是移动端)与被控设备(一般是TV或者PC端)两种角色。方案一(局域网发现)采用mDns(组播DNS)相对更独立灵活一些,Android原生有API(NSD)。在Windows上需要应用自己集成mDns开发。为防止主控设备与错误的被控设备绑定,采用随机码辅助选择。被控设备会一直显示一个连接码。在异构网络拓扑中,因为组播转发受限,该方案不可行,...原创 2019-05-09 19:28:54 · 1264 阅读 · 0 评论 -
Android MVVM 框架 (Data Binding)
Data Binding 框架图数据->视图原创 2019-05-21 15:58:29 · 261 阅读 · 0 评论 -
基础库 - 插件体系 - 使用系统预置的 odex
描述:Android系统ODEX文件格式解析Android动态加载DEX文件流程分析LOCAL_DEX_PREOPTWITH_DEXPREOPTWITH_DEXPREOPT_PIC1、 系统预置的odex,arch选择不对,比如 PposTv 只能在32 bit 下运行a) 预置的odex:/system/app/PposTv/oat/arm64/PposTv.odexb) ...原创 2019-04-21 10:41:58 · 439 阅读 · 0 评论 -
播放框架 - TextureView 播放
Hardware acceleration用MediaPlayer+TextureView封装一个完美实现全屏、小窗口的视频播放器存在问题:1、导致UI的文字显示成方块备注1:SurfaceTexture 创建的 stack06-04 10:28:10.678 1433 1433 D WallpaperTextureView: onSurfaceTextureAvailable...原创 2019-04-21 10:38:11 · 337 阅读 · 0 评论 -
播放器适配经验总结——Android
Android的流媒体协议支持不太好,标准只支持RTSP和MP4 over HTTP。因为MP4头部大,启动会比较慢,另外MP4也不适合做直播。当然基于Android的开放性,完全可以自己做一个播放器,难点是要做解码和显示的适配,Android机型太多,这个适配工作量比较大。Android升级到4.0版本应该支持HLS,目前也有一些设备厂商在2.x版本上支持的HLS。但是要做统一的产品,还是只能用原创 2012-07-06 12:38:20 · 4909 阅读 · 0 评论 -
webrtc 针对 android 平台的编译和运行
1 环境准备官方说明:http://www.webrtc.org/reference/getting-started/prerequisite-sw1.1 安装 SVNwindows 安装 TortoiseSVNhttp://tortoisesvn.net/downloads.htmllinux 直接用 apt-get 安装sudo apt-get in原创 2013-09-11 15:48:57 · 12512 阅读 · 0 评论 -
搭建 android 代码镜像服务
1. 搭建 git 服务器git服务器有很多,比如使用android 提供的 gerrit 服务器,安装方法参见 gerrit 环境搭建2. 搭建 android 代码库2.1 同步远程库$ mkdir ~/review_site/git/google$ cd ~/review_site/git/google$ repo init -u https://android.go原创 2014-01-13 11:28:30 · 1610 阅读 · 0 评论 -
android 4.2 源码位置
1、音频1.1、硬件适配层1.2、C++层AudioFlinger: frameworks/av/services/audioflinger/AudioFlinger.cpp1.3、java 层2、视频2.1、硬件适配层2.2、C++层SurfaceFlinger: frameworks/native/services/surfaceflinger/原创 2014-03-20 14:50:27 · 1018 阅读 · 0 评论 -
adb互联及内网穿透
使用adb,可以与连在本机的手机等设备连接,给手机发送命令,这是常见的应用场景,但其实adb也能够连接与其他主机相连的设备。adb连接的原理是adb客户端程序先连接主机的adb服务程序(adb daemon),通过主机服务程序转发请求到手机设备的adb daemon,而adb客户端的命令行参数中有一个”-H“参数,使用了该参数,adb客户端不再与本机的adb服务程序连接,而是与指定主机的adb原创 2014-06-08 09:11:41 · 4320 阅读 · 0 评论 -
Android Surface 使用总结
1、Surface的本质1.1、BufferQueueAndroid通过BufferQueue管理图像图层数据的跨进程传输。BufferQueue的两端分别是图像数据的生产者和消费者。1.2、GraphicBufferGraphicBuffer(简称Buffer)是BufferQueue传递的数据,一个Buffer包含一帧图像,Buffer由gralloc分配和回收。根据需求Buf...原创 2019-01-24 11:39:13 · 7581 阅读 · 2 评论 -
SurfaceHolder/Surface 与 MediaPlayer 异步问题探讨
SurfaceHolder 在主线程通知 Surface 的创建、销毁、变化,一般此时将 Surface 设置给 MediaPlayer,这没有问题。本文讨论的场景是在另一个线程异步的给MediaPlayer设置Surface会出现什么问题,如果想用独立的状态机线程与 MediaPlayer 协作,这将是一个确实存在的问题。异步设置 Surface 存在 Surface失效问题。考虑S...原创 2019-01-24 12:24:37 · 621 阅读 · 0 评论 -
利用 leakcanary 构建离线的内存泄漏检测
需求分析LeakCanary是一个Java内存泄露检测工具。它能十分方便的检测出项目中的内存泄露,同时提供非常友好的通知提示。但是在实际运用中,LeakCanary只能够用在调试版本中,不能够在发布版本中进行泄露测试。LeakCanary集成了haha库,来分析内存dump文件,这个代码量还是蛮大的,会导致应用发布版本体积增大不少。 LeakCanary的泄漏界面很好,但是肯定不能向...原创 2019-01-28 13:54:04 · 469 阅读 · 0 评论 -
基础库 - 插件体系 - 插件内置so库直接加载
描述:Android6.0以上支持内置Native库,不需要解压部署到文件系统中。后续可以利用该机制节省空间。具体原理是本地库在APK中的位置是对齐到文件系统块的,并且没有压缩,可以直接映射APK中某个文件数据到内存页面。在集成到应用以及通过网络分发,插件APK是被压缩的,所以不影响应用体积和网络流量。zipalignReduce the APK sizeSource code[...原创 2019-04-21 09:41:39 · 323 阅读 · 0 评论 -
基础课 - 插件框架 - 没有权限 getIntentSender()
描述:07-20 15:45:50.360 14038 14038 E AndroidRuntime: FATAL EXCEPTION: main07-20 15:45:50.360 14038 14038 E AndroidRuntime: Process: com.pptv.wallpaperplayer.demo, PID: 1403807-20 15:45:50.360 14038...原创 2019-04-21 09:48:42 · 1436 阅读 · 0 评论 -
ExoPayer 研究、集成
参考: ExoPlayer HomeExoPlayer libraryHLS playback in ExoPlayerExoPlayer 2 - MediaSource compositionCustomizing ExoPlayer’s UI components 使用Android.mk文件导入Exoplayer包ExoPlayer浅析Google Exoplayer 之全...原创 2019-04-21 10:16:33 · 2096 阅读 · 0 评论 -
运行时资源覆盖(Runtime Resource Overlay)
参考: Android运行时资源替换-Runtime Resource OverlayAndroid Runtime Resource OverlayQuick Tip: Theme Android With the Runtime Resource Overlay FrameworkCustomizing Android Devices Using Runtime Resource O...原创 2019-04-21 10:25:30 · 723 阅读 · 0 评论 -
发布平台对接 nexus (maven)
1、上传工具2、对接Guide to deploying 3rd party JARs to remote repositoryApache > Maven > Plugins > Apache Maven Deploy Plugin > Usagehttps://stackoverflow.com/questions/37543120/how-to-manual...原创 2019-04-21 10:27:05 · 198 阅读 · 0 评论 -
播放框架 - 基于 OpenGL 的媒体播放
TextureView 播放 GL 渲染 OpenGL 渲染 TextureDisplay GPUImage 集成 OpenGL - 图像过渡滤镜 OpenGL - 渲染多个 Surface OpenGL - 图像美颜滤镜原创 2019-04-21 10:35:03 · 159 阅读 · 0 评论 -
三星播放器的小BUG
播放器通过HTTP请求数据,HTTP头部应该以两个“\r\n”结束,但是三星 GT-I9100G 手机的播放器用三个“\r\n”结束,当User-Agent是最后一个头域的时候,难道User-Agent的那个字符串里面多了一个“\r\n”提到三星播放器,不得不说,他的怪脾气还真多。就像现在这个HTTP请求MP4文件,他要一点点Range请求,前面一点后面一点,又不像并行多连接,不知道出于什么考原创 2012-08-23 16:43:25 · 1179 阅读 · 0 评论