首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android-NDK编译和链接

Android-NDK编译和链接
EN

Stack Overflow用户
提问于 2012-09-27 04:44:59
回答 2查看 1.4K关注 0票数 2

我有一个java项目,现在我想添加一些NDK功能。

这是我的Android.mk

代码语言:javascript
复制
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := android
LOCAL_CFLAGS    := -Wno-psabi
LOCAL_SRC_FILES := android.c
LOCAL_LDLIBS    := -L$(SYSROOT)/usr/lib -llog

include $(BUILD_SHARED_LIBRARY)

这是我的android.c

代码语言:javascript
复制
#include <jni.h>  
#include <string.h>  
#include <android/log.h>  

#define DEBUG_TAG "NDK_AndroidNDK1SampleActivity"  

void Java_ru_tonybo_app_NativeRenderer_print(JNIEnv* env, jobject thiz, jstring message) {
    jboolean isCopy;  
    const char * szMessage = (*env)->GetStringUTFChars(env, message, &isCopy);

    __android_log_print(ANDROID_LOG_DEBUG, DEBUG_TAG, "NDK:LC: [%s]", szMessage);

    (*env)->ReleaseStringUTFChars(env, message, szMessage);
}

下面是我的相关java类

代码语言:javascript
复制
package ru.tonybo.app;

public class NativeRenderer {
    public NativeRenderer (String message) {
        print(message);
    }

    public native void print(String message);

    static {
        System.loadLibrary("android");
    }
}

通过cygwin编译NDK是可以的

代码语言:javascript
复制
TonyBo@TonyBo-NoteBook /cygdrive/d/javaProjects/App_JNI/jni
$ /cygdrive/d/android-ndk-r8b/ndk-build -B
Cygwin         : Generating dependency file converter script
Compile thumb  : android <= android.c
SharedLibrary  : libandroid.so
Install        : libandroid.so => libs/armeabi/libandroid.so

将创建libandroid.so并将其放置在/libs/armeabi/libs roid.so中

但是,当我在设备上用eclipse启动应用程序时,在本机调用print(message);时得到了异常UnsatisfiedLinkError

我在这里遗漏了什么或者做错了什么?也许我应该以某种方式告诉eclipse去寻找共享库,如果是这样,该怎么做呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-27 17:32:58

您选择的类库名称不是一个好主意。库libandroid.so位于系统文件夹/ system /lib中。它被加载到您的应用程序中,因此您的Load()调用只是返回。如果你改变你的本地库的名字,一切都会好起来的。

票数 3
EN

Stack Overflow用户

发布于 2012-09-27 18:38:42

您需要从共享库中正确导出您的方法。在方法声明中使用JNIEXPORTJNICALL宏:

代码语言:javascript
复制
JNIEXPORT void JNICALL Java_ru_tonybo_app_NativeRenderer_print(...)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12610107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档