android 学习中实用(一)

来源:互联网 发布:招聘程序员 编辑:程序博客网 时间:2024/06/08 20:42
(1)在Android系统中,printk输出的日志信息保存在/proc/kmsg中,要查看/proc/kmsg的内容   ($ dmseg)
#######################################################################################################
(2)使用 adb shell getevent 查看输入事件:/dev/input/event*
    Tile Specs保存在data/system/users/0/settings_secure.xml中
#######################################################################################################
(3)adb shell am broadcast 后面的参数有:
[-a <ACTION>]
[-d <DATA_URI>]
[-t <MIME_TYPE>]
[-c <CATEGORY> [-c <CATEGORY>] ...]
[-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE> ...]
[--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...]
[-e|--ei <EXTRA_KEY> <EXTRA_INT_VALUE> ...]
[-n <COMPONENT>]
[-f <FLAGS>] [<URI>]

查看所有权限的指令adb shell pm list permissions -g -d
 adb shell pm [grant|revoke] <permission-name> ...

adb shell am start com.mediatek.camera/.FactoryMode

adb shell /system/bin/screencap -p /sdcard/screenshot.png(保存到SDCard)adb pull /sdcard/screenshot.png d:/screenshot.png(保存到电脑)

一、adb启动activity:
$ adb shell
$ am start -n {包(package)名}/{包名}.{活动(activity)名称}
如:启动浏览器
# am start -n com.android.browser/com.android.browser.BrowserActivity

二、adb启动service:
$ adb shell
$ am startservice -n {包(package)名}/{包名}.{服务(service)名称}
如:启动自己应用中一个service
# am startservice -n com.android.traffic/com.android.traffic.maniservice

三、adb发送broadcast:
$ adb shell
$ am broadcast -a <广播动作>
如:发送一个网络变化的广播
# am broadcast -a android.net.conn.CONNECTIVITY_CHANGE

#######################################################################################################
adb reboot bootloader
adb reboot recovery
#######################################################################################################
(4) Android日志系统为日志消息保持了多个循环缓冲区,而且不是所有的消息都被发送到默认缓冲区,要想查看这些附加的缓冲区,可以使用-b 选项,以下是可以指定的缓冲区:

radio — 查看包含在无线/电话相关的缓冲区消息
events — 查看事件相关的消息
main — 查看主缓冲区 (默认缓冲区)
 'main', 'system', 'radio','events', 'crash' or 'all'
-b 选项的用法:

[adb] logcat [-b ]
例如查看radio缓冲区:
adb logcat -b radio
#######################################################################################################
(5)[linux进程的几个状态]

1. Linux进程状态:R (TASK_RUNNING),可执行状态&运行状态(在run_queue队列里的状态)

2. Linux进程状态:S (TASK_INTERRUPTIBLE),可中断的睡眠状态, 可处理signal

3. Linux进程状态:D (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态, 可处理signal, 有延迟

4. Linux进程状态:T (TASK_STOPPED or TASK_TRACED),暂停状态或跟踪状态, 不可处理signal, 因为根本没有时间片运行代码

5. Linux进程状态:Z (TASK_DEAD - EXIT_ZOMBIE),退出状态,进程成为僵尸进程。不可被kill, 即不响应任务信号, 无法用SIGKILL杀死
#######################################################################################################
(6)android:DDMS查看Threads
ID:   虚拟机分配的唯一的线程ID,在Dalvik里,它们是从3开始的奇数。
Tid:linux的线程ID号
Stauts:线程状态,比较多,有下面的一些
             running:  正在执行程序代码
             sleeping:执行了Thread.sleep()
             monitor:等待接受一个监听锁。
             wait::Object.wait(),等待被其他线程唤醒
             native:正在执行native代码,
             vmwait:等待虚拟机,(这个不是很懂,高手指教,这个状态在什么情况下发生)
             zombie:线程在垂死的进程
             init:线程在初始化(我们不可能看到)
             starting:线程正在启动(我们不可能看到)
utime:执行用户代码的累计时间
stime:执行系统代码的累计时间
name:线程的名字

另外,右侧每个Thread选中之后可以在下面看到Refresh按钮,这个点了之后,可以看到线程的函数执行,结合Status可以知道目前情况;而出现问题时某个线程一般会变为monitor状态,这时候就要特别留意他,并refresh下,检查他的执行情况 ,再回头结合代码,一般都能找到问题出在什么地方;
#######################################################################################################
(7)Android.mk文件输出信息

LOCAL_SRC_FILES := $(call all-java-files-under, src)

Makefile & Android.mk文件中如何输出打印信息:$(warning xxxxx)或者$(error xxxxx)
输出变量方式为:$(warning  $(XXX))
#######################################################################################################
(8)linux操作
sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir`  //多文件替换内容

sed -i "s/SIM Telcel/TELCEL/g" `grep "SIM Telcel" -rl yourdir`  //多文件替换内容
#######################################################################################################
(9)JNI操作
      
  JNIEXPORT jstring JNICALL Java_Prompt_getLine
  (JNIEnv *env, jobject obj, jstring prompt)
  {
  char buf[128];
  const char *str = (*env)->GetStringUTFChars(env, prompt, 0);
  printf("%s", str);
  (*env)->ReleaseStringUTFChars(env, prompt, str);  
    这里使用GetStringUTFChars方法将传进来的prompt(jstring类型)转换成为UTF-8的格式,就能够在本地方法中使用了。
  
  注意:在使用完你所转换之后的对象之后,需要显示调用ReleaseStringUTFChars方法,让JVM释放转换成UTF-8的string的对象的空间,如果不显示的调用的话,JVM中会一直保存该对象,不会被垃圾回收器回收,因此就会导致内存溢出。
  
  下面是访问String的一些方法:
  
  ◆GetStringUTFChars将jstring转换成为UTF-8格式的char*
  
  ◆GetStringChars将jstring转换成为Unicode格式的char*
  
  ◆ReleaseStringUTFChars释放指向UTF-8格式的char*的指针
  
  ◆ReleaseStringChars释放指向Unicode格式的char*的指针
  
  ◆NewStringUTF创建一个UTF-8格式的String对象
  
  ◆NewString创建一个Unicode格式的String对象
  
  ◆GetStringUTFLengt获取UTF-8格式的char*的长度
  
  ◆GetStringLength获取Unicode格式的char*的长度
#######################################################################################################
(10)获取当前焦点的Activity信息
Linux:
adb shell dumpsys activity | grep "mFocusedActivity"
windows:
adb shell dumpsys activity | findstr "mFocusedActivity"
0 0
原创粉丝点击