版权声明:本文为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的实现方案。的更多相关文章

  1. Struts2框架中使用Servlet的API示例

    1. 在Action类中也可以获取到Servlet一些常用的API * 需求:提供JSP的表单页面的数据,在Action中使用Servlet的API接收到,然后保存到三个域对象中,最后再显示到JSP的 ...

  2. 在Struts2框架中使用Servlet的API

    1. 在Action类中也可以获取到Servlet一些常用的API * 需求:提供JSP的表单页面的数据,在Action中使用Servlet的API接收到,然后保存到三个域对象中,最后再显示到JSP的 ...

  3. Android已上线应用开源分享中(第一季)

    这是我上线的第一个android应用,在百度.腾讯.豌豆荚等平台测试通过,也有了部分用户,还是可以的啊,哈哈.现在分享给大家,当然,源码我也会分享. 1.软件是一个管理wifi的小工具 (1)查询.连 ...

  4. Android已上线应用开源分享中(第二季)

    昨天和大家分享了我Android上线的第一个应用,大家还是挺支持的,很高兴,虽然作品没有那么高大上,但是很是有了一点小小的成就感,所以打算继续开源我上线的一些应用,和大家一起交流一下. 我这个作品是一 ...

  5. Pipelines - .NET中的新IO API指引(三) 边看边记

    Pipelines - .NET中的新IO API指引 作者 marcgravell  原文 此系列前两篇网上已有的译文 Pipelines - .NET中的新IO API指引(一) Pipeline ...

  6. django框架实现restful风格的API开发

    RESTful风格的要求:https://www.cnblogs.com/chichung/p/9933116.html 利用django原生的框架直接做RESTful的API开发是怎样的呢?感受一下 ...

  7. Android Multimedia框架总结(十四)Camera框架初识及自定义相机案例

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52738492 前言:国庆节告一段 ...

  8. 修改Android 4.2.2的原生Camera引出的java.lang.UnsatisfiedLinkError: Native method not found,及解决方法

    修改Android 4.2.2的原生Camera应用,做一些定制,将Camera的包名从之前的 package com.android.* 修改成了com.zhao3546.*. 调整后,应用可以正常 ...

  9. android 原生camera——设置模块修改

    , 此篇博客是记一次客户需求修改,从上周五到现在正好一周时间,期间的各种酸爽,就不说了,还是来看大家关注的技术问题吧. 首先看下以前效果和修改后的效果: 修改前:修改后: 不知道有没有看明白,我在简单 ...

随机推荐

  1. Java基础-String和StringBuilder类型(11)

    String类概述 字符串是由多个字符组成的一串数据字符串可以看成是字符数组 构造方法 public String(String original)public String(char[] value ...

  2. 万恶的deferred_segment_creation(延迟块分配)

    11gR2开始,空表是不分配segment的.由于没有分配 segment, EXP默认不能导出空表,user_objects有该对象但是 user_segment没有该对象

  3. uinex 常用命令

    删除文件夹实例:rm -rf /var/log/httpd/access将会删除/var/log/httpd/access目录以及其下所有文件.文件夹 删除文件使用实例:rm -f /var/log/ ...

  4. sql 2005 代码导入excel数据

     select * into bm from OpenDataSource( 'Microsoft.ACE.OLEDB.12.0', 'Data Source="G:\bm.xls" ...

  5. js 刷新页面

    Javascript刷新页面的几种方法:1 history.go(0)2 window.location.reload() window.location.reload(true) 3 locatio ...

  6. iOS UI-QQ聊天布局

    一.Model BWMessage.h #import <Foundation/Foundation.h> typedef enum{ BWMessageMe = ,//表示自己 BWMe ...

  7. 使用SAE(VAE)检测信用卡欺诈——感觉误报率还是比较高啊 70%+误报 蛋疼

    from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScale ...

  8. learngin uboot design parameter recovery mechanism

    pseudocode: if( getenv(“uboot_env_init”)  !=  NULL){ if(uboot_env_init  !=  HAVE_INIT){ Set uboot_en ...

  9. Openwrt Udev Configure(3)

    1      Scope of Document This document describes how to write udev script, when enum usb device mayb ...

  10. sql 判断字符串中是否含有数字和字母

    判断是否含有字母 select PATINDEX('%[A-Za-z]%', ‘ads23432’)=0 (如果存在字母,结果<>1) 判断是否含有数字 PATINDEX('%[0-9]% ...