转载请注明原创地址:http://blog.csdn.net/iflychenyang/article/details/8548652

前言:

经过几天的努力终于将poco成功的在android平台上集成起来了.由于这段时间一直有事,没有及时对调研的结果进行总结,现对整个过程进行下整理.

1.我的前两篇博客(POCO C++库在Android 平台上集成1,2,以下称第一,二篇博客),是个错误的调研过程.

2.开始的时候是在mac os平台上编译的,编译出来了libPocoFoundation.a,libPocoNet.a,libPocoXML.a,libPocoData.a四个静态库,当然你也可以在windows平台上编译,但是我没有尝试,因为我一直做ios开发,刚开始做跨平台开发,对android不太熟悉,所以走了点弯路.

3.以上四个库在集成的时候,会报错,提示找不到头文件(ndk-build error: string: No such file or directory),其实是标准库没有编译链接进来,我以为是苹果系统上编译出来的不能用,所以又尝试用android.mk进行编译,这就是我的第二篇博客.其实第二种方式也是有问题的.

正文:

我现在集成通过了,正确方法是,先将poco编译成静态库,会产生四个文件libPocoFoundation.a,libPocoNet.a,libPocoXML.a,libPocoData.a,你可以通过linux,mac os或者windows平台编译出来,poco自身的makefile就可以编译通过,另外还需要一个libgnustl_static.a,将这五个静态库,与您自己的代码一起编译成动态库,再通过jni与android的java程序交互就可以了.

libgnustl_static.a这个库我是用android.mk文件编译(第二篇博客中的方法)时产生的obj文件夹中看到的,取出来就行了,您得自己想办法获取,在此我就不做介绍了.

编译动态库时的代码如下:

1.Android.mk

#  Android.mk #  Copyright (C) 2013.##  All rights reserved.#  create by: yangchen (陈阳) LOCAL_PATH :=$(call my-dir)include $(CLEAR_VARS)LOCAL_CFLAGS += -I$(LOCAL_PATH)/includeLOCAL_CPPFLAGS := -frtti -fexceptionsLOCAL_C_INCLUDES := $(LOCAL_PATH)\   $(LOCAL_PATH)/includeLOCAL_MODULE := HelloPoco-jniLOCAL_LDLIBS := -L$(LOCAL_PATH)/lib -lPocoFoundation -lPocoNet -lPocoData -lPocoXML -lgnustl_static -llog LOCAL_LDFLAGS = $(LOCAL_PATH)/lib/libPocoFoundation.a \$(LOCAL_PATH)/lib/libPocoNet.a \$(LOCAL_PATH)/lib/libgnustl_static.a LOCAL_SRC_FILES := \TestClass.cpp \TestClassImpl.cpp\hello-jni.cppinclude $(BUILD_SHARED_LIBRARY)

2.Application.mk

## Application.mk## POCO Foundation 集成测试## create by: yangchen (陈阳)#APP_CFLAGS += -fexceptions APP_STL := gnustl_static


3.Hello-jni.cpp

#include <string.h>#include <jni.h>#include <pthread.h>#include <android/log.h>#include "TestClass.h"#include <assert.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include "com_example_hellopoco_HelloPoco.h"#include <iostream>#define LOGD(...)  ((void)__android_log_print(ANDROID_LOG_DEBUG, "Test_JniSample_JNI", __VA_ARGS__))static void printYear(){YANGCHEN::TestClass c;LOGD("yangchen printYear %d",c.year());}static void testHttp(){YANGCHEN::TestClass c;LOGD("yangchen testHttp begin");std::string str = c.testHttpPost();LOGD("yangchen testHttp end");LOGD("yangchen testHttp.......................................:%s",str.c_str());std::cout << "yangchen" << str << "testHttp2" << std::endl;}JNIEXPORT jint JNICALL Java_com_example_hellopoco_HelloPoco_testCallJava  (JNIEnv *env, jclass object){LOGD("yangchen testCallJava begin");printYear();testHttp();LOGD("yangchen testCallJava end");return 0;}

4.com_example_hellopoco_HelloPoco.h

/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_example_hellopoco_HelloPoco */#ifndef _Included_com_example_hellopoco_HelloPoco#define _Included_com_example_hellopoco_HelloPoco#ifdef __cplusplusextern "C" {#endif/* * Class:     com_example_hellopoco_HelloPoco * Method:    testCallJava * Signature: ()I */JNIEXPORT jint JNICALL Java_com_example_hellopoco_HelloPoco_testCallJava  (JNIEnv *, jclass);#ifdef __cplusplus}#endif#endif


5.HelloPoco.java

package com.example.hellopoco;/** * JNI测试类,包含典型的JAVA与C相互调用及数据转换示例 * @date 2012-12-24 * @author yangchen * */public class HelloPoco {    static {        System.loadLibrary("HelloPoco-jni");    }    public static native int testCallJava();}

6.MainActivity.java

public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);new Thread() {public void run() {HelloPoco.testCallJava();}}.start();}



更多相关文章

  1. Android(安卓)实现阅读pdf格式的文件和android 7.0以上版本出现F
  2. Android(安卓)Zip文件解压缩代码
  3. Android中运用Pull解析器读取XML文件
  4. android音频视频播放器
  5. Android(安卓)framebuffer 截屏原理
  6. Android(安卓)存储:Internal Storage的用法以及与External storag
  7. Android(安卓)中自定义 Menu 资源
  8. Android安全机制之反编译
  9. Android(安卓)通过zygote来运行java程序

随机推荐

  1. android 使用系统照相程序照相并存储、显
  2. Android(安卓)开发基础
  3. Android(安卓)Studio 获取数字签名信息
  4. 干货链接
  5. Android(安卓)前置摄像头的默认是180度,导
  6. android 屏幕适配方案第二版
  7. android仿知乎标题栏随ScrollView滚动变
  8. Android权限列表permission说明 [轉載]
  9. Android低功耗蓝牙应用开发获取的服务UUI
  10. Android(安卓)GestureDetector方法详解