Issue
It gives an error and couldn't load .so files. I searched it on the internet and read many things but didn't find an answer. I tried to use System.loadLibrary("jni_latinime") but it failed again. Please give me any advice. Thanks.
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.android.inputmethod.latin-1/base.apk"],nativeLibraryDirectories=[/data/app/com.android.inputmethod.latin-1/lib/arm, /vendor/lib, /system/lib]]] couldn't find "libjni_latinime.so"
at java.lang.Runtime.loadLibrary(Runtime.java:367)
at java.lang.System.loadLibrary(System.java:1076)
at com.android.inputmethod.latin.utils.JniUtils.<clinit>(JniUtils.java:33)
at com.android.inputmethod.latin.utils.JniUtils.loadNativeLibrary(JniUtils.java:46)
at com.android.inputmethod.latin.LatinIME.<clinit>(LatinIME.java:599)
at java.lang.Class.newInstance(Native Method)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:2877)
at android.app.ActivityThread.-wrap4(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1437)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5443)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
Solution
1.Set NDK PATH
2.add this in build.gradle
sourceSets.main {
jni.srcDirs = []
jniLibs.srcDir 'src/main/libs'
}
3.Create a Jni folder inside SRC direactory
4.Create- Android.mk--inside jni folder-
5.add in Android.mk file
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := "module name"//added inside system.load(); ** i used addjni**
LOCAL_SRC_FILES := Native.c //create a native.c class
LOCAL_LDLIBS := -llog -ljnigraphics
include $(BUILD_SHARED_LIBRARY)
6.Create a file Application.mk---inside jni folder---------------- and write this
APP_ABI := all
7.add inside MainActivity
public class MainActivity extends AppCompatActivity {
static {
System.loadLibrary("addjni");
}
TextView sum;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sum=(TextView)findViewById(R.id.sum);
int as=Native.sumoftwo(210,15);
Log.e("sum",as+"");
sum.setText(as+"");
}
}
8.create a new NativeNDK.c
//inside jni folder and add this //jave_packageName_Native(Classname)_(methodname) replace(. with -)
include<string.h>
include<jni.h>
jint JNICALL Java_droider_Native_sumoftwo(JNIEnv* env , jclass obj,jint a,jint b)
{
jint total=(a+b);
return total;
}
9. go to studio terminal and inside type command
cd app\src\main>D:\android-ndk-r10d\android-ndk-r10d\ndk-build APP_PLATFORM=android-8 enter
10. Native.c inside main/src
public class Native {
public native static int sumoftwo(int a,int b);
static {
System.loadLibrary("addjni");
}
}
11.copy all .so from libs and paste into jinLibs if exist else create and paste
Answered By - Sunil Chaudhary
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.