Android模擬器運行之后,/system目錄即為只讀屬性。如果想把自己的程序傳到該目錄下運行,就會發(fā)現無法成功。當然,使用adb remount命令可以暫時去除它的只讀限制,可以向里面?zhèn)魑募,但是一旦重啟Android模擬器,再次使用adb shell進入模擬器終端時就會發(fā)現,自己傳進去的文件在重啟之后被清除掉了。
當然,你可以把文件傳到/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源碼目錄下,然后執(zhí)行make,如果你之前已經make過了,那么這個過程會很快,幾分鐘吧。因為和上一次make相比,源碼改動很少,只是加了1個文件夾和2個文件而已。如果你這是第一次make,那么會比較慢,或許大約要1-2個小時,速度應該也和機器配置有關。
make成功之后,運行emulator模擬器,用adb shell進入模擬器終端,cd /system/bin,就可以找到你的程序了(注意名字是myhard,不是hard,也不是my_hardware,這里產生的程序名字由上面程序中紅色字體的那一行控制)。而且再次啟動之后也不會丟失。