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直接定制到系统。在本项目中,后者的使用也带来了一定的便利性。

        自己定制系统的优点在于,无处不在的源代码不会让你的开发以及想法不能继续下去。当然你也不能违反规则进行胡乱的改动。一路走来,还是能发现阅读代码带来的优点的:能加快代码的再设计,以及业务流加入位置的定位以及优化等。
 

 

 

posted @ 2018-03-25 18:09  llguanli  阅读(215)  评论(0编辑  收藏  举报