zoukankan      html  css  js  c++  java
  • 在 C Level 用 dlopen 使用 第三方的 Shared Library (.so)

    http://falldog7.blogspot.com/2013/10/android-c-level-dlopen-shared-library-so.html

    在 Android 裡,撰寫 JNI C Level 的 code ,不管是想要 load 自己寫的獨立 shared library module (.so),或是想要把第三方的 shared library 拿來用,都必須要多做一些步驟才能達成。

    1. 寫個簡單的 libtest.so

    test.h

    extern "C"
    {
    int Add(int num);
    }

    test.cpp

    int Add(int num)
    {
        return num+1;
    }


    Android.mk

    include $(CLEAR_VARS)
    LOCAL_MODULE    := littest
    LOCAL_SRC_FILES := test.cpp
    include $(BUILD_SHARED_LIBRARY)

    2. 將已經 compile 好的 libtest.so 放進新的 project 裡

    首先,要先把已經 build 好的 shared library 放到 Android 專案目錄裡
    而且必須根據平台區分才行:好比 armeabi, armeabi-v7a, x86, mips ,放好各平台 compile 好的 shared library 後,在 Android.mk 裡必須加一段指令,NDK 才會將這個 shared library 包進 .apk 裡

    比如,我想要使用 libtest.so ,將各平台 compile 好的 .so 檔放至 mylib 底下

    • mylib (folder示意)
      • armeabi
        • libtest.so
      • aremabi-v7a
        • libtest.so
      • x86
        • libtest.so
      • mips
        • libtest.so


    就可以利用 NDK 的變數 $(TARGET_ARCH_ABI) 來區分不同平台的目錄
    Android.mk 

    include $(CLEAR_VARS)
    LOCAL_MODULE := libtest
    LOCAL_SRC_FILES := ./mylib/$(TARGET_ARCH_ABI)/libtest.so
    include $(PREBUILT_SHARED_LIBRARY)


    Build完後,確認一下 Android 專案下的目錄 $PROJECTlib<abi>,照理來說應該會找到 libtest.so

    3. 使用 dlopen 控制 libtest.so

    typedef int (*fnAdd)(int);
    void* hDll = dlopen("/data/data/<package-name>/lib/libtest.so");
    if(hDll) {
        fnAdd add = (fnAdd) dlsym(hDll, "Add");
        if(fnAdd){
            printf("10+1=%d
    ", fnAdd(10));
        }
    }


    透過 Eclipse 將 .apk 安裝到手機上後,.so 將會放在 /data/data/<package_name>/libtest.so,這個 package_name 是定義在 AndroidManifest.xml 裡面的。

  • 相关阅读:
    perl 调短信接口
    MySQL处理千万级数据查询、分页
    tomcat 设置path 访问路径
    Tomcat 设置内存大小
    Tomcat 80端口启动 必须是root
    tomcat server.xml配置解析
    Perl 发送邮件
    单身北漂生活二、三事(上)——北漂18年(8)
    tomcat 应用访问
    Perl 采集监控日志插入数据库
  • 原文地址:https://www.cnblogs.com/xunbu7/p/6984215.html
Copyright © 2011-2022 走看看