转载请注明原创地址: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 #include #include #include #include "TestClass.h"#include #include #include #include #include "com_example_hellopoco_HelloPoco.h"#include #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 /* 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 ndk编译x264开源(用于android的ffmpeg中进行软编码)
  2. [android]编译时出现/usr/bin/ld: skipping incompatible /usr/l
  3. 编译android的linux内核
  4. Android(安卓)命令行编译、打包生成apk文件
  5. APP开发实战94-Vector静态图的使用
  6. Android热更新框架Tinker无法更新?
  7. 在android中policymanager
  8. flutter-使用第三方库,编译和运行版本不一致问题 2
  9. Android工程集成flutter

随机推荐

  1. Android XML :unbound prefix 错误
  2. Android的线程使用来更新UI----Thread、H
  3. Android测试原理(二)
  4. android Button 切换背景,实现动态按钮和
  5. Android ImageView控件的setMaxWidth、se
  6. Android 黑科技
  7. Android(安卓)Adapter适配器模板(笔记)
  8. android:gravity和android:layout_gravit
  9. Android 游戏设计教程
  10. android----UI组件