我已經將 MirBSD Korn Shell,簡稱 mksh,加入到 Android-x86 的 source tree 當中。版本是 R39c。和往常一樣,請利用 repo sync 取得並編譯。
Mksh 是從 Ksh 衍生而來的,主要用在 MirBSD 當中。其採用的授權是 BSD style,因此和 Android 的 Apache 授權相容。目前 mksh 的 patches 已經被提交到 Gerrit code review 審核當中。這是由 mksh 開發者 Thorsten Glaser 所提供。
我們用 mksh 來取代原本 Android 功能很弱的 /system/bin/sh。它擁有現代 shell 的許多特色,包括了指令歷史記錄(可用上下鍵選擇)、Tab 補齊(按 Tab 鍵可補齊指令、檔名等)、歷史搜尋(按 Ctrl-R)等。它也內建了 test 指令(也就是 if test … 這樣的指令可以執行了)。細節請參考 mksh 的網站: https://www.mirbsd.org/mksh.htm。
上篇介紹用 Android SDK 和 NDK 來編譯含 JNI 的 Android 應用程式。但若是已有 Android (或 Android-x86)的 source tree,可能就不會再想安裝 SDK 和 NDK。因為 AOSP tree 本身就包含完整的 SDK 和 NDK。那麼是不是可以將含有 native libraries 的應用程式,加入到 AOSP 的 build system 中編譯? 這麼做還有一個更重要的理由,就是把你的應用程式和 AOSP 的源碼結合在一起,用單一步驟就可以完成所有的編譯。這樣有助於維護單一而自我包含(self-contained)的源碼。
答案當然是肯定的。經過一番嘗試後,發現只要稍微修改一下應用程式的 Android.mk 就行。具體的做法如下:
首先,將應用程式的目錄搬到 AOSP tree 的 packages/apps/ 目錄下。例如 packages/apps/hello。
再來,建立 packages/apps/hello/Android.mk,內容如下: Read more »
一般要建立 Android 的應用程式使用 Eclipse + ADT 最為方便。不過若是像我一樣慣用 command line 的人,可能會希望直接用指令完成。這可利用 Android SDK 和 NDK 辦到。
首先,用 SDK 的 android 指令建立一個 project:
$ android create project -t android-4 -k app.hello -a HelloActivity -p apps/hello/project
|
其中的參數:
Read more »
藉著 eclair-x86 branch 的釋出,順便 review 了一下 NDK for x86 的支援。原本的做法,要編譯給 x86 的 shared libraries 時需要指定 TARGET_PRODUCT=eeepc。但在加入多 x86 平台支援之後,「eeepc」其實已經不代表通用的 x86 平台。因此這個用法有商榷的必要。
另外 AOSP (以及 Android-x86)的 source tree 雖含有 NDK 和 toolchains,但 NDK 卻無法直接使用 AOSP 的 toolchains。還要叫使用者自行下載,真是多此一舉。
經過我的修改後,讓 development/ndk 可以直接的使用 prebuilt 中的 toolchains。同時,預設的 toolchains 就是 x86。因此不需要再指定 TARGET_PRODUCT=eeepc 了。
Read more »
一個多禮拜前 Google Android 開發者在 Android-platform 討論群上宣佈釋出 Android 2.1 版的消息。不過並不是放在 master branch 而是在 eclair branch。沒錯,2.1 版仍是叫做 eclair,因此只能算是個小改版吧?
經過一番努力,我們已成功將 Android-x86 更新到 eclair 2.1 branch 上。遵循 Google 的慣例,這個分支就叫做 eclair-x86 branch 吧。取得的方法和以前差不多:
$ repo init -u git://git.android-x86.org/manifest.git -b eclair-x86
$ repo sync
|
也可從 SourceForge 上的 mirror 下載。
不過 2.1 版新增的許多 3D 效果,像 Gallery3D,在 x86 版本上不是跑不動就是會 crash。又有許多苦功要做了…