Android Native Executable Intro - 02 (with app_glue)

本文介绍了一个使用C++编写的Android原生Activity示例,通过自定义头文件mylog.h实现了不同级别的日志输出功能,并展示了如何在NativeActivityTwo.cpp中调用这些日志宏进行日志记录。

 

 

in jni directory

1. mylog.h

#ifndef COOKBOOK_LOG_H
#define COOKBOOK_LOG_H

#include <android/log.h>

#define LOG_LEVEL 4
#define LOG_TAG "NativeActivityTwo"

#define LOGU(level, ...) if (level <= LOG_LEVEL) {__android_log_print(ANDROID_LOG_UNKNOWN, LOG_TAG, __VA_ARGS__);}
#define LOGD(level, ...) if (level <= LOG_LEVEL) {__android_log_print(ANDROID_LOG_DEFAULT, LOG_TAG, __VA_ARGS__);}
#define LOGV(level, ...) if (level <= LOG_LEVEL) {__android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__);}
#define LOGDE(level, ...) if (level <= LOG_LEVEL) {__android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__);}
#define LOGI(level, ...) if (level <= LOG_LEVEL) {__android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__);}
#define LOGW(level, ...) if (level <= LOG_LEVEL) {__android_log_print(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__);}
#define LOGE(level, ...) if (level <= LOG_LEVEL) {__android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__);}
#define LOGF(level, ...) if (level <= LOG_LEVEL) {__android_log_print(ANDROID_LOG_FATAL, LOG_TAG, __VA_ARGS__);}
#define LOGS(level, ...) if (level <= LOG_LEVEL) {__android_log_print(ANDROID_LOG_SILENT, LOG_TAG, __VA_ARGS__);}

#endif

 

2. NativeActivityTwo.cpp

#include <jni.h>
#include <android_native_app_glue.h>

#include "mylog.h"

void handle_activity_lifecycle_events(struct android_app* app, int32_t cmd) {
 LOGI(2, "%d: dummy data %d", cmd, *((int*)(app->userData)));
}

void android_main(struct android_app* app) {
 // Make sure glue isn't stripped.
 app_dummy();
 int dummyData = 111;
 app->userData = &dummyData;
 app->onAppCmd = handle_activity_lifecycle_events;
 while (1) {
  int ident, events;
  struct android_poll_source* source;
//  if ((ident=ALooper_pollAll(-1, NULL, &events, (void**)&source)) >= 0) {
  if ((ident=ALooper_pollOnce(-1, NULL, &events, (void**)&source)) >= 0) {
   source->process(app, source);
  }
 }
}

 

3. Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := NativeActivityTwo
LOCAL_SRC_FILES := NativeActivityTwo.cpp
LOCAL_LDLIBS    := -llog -landroid
LOCAL_STATIC_LIBRARIES := android_native_app_glue

include $(BUILD_SHARED_LIBRARY)
$(call import-module,android/native_app_glue)

 

Notes:

if executable compiled, Android.mk as thus

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := NativeActivityTwo
LOCAL_SRC_FILES := NativeActivityTwo.cpp
#LOCAL_LDLIBS    := -llog -landroid
LOCAL_LDLIBS    := -shared -llog -landroid
LOCAL_STATIC_LIBRARIES := android_native_app_glue

#include $(BUILD_SHARED_LIBRARY)
include $(BUILD_EXECUTABLE)
$(call import-module,android/native_app_glue)

 

6.  Notes

这样生成的native activity 不能执行, 所以应该生成.so库, 然后用eclipse 或 命令行生成apk.

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值