美文网首页
NDK:02-调用第三方so文件

NDK:02-调用第三方so文件

作者: 放纵的卡尔 | 来源:发表于2019-01-19 03:44 被阅读0次

NDK调用第三方so文件

说明:此处的so可以是jni生成的或者纯净的C语言的动态库.关于生成.so可参看我的上篇文章.

  1. 导入第三方.so.需要新建jniLibs,必须是这个文件名,否则会找不到.so(最简单的方式)

    image
  2. 修改CmakeList文件.

    image
  3. CmakeList的文件内容

    cmake_minimum_required(VERSION 3.4.1)
    add_library(
            share-lib#第三方so的名称
            SHARED#动态库标志
            IMPORTED)#导入第三方的标志
    #注意这两个属性必须靠在一起,下边是对上边的解释.
    set_target_properties(share-lib #第三方so的名称
            PROPERTIES IMPORTED_LOCATION
            ${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/libshare-lib.so)#设置.so的路径(必须)
    
    
    add_library( # Sets the name of the library.
            native-lib#jni的loadLibrary的名称
            SHARED#动态库标志
            native-lib.cpp)#jni的源文件
    target_include_directories(native-lib PRIVATE
            ${CMAKE_SOURCE_DIR}/../myinclude #配置include的路径(如果需要使用.h文件的话)
            )
    
    find_library( # Sets the name of the path variable.
            log-lib
            log)
    target_link_libraries( # 链接所有的.cpp .so,(.h文件不需要)
            native-lib
            share-lib#第三方so的名称
            ${log-lib})
    
  1. 此时,第三方导入完毕调取即可.JNI调用代码如下:native-lib.c

    #include <jni.h>
    #include <string>
    
    extern "C" std::string getMyString();
    using namespace std;
    extern "C" JNIEXPORT jstring JNICALL
    Java_com_okay_usendkdemo_MainActivity_stringFromJNI(
            JNIEnv *env,
            jobject /* this */) {
        return env->NewStringUTF(getMyString().c_str());
    }
    
    
  2. 调用代码如下:

    public class MainActivity extends AppCompatActivity {
    
        // Used to load the 'native-lib' library on application startup.
        static {
            System.loadLibrary("native-lib");
        }
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            // Example of a call to a native method
            TextView tv = findViewById(R.id.sample_text);
            tv.setText(stringFromJNI()+"--");
        }
    
        /**
         * A native method that is implemented by the 'native-lib' native library,
         * which is packaged with this application.
         */
        public native String stringFromJNI();
    }
    
  1. OK.-->完成.

相关文章

  • NDK:02-调用第三方so文件

    NDK调用第三方so文件 说明:此处的so可以是jni生成的或者纯净的C语言的动态库.关于生成.so可参看我的上篇...

  • NDK 不得不知的基础概念

    目录 So 文件是什么 JNI 是什么 ndk-build /CMake 是什么 Ndk 可以做什么 so 文件是...

  • android so库对齐

    so库说明 so库在android中,是使用c/c++代码编译出来的库文件,可以使用ndk调用,就是你在andro...

  • Android Studio NDK开发

    概述 在Eclipse的时代,我们进行NDK的开发一般需要通过手动执行NDK脚 本生成*.so文件,再将.so文件...

  • NDK

    编译so文件 在jni文件路径下面,输入ndk-build。

  • 谈谈Android的so

    一般情况下,我们不需要关心so。但是当APP使用的第三方SDK中包含了so文件,或者自己需要使用NDK开发某些功能...

  • Android NDK编译本地文件以及引用第三方so文件

    在需要引入第三方的so文件的情况下,怎样使用NDK编译本地代码? 1.新建jni文件夹,将你要编译源码的文件以及需...

  • NDK开发->⑴生成so文件及其调用

    1. 前言: 看C走了不少弯路, 单纯的看看概念写写基础代码, 结果没过多久就忘了, 索性重新快速过了一遍C, 先...

  • NDK 知识梳理(1) - 使用 CMake 进行 NDK 开发

    一、前言 在Eclipse的时代,我们进行NDK的开发一般需要通过手动执行NDK脚本生成*.so文件,再将.so文...

  • NDK开发之封装So调用第三方So

    由于公司要使用第三方提供的一套算法,而算法工程师给了一个在Windows直接生成的so,及不符合Jni调用格式的....

网友评论

      本文标题:NDK:02-调用第三方so文件

      本文链接:https://www.haomeiwen.com/subject/qahadqtx.html