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

안드로이드 NDK 에러좀 봐주세요. 같은 프로젝트인데 되는폰과 안되는 폰이 있네요...

0 추천

NDK를 이용해서 

간단하게 두 수를 더하는 예제를

책보고 구현했습니다.

 

결론부터 먼저 말씀드리자면

제폰은 노트3으로 구동했을때는 문제 없이 잘 돌아가는데

개발용으로 쓰고잇는 갤2로 구동했을때는 에러가 나면서 튕겨버립니다 ㅠㅠ

 

에러내용과 소스코드 첨부합니다. 

개발자님들 조언 부탁드립니다. ㅠㅠ

 

 

 

error----------------------

05-14 13:15:30.148: D/dalvikvm(14315): Late-enabling CheckJNI
05-14 13:15:30.303: I/System.out(14315): java.library.path=/vendor/lib:/system/lib
05-14 13:15:30.303: D/dalvikvm(14315): Trying to load lib libpluscalc.so 0x422a4560
05-14 13:15:30.303: W/dalvikvm(14315): Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lcom/example/pluscalc/plusForJNI;
05-14 13:15:30.303: D/AndroidRuntime(14315): Shutting down VM
05-14 13:15:30.303: W/dalvikvm(14315): threadid=1: thread exiting with uncaught exception (group=0x4182d2a0)
05-14 13:15:30.303: E/AndroidRuntime(14315): FATAL EXCEPTION: main
05-14 13:15:30.303: E/AndroidRuntime(14315): java.lang.ExceptionInInitializerError
05-14 13:15:30.303: E/AndroidRuntime(14315): at com.example.pluscalc.MainActivity.onCreate(MainActivity.java:29)
05-14 13:15:30.303: E/AndroidRuntime(14315): at android.app.Activity.performCreate(Activity.java:5206)
05-14 13:15:30.303: E/AndroidRuntime(14315): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
05-14 13:15:30.303: E/AndroidRuntime(14315): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
05-14 13:15:30.303: E/AndroidRuntime(14315): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
05-14 13:15:30.303: E/AndroidRuntime(14315): at android.app.ActivityThread.access$700(ActivityThread.java:140)
05-14 13:15:30.303: E/AndroidRuntime(14315): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
05-14 13:15:30.303: E/AndroidRuntime(14315): at android.os.Handler.dispatchMessage(Handler.java:99)
05-14 13:15:30.303: E/AndroidRuntime(14315): at android.os.Looper.loop(Looper.java:137)
05-14 13:15:30.303: E/AndroidRuntime(14315): at android.app.ActivityThread.main(ActivityThread.java:4921)
05-14 13:15:30.303: E/AndroidRuntime(14315): at java.lang.reflect.Method.invokeNative(Native Method)
05-14 13:15:30.303: E/AndroidRuntime(14315): at java.lang.reflect.Method.invoke(Method.java:511)
05-14 13:15:30.303: E/AndroidRuntime(14315): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
05-14 13:15:30.303: E/AndroidRuntime(14315): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
05-14 13:15:30.303: E/AndroidRuntime(14315): at dalvik.system.NativeStart.main(Native Method)
05-14 13:15:30.303: E/AndroidRuntime(14315): Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: load_library[1094]: Library 'libpluscalc.so' not found
05-14 13:15:30.303: E/AndroidRuntime(14315): at java.lang.Runtime.load(Runtime.java:340)
05-14 13:15:30.303: E/AndroidRuntime(14315): at java.lang.System.load(System.java:521)
05-14 13:15:30.303: E/AndroidRuntime(14315): at com.example.pluscalc.plusForJNI.<clinit>(plusForJNI.java:7)
05-14 13:15:30.303: E/AndroidRuntime(14315): ... 15 more
 
 
 
메인엑티비티 -------------------------------
 
package com.example.pluscalc;
 
import android.R.integer;
import android.app.Activity;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
 
public class MainActivity extends Activity implements android.view.View.OnClickListener{
 
TextView tv;
EditText etFirst;
EditText etSecond;
 
plusForJNI pfj;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
 
tv = (TextView)findViewById(R.id.result);
etFirst = (EditText)findViewById(R.id.firstfield);
etSecond = (EditText)findViewById(R.id.secondfield);
pfj = new plusForJNI();
 
Button btn = (Button)findViewById(R.id.Button01);
btn.setOnClickListener(this);
/*View btn;
btn = findViewById(R.id.Button01);
btn.setOnClickListener(this);*/
}
 
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
 
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String first = etFirst.getText().toString();
String second = etSecond.getText().toString();
 
int aa = Integer.decode(first);
int bb = Integer.decode(second);
 
tv.setText("" + pfj.addCalc(aa,  bb));
}
 
 
}
 
 
 
so파일 연결 클레스------------------------------------
 
package com.example.pluscalc;
 
public class plusForJNI {
static{
String libPath = System.getProperty("java.library.path");
        System.out.println("java.library.path=" + libPath);
System.load("libpluscalc.so");
}
private native int plusfromJNI(int first, int second);
public int addCalc(int a, int b){
return plusfromJNI(a,  b);
}
}
 

 

익명사용자 님이 2014년 5월 14일 질문

2개의 답변

0 추천
AP가 다르지 않나요? NDK를 할 때는 AP에 따라 로드되는 라이브러리가 다르기 때문에 AP의 유형에 따라 각각 라이브러리를 생성해줘야 합니다.
인연 (31,880 포인트) 님이 2014년 5월 14일 답변
답변 감사드립니다.
제가 아직 프로그래밍 초보라 용어도 잘 모르네요 ㅠㅠ
AP가 어떤걸 의미하는거죠??
수정할 부분이 있다면 어떻게 해야될지... 부탁드립니다.
AP는 일반 PC에서 보면 CPU에 해당하는 부분이라 생각하면 됩니다. NDK는 저도 어려워서 답변은 확실히 못 드리겠지만 일단 노트3에서는 돌아가는 코드가 갤럭시S2에서는 안 된다니 먼저 이 부분이 생각나네요. 에러는 라이브러리 파일을 못 찾아서 그런 에러로 생각되구요. 혹시나 라이브러리 파일 불러들이는 부분을 수정하였다면 다른분이 답변하신 것처럼 해야 라이브러리를 찾습니다. 뭐... 노트3에 돌아가는 코드라니 제대로 하셨겠지만....
0 추천
so 라이브러리를 로딩할 때는 lib 와 .so 부분을 빼고 써야 합니다.
System.loadLibrary("pluscalc") ;
익명사용자 님이 2014년 5월 14일 답변
이게 문제였네여
정말감사드립니다!!!!^^
...