Android的日积月累-问题解决

来源:互联网 发布:java的封装性 编辑:程序博客网 时间:2024/05/01 01:23

1.问题:控制台出现emulator: ERROR: the user data image is used by another emulator. aborting提示

原因:没有正确关闭模拟器

解决:在进程中结束adb.exe,重启Eclipse即可。

2.问题:出现 emulator-5554 disconnected! Cancelling xxxxxx activity launch'!

解决:run里面有一个run configrations,在里面有一个选项每次运行都察掉记录 wipe out user data,选上该选项。.

3.问题:出现 sdl_app: emulator-arm.exe应用程序错误。

解决:网上有说关闭杀毒软件的,但关闭重启后还是出错。删除该AVD,新建。在新建的过程中Snapshot 下选择enable项。

4.问题:操作raw目录下数据库文件找不到在SD卡创建的路径。

 解决:没有添加访问权限。

 

android模拟器开发调试错误SDL_app:emulator.exe ,内存不能为written的解决办法

在网上找了好多方法,下面的方法比较实在,可以解决我机器上产生的问题。问题根源:配置出错,sd卡路径、大小,skin的分辨率,特别是skin分辨率没有设置好,导致问题严重。解决办法:

1、找到android模拟器安装目录:C:\Documents and Settings\Administrator\.android\avd\AVD23.avd

2、编辑config.ini文件,就是这块配置错误导致错误产生。

3、如果硬盘空间比较紧张,可以把模拟器文件放到其它盘符上:你可以在命令行下用mkcard创建一个SDCARD文件,如: mksdcard 50M D:\sdcard.img

4、下面代码可以整个覆盖原来的config文件 hw.sdCard=yes hw.lcd.density=240 skin.path=800×480 skin.name=800×480 vm.heapSize=24 sdcard.path=D:\sdcard.img hw.ramSize=512 image.sysdir.1=platforms\android-8\images\

5、OK,模拟器正常运行

 Android NDK: Host 'awk' tool is outdated. Please define HOST_AWK to point to Gawk or Nawk !

部署好cygwin,编译一下NDK自带的sample,报错:“ Android NDK: Host 'awk' tool is outdated. Please define HOST_AWK to point to Gawk or Nawk ! ” 原来NDK自带了一个awk.exe, Host 'awk' tool is outdated. 已经过期。找了下解决方案,最直接的办法是到NDK的host目录 —— D:\android\android-ndk-r7\prebuilt\windows\bin\awk.exe ,把这个过期的awk.exe 删除掉,这样解析时,找不到自带的awk就去调用cygwin的默认awk解析awk文件。然后就OK了。


XML 特殊字符处理

在XML中,有一些符号作为XML 的标记符号,一些特定情况下,属性值必须带有这些特殊符号。 下面主要是讲解一些常用的特殊符号的处理

例一: 双引号的使用。

双引号作为XML 属性值的开始结束符号,因此无法在值中直接使用"". 处理方式可以分为两种。

 a: 属性值中没有'(单引号) ,那么可以用单引号'' 作为属性值的开始结束符号

<add key="IPhone" value="apple"/>  ...属性值为 ("apple").

解决:  <add key="IPhone" value=’"apple"‘/> 

 b: 属性值中有'(单引号) ,也有双引号。 如...属性值为 ("'apple").

<add key="IPhone" value="&quot;&apos;apple&quot;"/> 

下表为 XML 标记使用的字符列出了五种内置实体。

实体实体引用含义

lt

&lt;

<(小于号)

gt

&gt;

>(大于号)

amp

&amp;

&(“and”符)

apos

&apos;

'(撇号或单引号)

quot

&quot;

"(双引号)

如果字符可能会使 XML 分析器错误地解释文档结构,请使用实体,而不要键入字符。&apos; 和 &quot; 实体引用最常用在属性值中。

listview不能响应 

如果你的自定义ListViewItem中有Button或者Checkable的子类控件的话,那么默认focus是交给了子控件,而ListView的Item能被选中的基础是它能获取Focus,也就是说我们可以通过将ListView中Item中包含的所有控件的focusable属性设置为false,这样的话ListView的Item自动获得了Focus的权限,也就可以被选中了,也就会响应onItemClickListener中的onItemClick()方法,然而将ListView的Item Layout的子控件focusable属性设置为false有点繁琐,我们可以通过对Item Layout的根控件设置其android:descendantFocusability=”blocksDescendant”即可.


通过wifi调试android程序

首先让android手机监听指定的端口:
  这一步需要使用shell,因此手机上要有终端模拟器,不过网上很多,随便找个就行了,依次敲入下列几行:

su//获取root权限setprop service.adb.tcp.port 5555//设置监听的端口,端口可以自定义,如5554,5555是默认的stop adbd//关闭adbdstart adbd//重新启动adbd

手机连接wifi并确保手机和电脑连接同一个网络,记下手机的ip地址,假设为a.b.c.d


电脑上打开命令提示符,敲入以下命令:

adb connect a.b.c.d//如果不输入端口号,默认是5555,自定义的端口号必须写明,对应第1步中自定义的端口号,例如:a.b.c.d:5554

配置成功,命令行显示:“connected to a.b.c.d”,然后就可以调试程序了,^_^。

要关闭wifi调试,也很简单,只需要把端口号设置为-1,并且重复第一步即可。



ndroid在adb shell里打开某个APP

打开浏览器:

# am start -n com.android.browser/com.android.browser.BrowserActivity

调用浏览器打开某个网站:

# am start -a android.intent.action.VIEW -d http://www.china.com

 

 

查看系统Activity的启动信息

连接MID至调试模式

开始--运行--CMD

输入:adb logcat ActivityManager:* *:S




Google Map V2 模拟器使用google play service:

Create a new emulator

  • for device choose "5.1'' WVGA (480 x 800: mdpi)"
  • for target choose "Android 4.1.2 - API level 16"
  • for "CPU/ABI" choose "ARM"
  • leave rest to defaults

these are the settings that are working for me. I don't know for different ones.


Start the emulator


install com.android.vending-1.apk and com.google.android.gms-1.apk via ADB install command



adb shell下提示read-only file system


当使用adb shell时,向/system目录及其子目录写文件时经常提示“read-only file system”。其实产生该提示的原因很简单:/system是以ro模式挂载的,因此我们所要做的就是以读写模式(rw)重新挂载需要修改的目录(本例中为/system),具体流程如下:

1. 进入adb shell并查看当前挂在情况

命令号下输入:adb shell#mount

这时候看到当前挂载情况

复制代码
rootfs on / type rootfs (rw,relatime)tmpfs on /dev type tmpfs (rw,relatime,mode=755)devpts on /dev/pts type devpts (rw,relatime,mode=600)proc on /proc type proc (rw,relatime)sysfs on /sys type sysfs (rw,relatime)none on /acct type cgroup (rw,relatime,cpuacct)tmpfs on /mnt/asec type tmpfs (rw,relatime,mode=755,gid=1000)tmpfs on /mnt/obb type tmpfs (rw,relatime,mode=755,gid=1000)none on /dev/cpuctl type cgroup (rw,relatime,cpu)/dev/block/mmcblk0p25 on /system type ext4 (ro,relatime,barrier=1,data=ordered)/dev/block/mmcblk0p26 on /data type ext4 (rw,nosuid,nodev,noatime,barrier=1,data=ordered,noauto_da_alloc)/dev/block/mmcblk0p27 on /cache type ext4 (rw,nosuid,nodev,noatime,barrier=1,data=ordered)/dev/block/mmcblk0p28 on /devlog type ext4 (rw,nosuid,nodev,noatime,barrier=1,data=ordered)/data/d on /data/d type debugfs (rw,relatime)/sys/kernel/debug on /sys/kernel/debug type debugfs (rw,relatime)/dev/block/vold/179:65 on /mnt/sdcard type vfat (rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0602,dmask=0602,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro)/dev/block/vold/179:65 on /mnt/secure/asec type vfat (rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0602,dmask=0602,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro)tmpfs on /mnt/sdcard/.android_secure type tmpfs (ro,relatime,size=0k,mode=000)
复制代码

我们感兴趣的是

dev/block/mmcblk0p25 on /system type ext4 (ro,relatime,barrier=1,data=ordered)可以看到system是以只读权限挂载的

2. 重新挂载需要修改权限的目录

#mount -o remount -o rw /system

具体的可以看下mount的参数。

3. 查看修改后的结果




1. 手机要有root权限

2. 下载tcpdump   http://www.strazzere.com/android/tcpdump

3. adb push c:\wherever_you_put\tcpdump /data/local/tcpdump

4. adb shell chmod 6755 /data/local/tcpdump

5, adb shell,   su获得root权限

6, cd /data/local

7, ./tcpdump -i any -p -s 0 -w /sdcard/capture.pcap

命令参数:

 

        # "-i any": listen on any network interface

  # "-p": disable promiscuous mode (doesn't work anyway)

  # "-s 0": capture the entire packet

  # "-w": write packets to a file (rather than printing to stdout)

  ... do whatever you want to capture, then ^C to stop it ...

 

8,  adb pull /sdcard/capture.pcap d:/

9,  在电脑上用wireshark打开capture.pcap即可分析log

 

Execute the following if you would like to watch packets go by rather than capturing them to a file (-n skips DNS lookups. -s 0 captures the entire packet rather than just the header):  

 

adb shell tcpdump -n -s 0   

 

Typical tcpdump options apply. For example, if you want to see HTTP traffic:  

只监听http  

adb shell tcpdump -X -n -s 0 port 80

 

根据以上的信息,写一个bat去执行(tcpdump文件必须在当前目录里)。

 

开始tcpdump 

adb push tcpdump /data/local/tcpdump
adb shell chmod 6755 /data/local/tcpdump
adb shell rm -r /sdcard/capture.pcap
adb shell  /data/local/tcpdump -i any -p -s 0 -w /sdcard/capture.pcap
pause
 

下载tcpdump文件到电脑 

 adb pull /sdcard/capture.pcap capture.pcap 

 

 问题:有些机器root后通过adb shell 后,默认不是root用户,需要输入 su才能切换到root,这样在执行批处理会有问题,解决方法如下

adb shell "su -c 'sleep 1'"
adb start-server

adb push tcpdump /data/local/tcpdump 

 

 因没有root权限导致的问题

adb shell su -c "/data/local/tmp/tcpdump -i any -p -s 0 -w /sdcard/netCapture.pcap"


原创粉丝点击