将现有的jni库(已编译为“.so”)添加到另一个android工作室项目

时间:2017-10-24 10:23:25

标签: java android c++ android-ndk java-native-interface

我没有找到任何能够在线回答我的具体问题的人。我有一个旧的Android项目,我想复制一些.so库并将它们粘贴到一个新项目中。我是新手,我知道我需要告诉我的新程序在哪里找到这些库,但我不知道我是否应该使用CMake或NDK来导入alreay编译的代码。这就是我的目录:

enter image description here

我在我的程序中调用了这个库:

static {
        System.loadLibrary("serial_port");
    }

但是如何告诉编译器在哪里找到这些复制和粘贴的文件?

我根据Android的documentation启动了一个文件,但我对一些事情感到困惑。这就是我到目前为止所做的:

# Sets the minimum version of CMake required to build your native library.
# This ensures that a certain set of CMake features is available to
# your build.

cmake_minimum_required(VERSION 3.4.1)

# Specifies a library name, specifies whether the library is STATIC or
# SHARED, and provides relative paths to the source code. You can
# define multiple libraries by adding multiple add.library() commands,
# and CMake builds them for you. When you build your app, Gradle
# automatically packages shared libraries with your APK.

add_library( # Specifies the name of the library.
             serial_port

             # Sets the library as a shared library.
             SHARED

             IMPORTED

             serial_port/src/${ANDROID_ABI}/libserial_port.so

             # Provides a relative path to your source file(s).
             src/main/cpp/libs/armeabi/libserial_port.so )

我认为我做得不对。请看一看并指出我正确的方向。感谢

2 个答案:

答案 0 :(得分:4)

您需要将它们放在各自文件夹中的目录jniLibs内。

例如

/app/src/main/jniLibs/armeabi/libserial_port.so

并且您不需要使用任何其他工具(如CMake)来使用它们。你可以直接加载它们。

答案 1 :(得分:1)

Android Studio的默认JNI forlder为 jniLibs 。如果您将本机库放在此文件夹中,那么它将自动添加到应用程序构建路径。

在您的情况下,您已将本机代码放在 libs 文件夹中。要使其工作,您必须在 app / build.gradle 文件中指定新的JNI路径。您可以使用以下gradle脚本:---

android{

   sourceSets {
       main {
           jniLibs.srcDirs = ['libs']
       }
   }    

}