Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ndk 如何在另一个android应用程序中使用预编译的.so文件?_Android Ndk_Shared Objects - Fatal编程技术网

Android ndk 如何在另一个android应用程序中使用预编译的.so文件?

Android ndk 如何在另一个android应用程序中使用预编译的.so文件?,android-ndk,shared-objects,Android Ndk,Shared Objects,我想知道为什么这个问题没有正确的答案,我搜索了几个小时却没有找到好答案。 因此,我们在一个团队中工作,在这个团队中,我的朋友编写了一个C库,并将其编译为一个.So文件(称为ttplib.So)(假设我没有访问它的C代码)。现在我必须在我的android应用程序中使用这个.so文件。但我不知道如何加载库以及如何使用它的方法。我有很好的文档。 如果你能告诉我如何创建Android.mk文件,那就太好了。 我必须使用dlopen吗?将ttplib.so放在新项目的libs/armeabi或libs/a

我想知道为什么这个问题没有正确的答案,我搜索了几个小时却没有找到好答案。 因此,我们在一个团队中工作,在这个团队中,我的朋友编写了一个C库,并将其编译为一个.So文件(称为ttplib.So)(假设我没有访问它的C代码)。现在我必须在我的android应用程序中使用这个.so文件。但我不知道如何加载库以及如何使用它的方法。我有很好的文档。 如果你能告诉我如何创建Android.mk文件,那就太好了。
我必须使用dlopen吗?

将ttplib.so放在新项目的libs/armeabi或libs/armeabi-v7a文件夹中,具体取决于它是用什么编译的

在新应用程序的某个地方(在与库交互之前)添加这行代码

System.loadLibrary( "ttplib" );
现在它已加载到内存中,您需要使用JNI与它进行交互。您必须返回C代码以导出一些JNI函数:

JNIEXPORT jint JNICALL Java_com_example_package_MyClass_methodName( JNIEnv* env, jobject jthis, jfloat value )
{
    return 5;
}
然后,您需要在新项目中添加ClassName.java:

package com.example.package;

public class MyClass
{
    private native int methodName( float value );

    private void someJavaMethod()
    {
        int i = methodName( 65.33f );
    }
}

简而言之,就是这样。

但这是为了在应用程序中用C编写代码,而不是为了在已有共享库的情况下调用它的函数。@Gabriel你现在知道怎么做了吗。那就请帮我吧