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.