我使用Android studio 1.0.2生成.so
库。当我在模拟器上加载应用程序时,加载模块时出错。错误消息是:
dlopen failed: library "HelloJNI" not found
这是我的
MainActivity.java:
public native String HelloJNI();
static
{
System.load("HelloJNI");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText(HelloJNI());
setContentView(tv);
}
HelloJNI.c
JNIEXPORT jstring JNICALL Java_com_example_linda_myapplication_MainActivity_HelloJNI(JNIEnv *env, jobject obj){
(*env)->NewStringUTF(env, "Hello from JNI");
}
build.gradle
apply plugin: 'com.android.application'android {
compileSdkVersion 19
buildToolsVersion '19.1.0'
defaultConfig {
applicationId "com.example.linda.myapplication"
minSdkVersion 17
targetSdkVersion 19
versionCode 1
versionName "1.0"
ndk{
moduleName "HelloJNI"
//cFlags "-DANDROID_NDK -D_DEBUG DNULL=0" // Define some macros
//ldLibs "EGL", "GLESv3", "dl", "log" // Link with these libraries!
//stl "stlport_shared" // Use shared stlport library
}
}
sourceSets.main
{
jniLibs.srcDir 'src/main/libs'
jni.srcDirs = []
}
productFlavors{
x86{
ndk{
abiFilter "x86"
}
}
armv7a{
ndk{
abiFilter "armeabi-v7a"
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
}
答案 0 :(得分:0)
最后,我自己发现了这个问题。
System.load( “HelloJNI”);
这是让apk失败加载的重点。
的System.loadLibrary( “HelloJNI”);
这是正确的功能。代码完成很棒,但有时人们可能很愚蠢:)
答案 1 :(得分:0)
使用电话System.load()
时,您必须指定图书馆的完整路径名。
但是如果您使用System.loadLibrary()
加载本机库,框架的实现将使用java.library.path
和环境变量LD_LIBRARY_PATH
指定的值搜索您的库名称。