在添加一些自定义代码以获取关键触摸的压力值之后,我正在尝试从5.0.2分支构建AOSP键盘。我正在使用lunch full-eng
构建源代码,并在添加更改后使用mm
构建LatinIME。
我在预优化方面遇到了问题,但在这方面有助于解决that问题。我现在遇到以下错误:
E/dalvikvm( 729): ERROR: couldn't find native method
E/dalvikvm( 729): Requested: Lcom/android/inputmethod/latin/BinaryDictionary;.createEmptyDictFileNative:(Ljava/lang/String;J[Ljava/lang/String;[Ljava/lang/String;)Z
W/dalvikvm( 729): Exception Ljava/lang/NoSuchMethodError; thrown while initializing Lcom/android/inputmethod/latin/utils/JniUtils;
W/dalvikvm( 729): Exception Ljava/lang/NoSuchMethodError; thrown while initializing Lcom/android/inputmethod/latin/LatinIME;
W/dalvikvm( 729): Class init failed in newInstance call (Lcom/android/inputmethod/latin/LatinIME;)
D/AndroidRuntime( 729): Shutting down VM
W/dalvikvm( 729): threadid=1: thread exiting with uncaught exception (group=0x41f1ada0)
E/AndroidRuntime( 729): FATAL EXCEPTION: main
E/AndroidRuntime( 729): Process: com.android.inputmethod.latin, PID: 729
E/AndroidRuntime( 729): java.lang.NoSuchMethodError: no static or non-static method "Lcom/android/inputmethod/latin/BinaryDictionary;.createEmptyDictFileNative(Ljava/lang/String;J[Ljava/lang/String;[Ljava/lang/String;)Z"
E/AndroidRuntime( 729): at java.lang.Runtime.nativeLoad(Native Method)
E/AndroidRuntime( 729): at java.lang.Runtime.doLoad(Runtime.java:435)
E/AndroidRuntime( 729): at java.lang.Runtime.loadLibrary(Runtime.java:363)
E/AndroidRuntime( 729): at java.lang.System.loadLibrary(System.java:526)
E/AndroidRuntime( 729): at com.android.inputmethod.latin.utils.JniUtils.<clinit>(JniUtils.java:28)
E/AndroidRuntime( 729): at com.android.inputmethod.latin.LatinIME.<clinit>(LatinIME.java:513)
E/AndroidRuntime( 729): at java.lang.Class.newInstanceImpl(Native Method)
E/AndroidRuntime( 729): at java.lang.Class.newInstance(Class.java:1208)
E/AndroidRuntime( 729): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2723)
E/AndroidRuntime( 729): at android.app.ActivityThread.access$1900(ActivityThread.java:169)
E/AndroidRuntime( 729): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1362)
E/AndroidRuntime( 729): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime( 729): at android.os.Looper.loop(Looper.java:146)
E/AndroidRuntime( 729): at android.app.ActivityThread.main(ActivityThread.java:5487)
E/AndroidRuntime( 729): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 729): at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime( 729): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
E/AndroidRuntime( 729): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
E/AndroidRuntime( 729): at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:132)
E/AndroidRuntime( 729): at dalvik.system.NativeStart.main(Native Method)
LatinIME.java
对此次通话有以下评论:
急切地加载本机库以避免意外 最初的UnsatisfiedLinkError JNI尽可能多地打电话。
JniUtils.java
拨打电话
System.loadLibrary(JniLibName.JNI_LIB_NAME);
其中JNI_LIB_NAME
应在com.android.inputmethod.latin.define.JniLibName
中定义。这是我认为我的问题部分存在的地方。
BinaryDictionary.java
不包含createEmptyDictFileNave
方法com.android.inputmethod.latin.define.JniLibName
。与往常一样,任何帮助都会非常受欢迎,因为我对Android源代码构建非常新。谢谢。
此致
伊恩
答案 0 :(得分:0)
我刚刚在您正在使用的软件包上提取this search,发现您正在查找的类和方法确实存在,并且由于某种原因您似乎没有在本地存储库中使用它。
您是否尝试过再次同步/拉动Google源代码?您可以在同步之前git stash
进行更改(您可以查看命令的详细信息及其使用情况here.
我正在进行一些系统应用修改/创建,当我使用mm
构建时,我需要的所有资源都可用。
我的最后一个建议是,在您尝试自行编译LatinIME之前,先确保make
full-eng
平台。我必须为我的应用程序执行此操作,我相信它也适用于您的情况。
祝你好运 - 希望结果很好!
答案 1 :(得分:0)
createEmptyDictFileNative位于BinaryDictionaryUtils,JNI_LIB_NAME位于here。
您可能有一个过时的libjni_latinime.so版本,它不包含为JNI导出的 createEmptyDictFileNative 函数。
拉出库并验证该方法是否存在:
adb pull /system/lib/libjni_latinime.so
nm -D libjni_latinime.so | grep createEmptyDictFile
如果库不存在,则需要重新安装/系统并安装它。如果本机方法不存在,则需要更新的libjni_latinime.so共享库