原文: 在Android模擬器上安裝和卸載APK包 – xusaomaiss – JavaEye技術網站
玩過了一天Android模擬器,也寫了幾個小測試程序。突然有個問題出現,如果脫離Eclipse開發環境,如何能將APK包部署給模擬器呢?
研究了一下模擬器的內存文件系統,似乎沒什麼發現,是一個Linux內核。
於是到google問問老外們,終於知道了,吼吼。
C:\Documents and Settings\Administrator>cd D:\andriod\tools
C:\Documents and Settings\Administrator>d: D:\android\tools>adb install c:\NetScramble_1.1.apk |
回到Android模擬器的界面,我本來以為可以看到剛剛安裝的APK程序圖標,結果,卻根本沒有…後來研究了一下,發現這根APK包自身有關。使用 自己編寫的HelloAndroid安裝,圖標就可以顯示在桌面上,而NetScramble_1.1.apk安裝後卻顯示不出來。具體原因是來自於AndroidManifest.xml文件的內容。
<?xml version=”1.0″ encoding=”utf-8″?> <manifest xmlns:android=”http://schemas.android.com/apk/res/android” package=”net.xiashou.android”> <application android:icon=”@drawable/icon”> <activity android:name=”.HelloAndroid” android:label=”@string/app_name”> <intent-filter> <action android:name=”android.intent.action.MAIN” /> <category android:name=”android.intent.category.LAUNCHER” /> </intent-filter> </activity> </application> </manifest> |
xml文件中,紅色一行是表示這個apk屬於哪個歸類裡,如果不正確的填寫這個信息,Launcher將不會將其顯示在桌面上,因為它會認為這個應用部署 以自己的歸類。
那麼,是不是我們就無法執行缺失了category的apk了呢?
後來,在一個老外的blog上,查到了方法:在shell內使用am來加載android應用
usage: am [start|instrument] am start [-a <ACTION>] [-d <DATA_URI>] [-t <MIME_TYPE>] [-c <CATEGORY> [-c <CATEGORY>] …] [-e <EXTRA_KEY> <EXTRA_VALUE> [-e <EXTRA_KEY> <EXTRA_VALUE> …] [-n <COMPONENT>] [-D] [<URI>] am instrument [-e <ARG_NAME> <ARG_VALUE>] [-p <PROF_FILE>] [-w] <COMPONENT> |
比如啟動一個manifest為如下內容的apk
<?xml version=”1.0″ encoding=”utf-8″?> <manifest xmlns:android=”http://schemas.android.com/apk/res/android” package=”net.xiashou.android”> <application android:icon=”@drawable/icon”> <activity android:name=”.HelloAndroid” android:label=”@string/app_name”> <intent-filter> <action android:name=”android.intent.action.MAIN” /> <category android:name=”android.intent.category.LAUNCHER” /> </intent-filter> </activity> </application> </manifest> |
使用的指令為:
am start -n net.xiashou.android/net.xiashou.android.HelloAndroid |
還有一些很有用處的用法
直接啟動瀏覽器打開一個網址 # am start -a android .intent.action.VIEW -d http://www.xiashou.net 撥打電話 啟動google map直接定位在天津 |
am很可能將來成為第三方lancher的基礎。
【卸裝APK】
與安裝類似的,卸妝是利用adb執行一個卸妝指令:
D:\android\tools>adb shell rm data/app/NetScramble_1.1.apk |
這裡,也可以看出,Android系統是將第三方應用放在data/app目錄內的。
【一些思考】
因為模擬器內運行的是一個內存文件系統,也就是說,你安裝的apk文件,在模擬器被關閉後,也就不再存在了(它實際上是被安裝到內存裡)。所以,下次啟動 模擬器,依然需要再次安裝APK。然後,實際測試結果並非如此…於是打開AndroidSDK目錄發現,tools\lib\images的文件都被 更新了。原來Android模擬器是將他的內存系統實時dump到img中保存下來的。
還有一個特別有意義的發現,是從adb shell rm而來的思考。rm本身是linux的一個文件刪除指令,加上前面的shell關鍵字,會不會adb shell直接就能打開一個linux終端呢?實測結果果然如此!不過,Android的linux shell顯然做了很多精簡,大量的linux常用指令都不支持。
更多關於adb詳細的使用,可以使用adb help指令來查看。
轉自:http://blog.sina.com.cn/s/blog_4b07398d010095px.html
在這裡小問一下,我想把android SDK包中自帶的sample代碼加到eclipse有沒有什麼好辦法,我使用eclipse的import好像不行,如何有誰會的請留言。本人打算看 snake遊戲的代碼。
把android SDK包中自帶的sample代碼加到eclipse的方法可以用:
New Project -> 在”New Android Project”界面選擇:Create Project from existing source, 然後Location那地方選擇sample的項目文件夾,就可以導入了。
adb install的时候device not found怎么办啊,请教