Android已有的原生Camera框架中添加自己的API的实现方案。
2014-05-13 14:59
591 查看
在过去的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直接定制到系统。在本项目中,后者的使用也带来了一定的便利性。
自己定制系统的好处在于,无处不在的源码不会让你的开发以及想法不能继续下去,当然你也不能违反规定进行胡乱的修改。一路走来,还是能发现阅读代码带来的好处的:能加快代码的再设计,以及业务流添加位置的定位以及优化等。
起初想到的,最简单有效的方法就是重新定制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 4.0 ProGuard 代码混淆
- Android开发:setAlpha()方法和常用RGB颜色表----颜色, r g b分量数值(int), 16进制表示 一一对应
- android软件更新功能简易实现(未添加版本比较)
- Android应用开发小知识点
- android Service
- android4.0+版本修改状态栏透明的调试
- Android反汇编教程
- Android string.xml 显示特殊符号
- android 调用系统解锁方法
- android开源项目之OTTO事件总线(二)官方demo解说
- 常见android中的style
- Android中文API(143) —— CountDownTimer
- android ADB命令的使用
- android 唤醒和点亮屏幕
- 系统去掉 Android 4.4.2 的StatusBar和NavigationBar
- android 常用控件 (DatePicker) (TimePicker)
- Android adb 唤醒屏幕 点亮屏幕
- Android 图片加载问题
- android-support关联源码
- android开源项目之OTTO事件总线(一)