无法在模拟器中访问 NDK 模块
Unable to access NDK module in emulator
我正在使用 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'])
}
最后还是自己发现了问题
System.load("HelloJNI");
这就是apk加载失败的要点
System.load图书馆("HelloJNI");
这是正确的功能。代码完成很棒,但有时可能会让人愚蠢:)
调用System.load()
.
时必须指定库的完整路径名
但是如果您使用 System.loadLibrary()
加载本机库,框架的实现将在 java.library.path
和环境变量 LD_LIBRARY_PATH
.[=14 指定的值中搜索您的库名称=]
我正在使用 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'])
}
最后还是自己发现了问题
System.load("HelloJNI");
这就是apk加载失败的要点
System.load图书馆("HelloJNI");
这是正确的功能。代码完成很棒,但有时可能会让人愚蠢:)
调用System.load()
.
但是如果您使用 System.loadLibrary()
加载本机库,框架的实现将在 java.library.path
和环境变量 LD_LIBRARY_PATH
.[=14 指定的值中搜索您的库名称=]