Saya mencoba membuat aplikasi helloy-jni di Android Studio dan saya memiliki pengecualian
06-27 13:17:19.099 12714-12714/com.example.testjni2 E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.ExceptionInInitializerError
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1319)
at android.app.Instrumentation.newActivity(Instrumentation.java:1071)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2166)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2299)
at android.app.ActivityThread.access$700(ActivityThread.java:154)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1284)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5306)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.UnsatisfiedLinkError: Couldn't load hello-jni from loader dalvik.system.PathClassLoader[dexPath=/data/app/com.example.testjni2-1.apk,libraryPath=/data/app-lib/com.example.testjni2-1]: findLibrary returned null
at java.lang.Runtime.loadLibrary(Runtime.java:365)
at java.lang.System.loadLibrary(System.java:535)
at com.example.testjni2.MainActivity.<clinit>(MainActivity.java:9)
... 15 more
Proyek struktur saya terlihat seperti ini
Saya menambahkan baris build.gradle saya:
compile files('libs/armeabi/libhello-jni.so')
Tapi ini tidak membantu. Saya membaca Gradle dan plugin Android Gradle, tetapi saya tidak menemukan informasi tentang bekerja dengan folder jni
Saya berpikir apa itu file dependencies, tetapi tidak berfungsi
File hello-jni.c saya termasuk
jstring Java_com_example_testjni2_MainActivity_stringFromJNI (JNIEnv *env, jobject thiz){
return (*env)->NewStringUTF(env, "Hello from JNI !");
}
File MainActivity saya termasuk
public class MainActivity extends Activity {
static {
System.loadLibrary("hello-jni");
}
public native String stringFromJNI();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String text = stringFromJNI();
Log.i("MainActivity", text);
}
@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;
}
}
File Android.mk saya berisi
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_SHARED_LIBRARY)
Tolong beritahu saya, di mana saya bisa membuat kesalahan.
Android Studio 0.1.7 OS - Windows 7 x64
Ada cara lain untuk mengimpornya ke proyek android.
Sistem build gradle saat ini tidak mendukung bundling native library. Periksa https://groups.google.com/d/msg/adt-dev/nQobKd2Gl_8/Z5yWAvCh4h4J untuk beberapa tugas khusus yang perlu Anda tambahkan ke build.gradle Anda.
Perhatikan bahwa ini adalah solusi sementara sampai gradle mendukung pembuatan proyek native.
Ada cara baru untuk bekerja dengan file *.so pada gradle 0.7.3 Silakan periksa tautan ini https://stackoverflow.com/questions/16952388/android-studio-zbar/21284740#21284740