本人部落格原文:http://hubingforever.blog.163.com/blog/static/17104057920126166411775/
在Android中啟動JAVA程式其實有很多種方式,現總結如下
一、在Android應用程式中發送Intent啟動Android應用程式這個方式最簡單,最常用。在此不在累述。關於Intent的更多內容請閱讀《Intent技術簡介》二、在
shell控制台通過
am命令發送Intent來啟動Android應用程式在Android的shell控制台通過am命令發送Intent來啟動Android應用程式
關於此的詳細內容請參考《Android命令am詳解》
三、在
shell控制台直接通過
davlikvm命令啟動一個JAVA程式。該方式有個天生的缺點,即在其中,很多Android的JNI無法調用。因為Android的很多JNI其實是需要手動註冊的。關於請參考《基本Dalvik VM調用》
四、在
shell
控制台直接通過運行
app_process程式啟動一個JAVA程式在app_process程式中,他會對Android的JNI進行手動註冊的,能很好的使用Android的API,因此通過運行app_process程式啟動一個JAVA程式,是一個比較完美的方式。app_process程式是一個C程式,它的源碼位於frameworks\base\cmds\app_process。關於它的使用請參考《Android命令am詳解》以及shell指令碼frameworks\base\cmds\am\am和frameworks\base\cmds\pm\pmam指令檔如下:
# Script to start "am" on the device, which has a very rudimentary# shell.#base=/systemexport CLASSPATH=$base/framework/am.jarexec app_process $base/bin com.android.commands.am.Am "$@"
pm指令檔如下:
# Script to start "pm" on the device, which has a very rudimentary# shell.#base=/systemexport CLASSPATH=$base/framework/pm.jarexec app_process $base/bin com.android.commands.pm.Pm "$@"
CLASSPATH指定了你的程式的位置,com.android.commands.pm.Pm則說明了程式的入口為com.android.commands.pm.Pm,即入口函數main()所在的類,"$@"就是傳遞給main()函數的參數,只是這裡"$@"本身又是個shell傳入的參數而已
需要注意的是CLASSPATH中的檔案必須是dalvik檔案格式的,關於此的轉換請參考《基本Dalvik
VM調用》當然CLASSPATH中的檔案可以是apk檔案,只是你的apk中至少應該有個擁有main()入口函數的類。