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);
}
}