首先,关于power key的代码处理在frameworks\base\policy 中的PhoneWindowManager.java文件中
还有一些service以及cpp文件的处理,在android\frameworks\base\services 下的jni以及java文件中
关于LockScreen的处理在android\vendor\qcom\proprietary\qrdplus\LockScreen中
JNI中的cpp文件如何打log
首先,关于cpp文件log的输出,打log,需要引入头文件,无非是两种
#include <utils/Log.h>和#include <cutils/Log.h>
两个文件不同的是,前者是android\system\core\include\utils下的Log.h文件
后者是android\system\core\include\cutils下的Log.h文件。
但是这两者又有什么区别呢。
打开首先打开cutils/Log.h看一下:只有一句话: #include <log/log.h>
说明,即使是在cutils/Log.h,也只是引用了log/log.h
然后打开utils/Log.h,发现头文件出引用了
说明,最终使用的还是log\log.h文件的内容,这里面的内容就有很多了,就不一一赘述了。
按照常规方法,我在cpp文件中加入了log,内容为:LOGI("niejianjian_jni_log!!!");
但是,编译的时候,却报错,内容为:“LOGI” was not delcared in this scope,提示没有定义,这个时候,就要添加一些内容,才可以打印出log信息。
1.导入log头文件
例如:#include <utils/Log.h>
#include <android/Log.h>
2.修改Android.mk文件
加上LOCAL_LDLIBS :=-llog
注意,这一句必须放在include $(CLEAR_VARS)后面,否则不生效
3.定义LOG函数
#define TAG "myDemo-jni" // 这个是自定义的LOG的标识
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,TAG ,__VA_ARGS__) // 定义LOGD类型
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO,TAG ,__VA_ARGS__) // 定义LOGI类型
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN,TAG ,__VA_ARGS__) // 定义LOGW类型
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR,TAG ,__VA_ARGS__) // 定义LOGE类型
#define LOGF(...) __android_log_print(ANDROID_LOG_FATAL,TAG ,__VA_ARGS__) // 定义LOGF类型
定义完了之后,他们分别相当于android的java代码中的Log.d(),Log.i()等方法。
下面举个例子。
我在cpp文件中先加入了log头文件,然后声明了一下内容:
然后我在代码中使用LOGI。内容如下:
LOGI("niejianjian_jni_log!!!");
最后,在DDMS的Logcat中查看打印的log结果如下:
到此,打印cpp打印log的方法就结束了。
参考博客:http://www.2cto.com/kf/201307/227148.html
JNI的科普
1.Java native 关键字
native是与C++联合开发的时候用的!