为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

Android 移植技术

2012-04-14 32页 pdf 1MB 35阅读

用户头像

is_815621

暂无简介

举报
Android 移植技术 Android 移植技術移植技術 Android Porting Highlights Text 陳俊宏(Jollen Chen) Asia-Pacific 1st Android Technology Conference May 15 16 Beijing Shanghai ChinaMay 15-16, Beijing-Shanghai, China • Android Background • Android Porting Highlightsg g g Android 里程碑 System Im...
Android 移植技术
Android 移植技術移植技術 Android Porting Highlights Text 陳俊宏(Jollen Chen) Asia-Pacific 1st Android Technology Conference May 15 16 Beijing Shanghai ChinaMay 15-16, Beijing-Shanghai, China • Android Background • Android Porting Highlightsg g g Android 里程碑 System Image API Level Release d o d 里程碑 y g Android 1.5 3 2009.4.27 Android 1.1 2 2009.2.10 Android 1.0 1 2008.9.23 2007.11.5: Android 首度現身 2007.11.12: Adnroid SDK (early look version)開放下載 2008 1 3 Ad id D l Ch ll 比賽開始2008.1.3: Adnroid Developer Challenge 比賽開始 2008.2.13: Android SDK m5-rc15 釋出 2008.5.12: Top 50 Android Application 公佈 DevicesDevices misc... Netbook x86 Phone ARMv4/v5 Cupcake 重要的新功能 MMS夾檔 W bVi 開始支援 T h Cupca e 重要的新功能 WebView 開始支援 Touch events WebView 支援 SquirrelFish (JavaScript engine) 加入了 IME加入了 IME Basic x86 support SIM Application Toolkit 1.0SIM Application Toolkit 1.0 ... Android porting 社群 Android / x86 的移植d o d / 86 的移植 android git kernel organdroid.git.kernel.org 1. Cupcake 正式加入 x86 ports 2 於 / repo/manifest xml 加入2. 於./.repo/manifest.xml 加入 eee_701 platform 取得完整 x86 ports Android / armv4 的移植d o d / a 的移植 git koolu orggit.koolu.org 主要的 4 移植可由 K l 取得主要的 armv4 移植可由 Koolu 取得 支援 s3c2410 / s3c244x 相容於 Neo FreeRunner Android x86 port (target product = EeePC 701) 1. Get Google Android $ repo init -u git://android.git.kernel.org/platform/manifest.git -b cupcake 701) $ repo sync 2. Manifest file. ... / if t... 3. Get EeePC platform. $ repo s nc$ repo sync 4. Build Android image. $ TARGET ARCH=x86 TARGET PRODUCT=eee 701$ TARGET_ARCH=x86 TARGET_PRODUCT=eee_701 DISABLE_DEXPREOPT=true make -j2 installer_img 5 Create USB boot stick5. Create USB boot stick. Use make-live script. https://review.source.android.com/Gerrit#change,6475 Build EeePC 701 Product Tips # Google API issueissue $(call inherit-product, $(SRC_TARGET_DIR)/product/generic.mk)PRODUCT_NAME := eee_701PRODUCT_DEVICE := eee_701PRODUCT_POLICY := O C O O S \android.policy_midPRODUCT_PROPERTY_OVERRIDES += \ ro.com.android.dataroaming=true Cupcake 將 Google APIs 放到 add-onsCupcake 將 Google APIs 放到 add ons Build EeePC 701 Product Tips # e2fsprogs issueissue external/e2fsprogs/Android.mk: --- a/Android.mk +++ b/Android mk+++ b/Android.mk @@ -1,3 +1,3 @@ ifneq ($(TARGET_SIMULATOR),true)-# include $(call all-subdir- makefiles)makefiles) + include $(call all-subdir-makefiles)endif $ mkdir koolu-android $ cd koolu-android $ repo init u git://git koolu org/freerunner/platform/manifest git b koolu 1 0$$ repo init -u git://git.koolu.org/freerunner/platform/manifest.git -b koolu-1.0$ repo sync • Android Background • Android Porting Highlightsg g g Android 移植重要項目d o d 移植重要項目 Build system (toolchain). Dalvik::JNI Dalvik::Interpreter Bionico c System call Android BuildAndroid Build System G O C GSGLOBAL CFLAGS $(combo_target)GLOBAL_CFLAGS += \ - march=armv5te -mtune=xscale \ -msoft-float -fpic $(combo_target)GLOBAL_CFLAGS += \ - march=armv5te -mtune=xscale \ -msoft-float -fpic \ -mthumb-interwork \ -ffunction- sections \ -funwind-tables \ -fstack- protector \ -fno-short-enums \ - \ -mthumb-interwork \ -ffunction- sections \ -funwind-tables \ -fstack- protector \ -fno-short-enums \ -p D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ \ - D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ \ include $(call select android config h linux arm) p D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ \ - D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ \ include $(call select android config h linux arm)-include $(call select-android-config-h,linux-arm)-include $(call select-android-config-h,linux-arm) G O C GS fGLOBAL CFLAGS for ARMv4 $(combo_target)GLOBAL_CFLAGS += \ - march=armv4t -mcpu=arm920t -mtune=xscale \ - $(combo_target)GLOBAL_CFLAGS += \ - march=armv4t -mcpu=arm920t -mtune=xscale \ - msoft-float -fpic \ -mthumb-interwork \ -ffunction-sections \ -funwind-tables \ -fstack-protector \ -fno-short-enums \ msoft-float -fpic \ -mthumb-interwork \ -ffunction-sections \ -funwind-tables \ -fstack-protector \ -fno-short-enums \p -D__ARM_ARCH_4__ -D__ARM_ARCH_4T__ \ - D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ \ include $(call select android config h linux arm) p -D__ARM_ARCH_4__ -D__ARM_ARCH_4T__ \ - D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ \ include $(call select android config h linux arm)-include $(call select-android-config-h,linux-arm)-include $(call select-android-config-h,linux-arm) JNI Porting DalvikDalvik Interpreter Bionic Small and custom C library for the Android platform. A i l t f BSD C libA mainly port of BSD C library. Its own small implementation of pthreads based on Linux futexesfutexes. Support for x86, ARM and ARM thumb. Bionic Bionic::libc Android Generated Kernel Header bionic/libc/kernel/ 並非標準的 kernel header files Android 的 kernel header 是利用工具由 Linux kernel header 所 產生的 目的是只保留使用到的常數、資料結構與巨集 給 使用給 userspace 使用 External Library Android 所採用的 library(shared library) y Android 所採用的 library(shared library) 有些 library 的實作使用到 assembly 需再花工夫 例如 opencore 的實即為一例 / l d id/ l/ $ fi d / "* "/ l d id/ l/ $ fi d / "* "~/google-android/external/opencore$ find ./ -name "*.s" - print./codecs_v2/audio/mp3/dec/src/asm/pvmp3_polyphase_filter_window_gcc.s./codecs_ v2/audio/mp3/dec/src/asm/pvmp3_mdct_18.s./codecs_v2/audio/mp3/dec/src/asm/pvmp3_ dct_9.s./codecs_v2/audio/mp3/dec/src/asm/pvmp3_dct_9_gcc.s./codecs_v2/audio/mp3/de ~/google-android/external/opencore$ find ./ -name "*.s" - print./codecs_v2/audio/mp3/dec/src/asm/pvmp3_polyphase_filter_window_gcc.s./codecs_ v2/audio/mp3/dec/src/asm/pvmp3_mdct_18.s./codecs_v2/audio/mp3/dec/src/asm/pvmp3_ dct_9.s./codecs_v2/audio/mp3/dec/src/asm/pvmp3_dct_9_gcc.s./codecs_v2/audio/mp3/deg c/src/asm/pvmp3_mdct_18_gcc.s./codecs_v2/audio/mp3/dec/src/asm/pvmp3_polyphase_f ilter_window.s./codecs_v2/audio/mp3/dec/src/asm/pvmp3_dct_16_gcc.s g c/src/asm/pvmp3_mdct_18_gcc.s./codecs_v2/audio/mp3/dec/src/asm/pvmp3_polyphase_f ilter_window.s./codecs_v2/audio/mp3/dec/src/asm/pvmp3_dct_16_gcc.s sonivox & OpenSSLp ./sonivox/arm-hybrid-22k/lib_src/ARM-E_filter_gnu.s./sonivox/arm-hybrid-22k/lib_src/ARM- E_mastergain_gnu.s./sonivox/arm-hybrid-22k/lib_src/ARM- E_voice_gain_gnu.s./sonivox/arm-hybrid-22k/lib_src/ARM- E interpolate noloop gnu.s./sonivox/arm-hybrid-22k/lib src/ARM- ./sonivox/arm-hybrid-22k/lib_src/ARM-E_filter_gnu.s./sonivox/arm-hybrid-22k/lib_src/ARM- E_mastergain_gnu.s./sonivox/arm-hybrid-22k/lib_src/ARM- E_voice_gain_gnu.s./sonivox/arm-hybrid-22k/lib_src/ARM- E interpolate noloop gnu.s./sonivox/arm-hybrid-22k/lib src/ARM-E_interpolate_noloop_gnu.s./sonivox/arm hybrid 22k/lib_src/ARM E_interpolate_loop_gnu.s./sonivox/arm-wt-22k/lib_src/ARM-E_filter_gnu.s./sonivox/arm- wt-22k/lib_src/ARM-E_mastergain_gnu.s./sonivox/arm-wt-22k/lib_src/ARM- E_voice_gain_gnu.s./sonivox/arm-wt-22k/lib_src/ARM-E_interpolate_loop_gnu.s /openssl/crypto/bn/asm/pa risc2W s /openssl/crypto/bn/asm/pa E_interpolate_noloop_gnu.s./sonivox/arm hybrid 22k/lib_src/ARM E_interpolate_loop_gnu.s./sonivox/arm-wt-22k/lib_src/ARM-E_filter_gnu.s./sonivox/arm- wt-22k/lib_src/ARM-E_mastergain_gnu.s./sonivox/arm-wt-22k/lib_src/ARM- E_voice_gain_gnu.s./sonivox/arm-wt-22k/lib_src/ARM-E_interpolate_loop_gnu.s /openssl/crypto/bn/asm/pa risc2W s /openssl/crypto/bn/asm/pa./openssl/crypto/bn/asm/pa-risc2W.s./openssl/crypto/bn/asm/pa- risc2.s./openssl/crypto/bn/asm/mips3.s./openssl/crypto/0.9.9-dev/aes/aes- armv4.s./openssl/crypto/0.9.9-dev/bn/armv4-mont.s./openssl/crypto/0.9.9-dev/sha/sha256- armv4.s./openssl/crypto/0.9.9-dev/sha/sha512-armv4.s./openssl/crypto/0.9.9- d / h / h 1 4 l ./openssl/crypto/bn/asm/pa-risc2W.s./openssl/crypto/bn/asm/pa- risc2.s./openssl/crypto/bn/asm/mips3.s./openssl/crypto/0.9.9-dev/aes/aes- armv4.s./openssl/crypto/0.9.9-dev/bn/armv4-mont.s./openssl/crypto/0.9.9-dev/sha/sha256- armv4.s./openssl/crypto/0.9.9-dev/sha/sha512-armv4.s./openssl/crypto/0.9.9- d / h / h 1 4 ldev/sha/sha1-armv4-large.sdev/sha/sha1-armv4-large.s Android & Kernel 的考量項目的考量項目 SurfaceHolder 的 type 為 SURFACE_TYPE_GPU 時、須考量 GPU(Graphics Processing Unit)的支援 SurfaceHolder 的 type 為 SURFACE_TYPE_HARDWARE 時、 須考量 DMA 與硬體加速的支援 目的是只保留使用到的常數、資料結構與巨集 給 userspace 使用 Android 多媒體支援的考量多媒體支援的考量 Surface Manager 與 Media Framework SurfaceHolder 的 type 為 SURFACE TYPE GPU 時 須考量SurfaceHolder 的 type 為 SURFACE_TYPE_GPU 時、須考量 GPU(Graphics Processing Unit)的支援 SurfaceHolder 的 type 為 SURFACE_TYPE_HARDWARE 時、 須考量 DMA 與硬體加速的支援 MediaPlayer 使用 OpenCore 程式庫 Surface Managerg private SurfaceView mPreview; private SurfaceHolder holder; private SurfaceView mPreview; private SurfaceHolder holder; public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.mediaplayer_2); mPreview = (SurfaceView) findViewById(R id surface); public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.mediaplayer_2); mPreview = (SurfaceView) findViewById(R id surface);mPreview = (SurfaceView) findViewById(R.id.surface); holder = mPreview.getHolder(); holder.addCallback(this); holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } mPreview = (SurfaceView) findViewById(R.id.surface); holder = mPreview.getHolder(); holder.addCallback(this); holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); }}} Surface Manager 部份要考量底層硬體Surface Manager 部份要考量底層硬體 Media Framework private MediaPlayer mMediaPlayer; public void surfaceCreated(SurfaceHolder holder) { private MediaPlayer mMediaPlayer; public void surfaceCreated(SurfaceHolder holder) {public void surfaceCreated(SurfaceHolder holder) { mMediaPlayer = new MediaPlayer(); mMediaPlayer.setDataSource(path); mMediaPlayer.setDisplay(holder); public void surfaceCreated(SurfaceHolder holder) { mMediaPlayer = new MediaPlayer(); mMediaPlayer.setDataSource(path); mMediaPlayer.setDisplay(holder); mMediaPlayer.prepare(); mMediaPlayer.setOnBufferingUpdateListener(this); mMediaPlayer.setOnCompletionListener(this); mMediaPlayer.setOnPreparedListener(this); mMediaPlayer.prepare(); mMediaPlayer.setOnBufferingUpdateListener(this); mMediaPlayer.setOnCompletionListener(this); mMediaPlayer.setOnPreparedListener(this);y p ( ); mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); } y p ( ); mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); } Media Framework 考量 OpenCore 的移植工作Media Framework 考量 OpenCore 的移植工作 Android Porting Map Text 還有哪些其他的移植工作?Q&A 陳俊宏(Jollen Chen)
/
本文档为【Android 移植技术】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索