마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 팩키지명 지정 관련

0 추천

안녕하세요..

현재 이클립스에서 "java.lang.UnsatisfiedLinkError: Native method not found: " 에러가 발생합니다.

검색해보니깐 => JNI와 자바 패키지명을 제대로 주었는지 확인(함수명이 패키지명으로 포함 되어 있어어야함)

관련 답변들이 있던데요..  제가 이해가 안가서 질문 드립니다. 

 

기존 : 메인 하나의 액티비티에서만 JNI 함수 정의 하고 사용  => 오류 없음

수정 : 메인 액티비티에서 인텐트로 사용하는 신규 액티비티에서 JNI 함수 정의 하고 사용 =>  위와 같은 오류 발생

 

오류가 나는 소스 캡처 이미지를 못올려서 아래처럼 소스를 적었습니다.

검색한 것 처럼 팩키지명 문제 같은데, 어떻게 고쳐야 할지 모르겠습니다.

인텐트 액티비티에서 JNI 쓰는게 쉽지 않네요.

 

폴더 트리

src\com\andev\demo\ 파일 3개 ( REGJNI.java, Demo.java, intentActivity

jni\ 2개 ( Android.mk , REGJNI.c )

 

프로젝트의 jni 폴더 REGJNI.c

#include <jni.h>
#include <stdio.h>


JNIEXPORT jint JNICALL Java_com_andev_demo_REGJNI_read_test( JNIEnv *env, jobject thiz ) {
    system("cat read_test");
    return 0;
}

프로젝트의 src폴더에 com.andev.demo에 Demo.java  --메인엑티비티

package com.andev.demo;

public class Demo extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    ....

프로젝트의 src폴더에 com.andev.demo에 IntentActivity.java --인텐트엑티비티

package com.andev.demo;

public class IntentActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {

    여기서 JNI 함수 호출 및 사용

    ....

프로젝트의 src폴더에 com.andev.demo에 REGJNI.java

package com.andev.demo;

public class REGJNI {
    public native int read_test();
 
    static{
        System.loadLibrary("regjni");
    }

 

 

 

 

Eu없eni가joa (150 포인트) 님이 2013년 7월 10일 질문
Eu없eni가joa님이 2013년 7월 10일 수정

1개의 답변

0 추천
 
채택된 답변

JNI C쪽 함수명에서 언더바는 패키지 또는 클래스 구분자로 사용됩니다.

함수명에 _를 사용하려면 _1로 사용하세요.

Java_com_andev_demo_REGJNI_read_test 를

Java_com_andev_demo_REGJNI_read_1test 로 바꾸시면 될겁니다.

레오나 (3,290 포인트) 님이 2013년 7월 10일 답변
Eu없eni가joa님이 2013년 7월 10일 채택됨
감사합니다.. 아직 이해가 안돼지만... 와^^... 되네요..
인텐트 액티비티 만들기 전에 메인액티비티 하나에서는 _ 해도 잘되던데..... 신기하네요.
함수명에 _ 사용하려면 무조건 _1가 필요한가요? _2 , _3 ... 이런건 안돼는 거겠죠?
...