在Android模拟器下安装和卸载APK包 )
在Android模拟器上安装和卸载APK包 (转)
玩过了一天Android模拟器,也写了几个小测试程序。突然有个问题出现,如果脱离Eclipse开发环境,如何能将APK包部署给模拟器呢,
研究了一下模拟器的内存文件系统,似乎没什么发现,是一个Linux内核。
于是到google问问老外们,终于知道了,吼吼。
【安装APK】
安装APK当然首先是要有模拟器,和要安装的APK包,这个不多废话了。直接切入正题,在模拟器安装APK。
首先,将模拟器执行起来,直到正式进入系统。
接下来,打开一个cmd窗口,路径切换到模拟器
目录
工贸企业有限空间作业目录特种设备作业人员作业种类与目录特种设备作业人员目录1类医疗器械目录高值医用耗材参考目录
下的tools目录。
输入:adb install 你要安装的apk文件的路径。
如果看到一行类显示传输速度的文字,那说明安装成功了。
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
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 ?
manifest xmlns: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=
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
拨打电话
# am start -a android .intent.action.CALL -d tel:10086
启动google map直接定位在天津
# am start -a android .intent.action.VIEW geo:0,0?q=tianjin
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指令来查看。