Android 源码/NDK下编译C/C++的可执行文件


一些废话

        之前的项目为了获取到用户点击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!




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值