一些废话
之前的项目为了获取到用户点击Android屏幕和按键的东西,专门看了Event那块,然后按项目需求弄好了(c++代码,编译成so,获取用户当前点击左边点和按键,数据神马都是和底层这块获取的,实现的方法有参考android源码的实现原理),当时虽然是摸着石头过河,但时间很赶,心态不好,不知道自己能搞定不,所以匆匆开始,匆匆结束后,没有好好总结一下。
其实就是弄些so包的东西。。。最近要做个好玩的东西,又要开始弄so包啦,不如记录记录,自己备忘,也说不定可以帮到别人。。。不过这次有高人指点,不用我担惊受怕啦,吼吼,其实是能力太弱,轮不到我担心神马,我只管跟在后面屁颠屁颠study即可。
项目不能完全往这里贴哈,仅给出我自己study最简单最初步的原型。
语言表达欠缺,如果你需要你是可以看懂的,用不到的话再解释你也看不进去,不废话,上代码。。。。
MyMain.c
#define LOG_TAG "MyScreenShot"
#define true 1
#include "LocalLog.h"
int main()
{
LOGD("Main Begin...");
int i = 0;
while(true){
i++;
if(i>1000)
i = 0;
}
LOGD("Main End...");
return 0;
}
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := MyMain.c
LOCAL_SHARED_LIBRARIES :=libandroid_runtime \
libcutils \
libutils \
LOCAL_MODULE_TAGS := eng
LOCAL_MODULE := libscreenshot
LOCAL_PRELINK_MODULE := false
#include $(BUILD_SHARED_LIBRARY) //一般apk里调用要编译成shared library
include $(BUILD_EXECUTABLE) //但这里说的是可执行的,所以用这个,区别不说了哈,自己度娘吧
LocalLog.h
#ifndef _LOCAL_LOG_H
#define _LOCAL_LOG_H
#include <stdio.h>
#include <time.h>
#include <sys/types.h>
#include <unistd.h>
#ifdef HAVE_PTHREADS
#include <pthread.h>
#endif
#include <stdarg.h>
#include <cutils/uio.h>
#include <cutils/logd.h>
#ifdef __cplusplus
extern "C" {
#endif
//Make your own setting here
//Set NO_LOG value as "1" means you do not want to show the Log message
//If you want to show your Log message, please set NO_LOG value as "0"
#define NO_LOG 0
/*
* This is the local tag used for the following simplified
* logging macros. You can change this preprocessor definition
* before using the other macros to change the tag.
*/
#ifndef LOG_TAG
#define LOG_TAG NULL
#endif
#if NO_LOG
#define LOGV(...) ((void)0)
#define LOGD(...) ((void)0)
#define LOGI(...) ((void)0)
#define LOGW(...) ((void)0)
#define LOGE(...) ((void)0)
#else
#define LOG(priority, tag, ...) \
LOG_PRI(ANDROID_##priority, tag, __VA_ARGS__)
#define LOG_PRI(priority, tag, ...) \
android_printLog(priority, tag, __VA_ARGS__)
#define android_printLog(prio, tag, fmt...) \
__android_log_print(prio, tag, fmt)
#define LOGV(...) ((void)LOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__))
#define LOGD(...) ((void)LOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__))
#define LOGI(...) ((void)LOG(LOG_INFO, LOG_TAG, __VA_ARGS__))
#define LOGW(...) ((void)LOG(LOG_WARN, LOG_TAG, __VA_ARGS__))
#define LOGE(...) ((void)LOG(LOG_ERROR, LOG_TAG, __VA_ARGS__))
#endif
#ifdef __cplusplus
}
#endif
#endif
我自己开关Log用的,自己用,方便
上述三个文件放在同一个文件夹下,我还是习惯放development/apps/XXX 编译mmm, mm随你自己
贴一下我编译结果图片
贴一下在我的执行结果
Step 1: adb push到手机上XX目录下;
Step 2: adb shell 进入XX目录;
Step 3: chmod 777 /a+x 添加执行权限,我比较懒,总是777
Step 4:./XXX运行你的lib (这里说一下关于命名,我之前没有在意,但有人说可执行必须是libXXX,所以如果你执行不成功,那么check一下你的lib包名)
Step 5:来看看运行结果
能看到Main Begin,说明程序已经在运行;
没有看到Main End,说明程序没有退出;
好吧,这个demo就是这么瓜,其实一般都是编译成apk里调用的so,但初期为了看到一些执行效果,我会先编译成可执行的。
我这个是在源码下编译的,有看到其他的博客里写在ndk下编译,这个我没试过。。。
博客的连接如下:
http://blog.csdn.net/nicebooks/article/details/6601005
很早以前我试着弄过cygwin,不过那个太要人命了, 不如直接源码下编译简单。
好啦,就到这里。。Have a good day!