Android已有的原生Camera框架中添加自己的API的实现方案。

    在过去的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的实现方案。)