Android模擬器運行之後,/system目錄即為唯讀屬性。如果想把自己的程式傳到該目錄下運行,就會發現無法成功。當然,使用adb remount命令可以暫時去除它的唯讀限制,可以向裡面傳檔案,但是一旦重啟Android模擬器,再次使用adb shell進入模擬器終端時就會發現,自己傳進去的檔案在重啟之後被清除掉了。
當然,你可以把檔案傳到/data檔案夾下,這個檔案夾不用remount就可寫,而且重啟模擬器之後自己的檔案也不會被清空。但是如果我想做一個較為底層的程式,或者開機啟動的程式,每次開機在/data下啟動總是顯得怪怪的。最好能讓自己編寫的程式也能享受到Android內建的那些程式的地位,每次運行在system/bin目錄下。這可以通過把自己的程式碼加在Android源碼中,然後重新make的方法實現。
首先根據你工程的性質,在Android源碼的相應位置建立一個檔案夾。比如我的這個程式如果和硬體有關的話,可以在hardware下建立一個叫做my_hardware的檔案夾,然後把自己的程式源碼放在裡面,比如叫hard.c。
再給這個程式寫一個makefile檔案,好讓make的時候可以自動找到你的程式並對它進行編譯。起名字叫做Android.mk,這個名字不能隨便起,否則make不認識。把這個Android.mk和hard.c都放在my_hardware下面。
# Android.mk檔案內容舉例
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
hard.c
LOCAL_PRELINK_MODULE := false
LOCAL_MODULE:= myhard
include $(BUILD_EXECUTABLE)
做好這些之後,回到總的Android源碼目錄下,然後執行make,如果你之前已經make過了,那麼這個過程會很快,幾分鐘吧。因為和上一次make相比,源碼改動很少,只是加了1個檔案夾和2個檔案而已。如果你這是第一次make,那麼會比較慢,或許大約要1-2個小時,速度應該也和機器配置有關。
make成功之後,運行emulator模擬器,用adb shell進入模擬器終端,cd /system/bin,就可以找到你的程式了(注意名字是myhard,不是hard,也不是my_hardware,這裡產生的程式名字由上面程式中紅色字型的那一行控制)。而且再次啟動之後也不會丟失。
本文轉自:http://hi.baidu.com/mcu99/blog/item/954a511085280509203f2e3a.html