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 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"
#######################################################################################################
(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 {包(package)名}/{包名}.{活动(activity)名称}
如:启动浏览器
# am start -n com.android.browser/com.android.browser.BrowserActivity
二、adb启动service:
$ adb shell
$ am startservice -n {包(package)名}/{包名}.{服务(service)名称}
$ 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
- android 学习中实用(一)
- Android开发中实用API接口(一)
- FFMPEG学习【libavcodec】:实用函数(一)
- Android 实用代码片段(一)
- Android实用代码片段(一)
- Android实用代码七段(一)
- Android实用代码七段(一)
- Android实用代码七段(一)
- Android实用代码七段(一)
- Android实用代码七段(一)
- Android开发实用代码片段(一)
- Android实用代码七段(一)
- Android实用框架(一)
- android实用代码片段(一)
- 高效实用Android Studio (一)
- 学习《c/c++程序员实用大全》心得(一)
- Linux学习笔记(一)一些基础实用的东西
- android 实用闹钟开发过程记(一)--创建数据库
- 华为oj初级 统计大写字母个数
- mysql存emoji表情报错处理
- Leetcode040--是否是平衡二叉树
- 算法之路(一)
- 测试各种类型所占内存的大小
- android 学习中实用(一)
- (M)SIM卡开机流程分析之SubscriptionController类分析
- 进程调度方式
- 在[Linux]下 PHP程序员如何玩转Linux系列-lnmp环境的搭建
- JavaWeb学习----JSP简介及入门(含Eclipse for Java EE及Tomcat的配置)
- 在测试中mock的作用
- 什么是小程序
- phpMyAdmin中修改用户名和密码
- Hive快速入门