Android静态与共享库 我有一个Android项目,它由java文件和两个NDK库组成,C++和其他JNI。JNI共享库加载C++静态库并调用其中的一种方法。这是所有的文件

Android静态与共享库 我有一个Android项目,它由java文件和两个NDK库组成,C++和其他JNI。JNI共享库加载C++静态库并调用其中的一种方法。这是所有的文件,android,android-ndk,Android,Android Ndk,Android.mk Lib1.h Lib2.cpp 这是我加载Lib1的活动 public class TwocpplibtestActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(saved

Android.mk

Lib1.h

Lib2.cpp

这是我加载Lib1的活动

public class TwocpplibtestActivity extends Activity 
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    static
    {
        System.loadLibrary("Lib1");
    }
}
问题是在Android.mk文件中,当我将Lib2定义为include$BUILD_STATIC_LIBRARY时,一切正常,但当我将Lib2定义为include$BUILD_SHARED_LIBRARY时,我的活动在尝试加载Lib1时崩溃。你知道为什么会这样吗?我们不能在一个项目中同时拥有两个共享库吗?

这个怎么样

static
{
    System.loadLibrary("Lib2");
    System.loadLibrary("Lib1");
}

您的apk必须包括libLib2.so和libLib1.so。

LOCAL\u PATH:=$call my dir

包括$CLEAR\u VARS

本地_模块:=Lib2

本地_SRC_文件:=Lib2.cpp

包括$BUILD\u静态\u库

包括$CLEAR\u VARS

本地_模块:=Lib1

本地_SRC_文件:=Lib1.cpp

本地\u静态\u库:=Lib2

包括$BUILD\u共享\u库


Lib2是一个静态库,您应该使用本地静态库

Lib2实际加载了吗?正在尝试加载lib/data/data/mine.Twocpplibtest/lib/lib2.so添加了共享lib/data/data/mine.Twocpplibtest/lib/libLib2.soNope,日志中没有与之相关的内容
#include <jni.h>
#include "Lib1.h"
#include "Lib2.h"
using namespace Lib2ns;

JNIEXPORT void JNICALL Java_mine_twocpplibtest_TwocpplibtestActivity_TestMethod(JNIEnv * env, jobject obj)
{
    Lib2::TestChanged();
}
#ifndef Lib2_HEADER
#define Lib2_HEADER

using namespace std;

namespace Lib2ns
{
    class Lib2
    {
        public:
            static void  TestChanged();
    };
}
#endif
#include "Lib2.h"
using namespace Lib2ns;

void Lib2::TestChanged()
{
}
public class TwocpplibtestActivity extends Activity 
{
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    static
    {
        System.loadLibrary("Lib1");
    }
}
static
{
    System.loadLibrary("Lib2");
    System.loadLibrary("Lib1");
}