JNI-软探针项目

1、Android代码

     .java -javac-> .class -javah-> .h ,现没有.h文件,是直接starcor-needle-lib.cpp这个文件

2、中间件代码实现JNI接口

JNIEXPORT jstring JNICALL Java_com_starcor_data_needle_crawler_crawl_NeedleJNI_getSysInfo(JNIEnv *env, jobject instance, jstring cmd)

3、编译环境

        安装ndk:

        android-ndk-r12b-linux-x86_64.zip 解压在/usr/local/arm下面,路径加入到PATH中:

    vi /root/.bashrc

    在文件最后加入下面字符:

    export PATH=/usr/local/arm/android-ndk-r12b:$PATH

    最后  source  ~/.bashrc

4、编写Android.mk

    BigDataNeedleCrawler_V1.x/needle_jni/

        jni/Android.mk

                 include $(call all-subdir-makefiles)

        jni/src/Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := starcor-needle-lib #表示模块名称

LOCAL_SRC_FILES := http/http-hdr.cpp \ #表示需要参与编译的源文件
    needle/misc.cpp \
    needle/needlecommon.cpp \
    needle/needlefilter.cpp \
    needle/needleimpl.cpp \
    needle/needlepackage.cpp \
    needle/needle_pcre.cpp \
    report/reportcenter.cpp \
    report/reportpackage.cpp \
    msgque/NeedleMsg.cpp \
    needle/starcor-needle-lib.cpp
LOCAL_CXXFLAGS += --std=c++11 -O2 #CXXFLAGS 表示用于 C++ 编译器的选项
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../include

LOCAL_LDFLAGS += -lminidpi #链接库needle_jni/libs/libminidpi.a
LOCAL_LDFLAGS += -lpcre #链接库libpcre.a
LOCAL_LDFLAGS += -lyysdk #链接库libyysdk.a
LOCAL_LDFLAGS += -Llibs #LDFLAGS是告诉链接器从哪里寻找库文件

LOCAL_LDLIBS += -llog	# LIBS是告诉链接器要链接哪些库文件
LOCAL_LDLIBS += -pthread
LOCAL_LDLIBS += -lstdc++

include $(BUILD_SHARED_LIBRARY)

5、编写Application.mk

        jni/Application.mk

APP_PLATFORM:=android-19
APP_ABI := armeabi	#用作配置要编译的CPU架构平台的类型
APP_STL := gnustl_static

6、编译starcor_needle_lib_test规则文件CMakeLists.txt

    jni/CMakeLists.txt

PROJECT(starcor-needle-lib)
SET(AFANDA_CROSS_PRE "arm-linux-androideabi-")
INCLUDE_DIRECTORIES(${CMAKE_HOME_DIRECTORY}/include)
LINK_DIRECTORIES(${CMAKE_HOME_DIRECTORY}/src)

TARGET  ${PROJECT_NAME}
POST_BUILD
COMMAND ${CMAKE_STRIP} ${PROJECT_BINARY_DIR}/lib${PROJECT_NAME}.so
COMMAND cp -f ${PROJECT_BINARY_DIR}/lib${PROJECT_NAME}.so ${ELF_FILE_PATH}/lib${PROJECT_NAME}.so

        编译:needle_jni/jni/build#

        Cmake ..

        Make

        生成:libstarcor-needle-lib.so starcor_needle_lib_test(运行时需要链接动态库吗?不需要.so库,需要.a库;可以与.so库的代码同时运行吗?可以的)

7、编译ndk-build

root@ubuntu:/home/yubo.wang/BigDataNeedleCrawler_V1.x/needle_jni# ndk-build 
Android NDK: WARNING:jni/src/Android.mk:starcor-needle-lib: non-system libraries in linker flags: -lminidpi -lpcre -lyysdk    
Android NDK:     This is likely to result in incorrect builds. Try using LOCAL_STATIC_LIBRARIES    
Android NDK:     or LOCAL_SHARED_LIBRARIES instead to list the library dependencies of the    
Android NDK:     current module    
[armeabi] Install        : libstarcor-needle-lib.so => libs/armeabi/libstarcor-needle-lib.so

        生成动态库:libs/armeabi/libstarcor-needle-lib.so

8、提供动态库给apk,具体放哪里?怎么操作的?待续。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值