android - 无法解析对应的JNI函数 java_com_android_inputmethod_keyboard_ProximityInfo_setProximityInfoNative

标签 android android-studio android-ndk java-native-interface native

我正在构建 google-source 提供的 LatinIME 源代码在 android-studio 中,但我在 ProximityInfo.java 中遇到了一个错误 第 89 行显示一个对话框 like this我添加了一个 jni_latinime.sosrc/main/jniLibs like this . 但是bug还是没有修复,我做错了什么,现在该怎么办?

错误

droid.inputmethod.latin E/JniUtils: Could not load native library jni_latinime
   java.lang.UnsatisfiedLinkError: unknown failure
       at java.lang.Runtime.loadLibrary(Runtime.java:370)
       at java.lang.System.loadLibrary(System.java:535)
       at com.android.inputmethod.latin.utils.JniUtils.<clinit>(JniUtils.java:28)
       at com.android.inputmethod.latin.LatinIME.<clinit>(LatinIME.java:546)
       at java.lang.Class.newInstanceImpl(Native Method)
       at java.lang.Class.newInstance(Class.java:1319)
       at android.app.ActivityThread.handleCreateService(ActivityThread.java:2406)
       at android.app.ActivityThread.access$1700(ActivityThread.java:140)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1326)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:137)
       at android.app.ActivityThread.main(ActivityThread.java:4944)
       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:1038)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
       at dalvik.system.NativeStart.main(Native Method)
05-28 21:58:48.483 1642-1957/system_process E/InputMethodManagerService: checkCscDefaultIme : mCscDefaultImePackageName is wrong
05-28 21:58:48.493 1642-1957/system_process E/InputMethodManagerService: checkCscDefaultIme : mCscDefaultImePackageName is wrong
05-28 21:58:48.834 12819-12819/com.android.inputmethod.latin E/dalvikvm: Could not find class 'android.os.UserManager', referenced from method com.android.inputmethod.compat.UserManagerCompatUtils.<clinit>
05-28 21:58:48.844 12819-12819/com.android.inputmethod.latin E/dalvikvm: Could not find class 'android.os.UserManager', referenced from method com.android.inputmethod.compat.UserManagerCompatUtils.getUserLockState
05-28 21:58:48.954 12819-12819/com.android.inputmethod.latin E/AndroidRuntime: FATAL EXCEPTION: main
  android.view.InflateException: Binary XML file line #2: Error inflating class com.android.inputmethod.keyboard.emoji.EmojiPalettesView
      at android.view.LayoutInflater.createView(LayoutInflater.java:619)
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:693)
      at android.view.LayoutInflater.parseInclude(LayoutInflater.java:818)
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:742)
      at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
      at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
      at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
      at com.android.inputmethod.keyboard.KeyboardSwitcher.onCreateInputView(KeyboardSwitcher.java:464)
      at com.android.inputmethod.latin.LatinIME.onCreateInputView(LatinIME.java:752)
      at android.inputmethodservice.InputMethodService.updateInputViewShown(InputMethodService.java:1227)
      at android.inputmethodservice.InputMethodService.showWindowInner(InputMethodService.java:1628)
      at android.inputmethodservice.InputMethodService.showWindow(InputMethodService.java:1595)
      at android.inputmethodservice.InputMethodService$InputMethodImpl.showSoftInput(InputMethodService.java:521)
      at android.inputmethodservice.IInputMethodWrapper.executeMessage(IInputMethodWrapper.java:192)
      at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:61)
      at android.os.Handler.dispatchMessage(Handler.java:99)
      at android.os.Looper.loop(Looper.java:137)
      at android.app.ActivityThread.main(ActivityThread.java:4944)
      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:1038)
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805)
      at dalvik.system.NativeStart.main(Native Method)
   Caused by: java.lang.reflect.InvocationTargetException
      at java.lang.reflect.Constructor.constructNative(Native Method)
      at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
      at android.view.LayoutInflater.createView(LayoutInflater.java:593)
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:693) 
      at android.view.LayoutInflater.parseInclude(LayoutInflater.java:818) 
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:742) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:495) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
      at com.android.inputmethod.keyboard.KeyboardSwitcher.onCreateInputView(KeyboardSwitcher.java:464) 
      at com.android.inputmethod.latin.LatinIME.onCreateInputView(LatinIME.java:752) 
      at android.inputmethodservice.InputMethodService.updateInputViewShown(InputMethodService.java:1227) 
      at android.inputmethodservice.InputMethodService.showWindowInner(InputMethodService.java:1628) 
      at android.inputmethodservice.InputMethodService.showWindow(InputMethodService.java:1595) 
      at android.inputmethodservice.InputMethodService$InputMethodImpl.showSoftInput(InputMethodService.java:521) 
      at android.inputmethodservice.IInputMethodWrapper.executeMessage(IInputMethodWrapper.java:192) 
      at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:61) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.app.ActivityThread.main(ActivityThread.java:4944) 
      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:1038) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 
      at dalvik.system.NativeStart.main(Native Method) 
   Caused by: java.lang.UnsatisfiedLinkError: Native method not found: com.android.inputmethod.keyboard.ProximityInfo.setProximityInfoNative:(IIIIII[II[I[I[I[I[I[F[F[F)J
      at com.android.inputmethod.keyboard.ProximityInfo.setProximityInfoNative(Native Method)
      at com.android.inputmethod.keyboard.ProximityInfo.createNativeProximityInfo(ProximityInfo.java:222)
      at com.android.inputmethod.keyboard.ProximityInfo.<init>(ProximityInfo.java:81)
      at com.android.inputmethod.keyboard.Keyboard.<init>(Keyboard.java:123)
      at com.android.inputmethod.keyboard.internal.KeyboardBuilder.build(KeyboardBuilder.java:196)
      at com.android.inputmethod.keyboard.KeyboardLayoutSet.getKeyboard(KeyboardLayoutSet.java:232)
      at com.android.inputmethod.keyboard.KeyboardLayoutSet.getKeyboard(KeyboardLayoutSet.java:204)
      at com.android.inputmethod.keyboard.emoji.EmojiCategory.getKeyboard(EmojiCategory.java:374)
      at com.android.inputmethod.keyboard.emoji.EmojiCategory.addShownCategoryId(EmojiCategory.java:223)
      at com.android.inputmethod.keyboard.emoji.EmojiCategory.<init>(EmojiCategory.java:176)
      at com.android.inputmethod.keyboard.emoji.EmojiPalettesView.<init>(EmojiPalettesView.java:120)
      at com.android.inputmethod.keyboard.emoji.EmojiPalettesView.<init>(EmojiPalettesView.java:96)
      at java.lang.reflect.Constructor.constructNative(Native Method) 
      at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 
      at android.view.LayoutInflater.createView(LayoutInflater.java:593) 
      at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:693) 
      at android.view.LayoutInflater.parseInclude(LayoutInflater.java:818) 
      at android.view.LayoutInflater.rInflate(LayoutInflater.java:742) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:495) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
      at android.view.LayoutInflater.inflate(LayoutInflater.java:353) 
      at com.android.inputmethod.keyboard.KeyboardSwitcher.onCreateInputView(KeyboardSwitcher.java:464) 
      at com.android.inputmethod.latin.LatinIME.onCreateInputView(LatinIME.java:752) 
      at android.inputmethodservice.InputMethodService.updateInputViewShown(InputMethodService.java:1227) 
      at android.inputmethodservice.InputMethodService.showWindowInner(InputMethodService.java:1628) 
      at android.inputmethodservice.InputMethodService.showWindow(InputMethodService.java:1595) 
      at android.inputmethodservice.InputMethodService$InputMethodImpl.showSoftInput(InputMethodService.java:521) 
      at android.inputmethodservice.IInputMethodWrapper.executeMessage(IInputMethodWrapper.java:192) 
      at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:61) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.app.ActivityThread.main(ActivityThread.java:4944) 
      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:1038) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:805) 
      at dalvik.system.NativeStart.main(Native Method) 

最佳答案

您的屏幕截图表明您的 jniLibs 包含一个带有预构建 native 库的 jar 文件。我不知道这甚至是可能的,但是是的,它适用于 Android Studio 2.3 及更高版本。不错!

无论如何,正如我解释的那样elsewhere ,不要期望 Android Studio 神奇地将本地方法声明解析为预构建库(即使它被解压到 src/main/jnLibs)。

您可以简单地忽略此错误消息:您的 APK 仍将安装预构建库,并且本地方法将在运行时解析。

您可以为此方法或整个类添加 @SuppressWarnings("JniMissingFunction") 注释:

@SuppressWarnings("JniMissingFunction")
public class ProximityInfo {

或为给定项目或所有项目配置这种 Lint 检查: Preferences/Editor/Inspections

关于android - 无法解析对应的JNI函数 java_com_android_inputmethod_keyboard_ProximityInfo_setProximityInfoNative,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44219741/

相关文章:

java - 尝试加载新数据时 Firebase LimitToLast 崩溃

Android:在密度相同但尺寸不同的屏幕上拟合图像

android - 使用 Dagger 2 提供一个空的 Providers 映射的 @Multibiding

Android Studio 找不到基本名称消息的包。AndroidJpsBundle,区域设置 en_US

c - 通过 Android NDK 编译 C++ 文件时出错

Android 日志打印 CString

android - Android 是否支持任何 API 来记录电话?

java - 如何循环播放多个图像的淡入和淡出动画?

android - PluginApplicationException : Failed to apply plugin class 'FlutterPlugin'

android - UE4 NDK android-19 找不到 'log2'