Android静态与共享库 我有一个Android项目,它由java文件和两个NDK库组成,C++和其他JNI。JNI共享库加载C++静态库并调用其中的一种方法。这是所有的文件
Android.mk Lib1.h Lib2.cpp 这是我加载Lib1的活动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
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");
}