Android已有的原生Camera框架中加入自己的API的实现方案。
版权声明:本文为CSDN博主(天才2012)原创文章。未经博主同意不得转载。
https://blog.csdn.net/gzzaigcn/article/details/25707389
在过去的2个月里,基本定制并评估完了项目所须要的基本需求,环绕着全志A31和Android4.2.2来实现。近期因为须要,在改动他的Camera的架构中。须要应用程序给HAL透传一个參数来控制底层图像处理算法的实现,即须要提供一个合理的API供APP的开发使用。
起初想到的,最简单有效的方法就是又一次定制SDK。但不断遇到的问题,使得终于切换了部分的思路。但核心没有发生变化。
Android系统的架构层次分明,在复杂的架构中往往理解以后会变得十分的简单。如今看来,过去2个多月的时间基本把Camera架构和SurfaceFlinger这两者有了主要的深入理解。不管是控制流还是数据流,基本都能够定位到源代码的位置。也对最低层的HAL进行了算法的加入。同一时候最核心的是完毕了对A31 Resize模块的合理调度。
方案1:
1.在Camera.java中加入一个新的API函数,供APP开发。
2.进行API的更新:make update-api;
3.对源代码进行SDK编译,产生新的android.jar。替换sdk。供eclipse下的APP开发
4. 手动安装编译后的APK。
问题:android4.2.2源代码制作SDK会有一个天然的Bug,解决方法例如以下:
cd frameworks/base
git revert 5f9922d7c3bce158e4c7a58929d4075e7c91e32e
但鉴于源代码仓库不是自己同步所得,故无法进行git操作。
眼下也不知道这个能否够彻底解决这个bug的所在。
方案2:
1.在Camera.java中加入一个新的API函数。供APP开发。
2. 进行make update-api的更新。
3.加入带有新的API到APP。并加入到/package/apps/下,仅仅保留/res,/src, AndroidManifest.xml文件,加入例如以下的Android.mk:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := A31Camera
LOCAL_PROGUARD_ENABLED := full
include $(BUILD_PACKAGE)
4.改动/build/target/product以下的sdk.mk函数
例如以下加入一行代码,使得自己的APP作为系统默认的APP应用:
PRODUCT_PACKAGES := \
Calculator \
DeskClock \
Email2 \
Exchange2 \
FusedLocation \
Gallery \
Music \
Mms \
OpenWnn \
libWnnEngDic \
libWnnJpnDic \
libwnndict \
Phone \
PinyinIME \
Protips \
SoftKeyboard \
SystemUI \
Launcher2 \
Development \
DevelopmentSettings \
DrmProvider \
Fallback \
Settings \
SdkSetup \
CustomLocale \
sqlite3 \
InputDevices \
LatinIME \
CertInstaller \
LiveWallpapersPicker \
ApiDemos \
GestureBuilder \
CubeLiveWallpapers \
QuickSearchBox \
WidgetPreview \
monkeyrunner \
guavalib \
jsr305lib \
jython \
jsilver \
librs_jni \
ConnectivityTest \
GpsLocationTest \
CalendarProvider \
Calendar \
SmokeTest \
SmokeTestApp \
rild \
LegacyCamera \
A31Camera
5.make -j8 生成新的system.img。也完毕了新的系统APP的定制。
以上两种方案。前者能够加快app的开发。后者能够完毕app直接定制到系统。在本项目中。后者的使用也带来了一定的便利性。
自己定制系统的优点在于,无处不在的源代码不会让你的开发以及想法不能继续下去,当然你也不能违反规则进行胡乱的改动。
一路走来,还是能发现阅读代码带来的优点的:能加快代码的再设计,以及业务流加入位置的定位以及优化等。
Android已有的原生Camera框架中加入自己的API的实现方案。的更多相关文章
- Struts2框架中使用Servlet的API示例
1. 在Action类中也可以获取到Servlet一些常用的API * 需求:提供JSP的表单页面的数据,在Action中使用Servlet的API接收到,然后保存到三个域对象中,最后再显示到JSP的 ...
- 在Struts2框架中使用Servlet的API
1. 在Action类中也可以获取到Servlet一些常用的API * 需求:提供JSP的表单页面的数据,在Action中使用Servlet的API接收到,然后保存到三个域对象中,最后再显示到JSP的 ...
- Android已上线应用开源分享中(第一季)
这是我上线的第一个android应用,在百度.腾讯.豌豆荚等平台测试通过,也有了部分用户,还是可以的啊,哈哈.现在分享给大家,当然,源码我也会分享. 1.软件是一个管理wifi的小工具 (1)查询.连 ...
- Android已上线应用开源分享中(第二季)
昨天和大家分享了我Android上线的第一个应用,大家还是挺支持的,很高兴,虽然作品没有那么高大上,但是很是有了一点小小的成就感,所以打算继续开源我上线的一些应用,和大家一起交流一下. 我这个作品是一 ...
- Pipelines - .NET中的新IO API指引(三) 边看边记
Pipelines - .NET中的新IO API指引 作者 marcgravell 原文 此系列前两篇网上已有的译文 Pipelines - .NET中的新IO API指引(一) Pipeline ...
- django框架实现restful风格的API开发
RESTful风格的要求:https://www.cnblogs.com/chichung/p/9933116.html 利用django原生的框架直接做RESTful的API开发是怎样的呢?感受一下 ...
- Android Multimedia框架总结(十四)Camera框架初识及自定义相机案例
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52738492 前言:国庆节告一段 ...
- 修改Android 4.2.2的原生Camera引出的java.lang.UnsatisfiedLinkError: Native method not found,及解决方法
修改Android 4.2.2的原生Camera应用,做一些定制,将Camera的包名从之前的 package com.android.* 修改成了com.zhao3546.*. 调整后,应用可以正常 ...
- android 原生camera——设置模块修改
, 此篇博客是记一次客户需求修改,从上周五到现在正好一周时间,期间的各种酸爽,就不说了,还是来看大家关注的技术问题吧. 首先看下以前效果和修改后的效果: 修改前:修改后: 不知道有没有看明白,我在简单 ...
随机推荐
- 『Scrapy』爬取斗鱼主播头像
分析目标 爬取的是斗鱼主播头像,示范使用的URL似乎是个移动接口(下文有提到),理由是网页主页属于动态页面,爬取难度陡升,当然爬取斗鱼主播头像这么恶趣味的事也不是我的兴趣...... 目标URL如下, ...
- ansible-playbook快速入门填坑
参考另外一篇文章 http://blog.51cto.com/weiweidefeng/1895261 when条件 参考http://blog.51cto.com/breezey/1757593 安 ...
- mysql导入导出数据过大命令
phpmyadmin 导入或者导出都是有限制的,当导入或者导出的数据会报错. 1.导入数据库 mysql -u root -p<备份文件的保存路径 eg: mysql -u root -p &l ...
- Linux文件与目录管理(二)
一.处理目录的常用命令 ls:列出目录 cd:切换目录 pwd:显示当前的目录 mkdir:创建一个新的目录 rmdir:删除一个空的目录 cp:复制文件或者目录 rm:移除文件或者目录 可以使用ma ...
- 对称点line
2 线 题⽬描述 有一天rax看到了男神,有时可爱美丽的她派ypq去把yyqx抓回来给rax欣赏,但ypq和yyqx间隔了一条线,她必须跳到yyqx以前待得点的对称点才有可能抓到yyqx给出⼀条直线, ...
- c中gets函数使用可能导致缓冲区溢出
头文件:#include <stdio.h> gets()函数用于从缓冲区中读取字符串,其原型如下: char *gets(char *string); gets()函数从流中读取字 ...
- 《程序员面试金典》习题解答(C/C++)
一.数据结构 1.数组与字符串 1.1 实现一个算法,确定一个字符串的所有字符是否全都不同.假使不允许使用额外的数据结构,又该如何处理? /* 假设字符集为ASCII字符串,那么字符串至多有256个 ...
- win10解除密码
- json添加数据
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- SQL Server 调优系列进阶篇 - 如何维护数据库索引
前言 上一篇我们研究了如何利用索引在数据库里面调优,简要的介绍了索引的原理,更重要的分析了如何选择索引以及索引的利弊项,有兴趣的可以点击查看. 本篇延续上一篇的内容,继续分析索引这块,侧重索引项的日常 ...