您的位置:首页 > 移动开发 > Android开发

在Android模拟器上安装和卸载APK包

2011-12-12 16:27 225 查看
摘自:http://xusaomaiss.iteye.com/blog/375794

【安装APK】

安装APK当然首先是要有模拟器,和要安装的APK包,这个不多废话了。直接切入正题,在模拟器安装APK。
首先,将模拟器执行起来,直到正式进入系统。
接下来,打开一个cmd窗口,路径切换到模拟器目录下的tools目录。
输入:adb install 你要安装的apk文件的路径。
如果看到一行类显示传输速度的文字,那说明安装成功了。

C:\Documents and Settings\Administrator>cdD:\andriod\tools

C:\Documents andSettings\Administrator>d:

D:\android\tools>adb installc:\NetScramble_1.1.apk

100 KB/s (0 bytes in 164464.001s)

回到Android模拟器的界面,我本来以为可以看到刚刚安装的APK程序图标,结果,却根本没有...后来研究了一下,发现这根APK包自身有关。使用自己编写的HelloAndroid安装,图标就可以显示在桌面上,而NetScramble_1.1.apk安装后却显示不出来。具体原因是来自于AndroidManifest.xml文件的内容。

<?xml version="1.0"encoding="utf-8"?>

<manifestxmlns: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" />

<categoryandroid: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"?>

<manifestxmlns: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 -nnet.xiashou.android/net.xiashou.android.HelloAndroid
还有一些很有用处的用法

直接启动浏览器打开一个网址

# amstart -aandroid.intent.action.VIEW -dhttp://www.xiashou.net

拨打电话

# amstart -aandroid.intent.action.CALL -dtel:10086

启动google map直接定位在天津

# amstart -aandroid.intent.action.VIEWgeo:0,0?q=tianjin

am很可能将来成为第三方lancher的基础。

【卸装APK】

与安装类似的,卸妆是利用adb执行一个卸妆指令:

D:\android\tools>adb shell rmdata/app/NetScramble_1.1.apk
这里,也可以看出,Android系统是将第三方应用放在data/app目录内的。

【一些思考】

因为模拟器内运行的是一个内存文件系统,也就是说,你安装的apk文件,在模拟器被关闭后,也就不再存在了(它实际上是被安装到内存里)。所以,下次启动模拟器,依然需要再次安装APK。然后,实际测试结果并非如此...于是打开AndroidSDK目录发现,tools\lib\images的文件都被更新了。原来Android模拟器是将他的内存系统实时dump到img中保存下来的。

还有一个特别有意义的发现,是从adb shellrm而来的思考。rm本身是linux的一个文件删除指令,加上前面的shell关键字,会不会adbshell直接就能打开一个linux终端呢?实测结果果然如此!不过,Android的linuxshell显然做了很多精简,大量的linux常用指令都不支持。

更多关于adb详细的使用,可以使用adb help指令来查看。

转自:http://blog.sina.com.cn/s/blog_4b07398d010095px.html

在这里小问一下,我想把android SDK包中自带的sample代码加到eclipse有没有什么好办法,我使用eclipse的import好像不行,如何有谁会的请留言。本人打算看snake游戏的代码。

同时我附上snake的apk包,大家可以按上面的方法在模拟器上安装一下玩玩。

npp注:其实呢,还有一种更简单的方法,想必大叫都用过豌豆夹。打开模拟器后,再打开豌豆夹,它会自动连接上模拟器,当做一个真的手机对待。所以可以摆脱命令的方式,卸载系统自带的源码也很方便的。有图为证:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: