Android在shell中提供了am命令來發送Intent,它的源碼為位於frameworks/base/cmds/am.它本身是用JAVA代碼來實現的。執行am命令其實是通過運行shell指令碼frameworks/base/cmds/am/am,然後在該指令碼中運行app_process命令來啟動am這個java程式的。frameworks/base/cmds/am/am指令檔如下:
# 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 "$@"
android 運行java main
平常都是用java寫activity之類的東西,都看不到程式的入口main,android 系統是dalvik虛擬機器,只是把java class 合成了一個檔案,把位元組碼轉成了dalvik啟動並執行東西,所以dalvik可以運行沒有四個組件的代碼吧,今天 試了一個 可以
下面來說下:
1.先來個java main
Java代碼
- package com.aspire.test.dex;
-
- import android.os.Build;
- import android.os.Process;
- import android.util.Log;
-
- public class Main {
-
- private static final String TAG = "Main";
-
- /**
- * @param args
- */
- public static void main(String[] args) {
-
- do {
- Log.d(TAG, "start main");
- final String version = Build.VERSION.SDK;
- Log.d(TAG, "the product sdk version:" + version);
- Log.d(TAG, "time:" + System.currentTimeMillis());
- Log.d(TAG, "pid:" + Process.myPid());
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- } while (true);
-
- }
- }
建立的是java工程哦 ,把sdk下的android.jar 引入進來
2.編譯java到class
在eclipse bin 下面有編譯好的class
3.把class 轉成dex
用cmd 切換到bin目錄下
工具是$sdk\platform-tools\dx.bat
這裡輸入命令de --dex --output={輸出dex到哪個檔案} class 所在編譯的目錄 這是bin。
轉化完成就有一個classes.dex檔案
把dex檔案像jar一樣打包
4.寫linux shell 指令碼
export LD_LIBRARY_PATH=/data/local/tmp/:$LD_LIBRARY_PATH
export CLASSPATH=/data/local/tmp/testdex.jar
exec app_process . com.aspire.test.dex.Main
5.把testdex.jar 指令檔push 到手機的/data/local/tmp目錄裡
最後執行 ./指令碼名 沒錯誤 就運行成功了
下面資源我用ant build的
- TestDex.zip (83 KB)
- 下載次數: 4