18

我想对 LatinIME 进行一些更改。我从 git 存储库中获得了代码-

git clone https://android.googlesource.com/platform/packages/inputmethods/LatinIME

但我不知道如何从代码中构建 apk 文件。如果有人从代码中构建了 LatinIME,请分享说明。

具体来说,我想知道如何构建字典工具(我想我需要 ndk),如何构建本机代码(我再次猜想它需要 ndk)以及最后如何使用来自本机的 lib 文件构建 java 代码代码。

我尝试通过将根目录作为 LatinIME/java 在 Eclipse 中创建 Android 应用程序项目(使用现有代码选项),我能够编译但由于它没有 libjni_latinime.so,因此它崩溃了。然后我从模拟器中获取了 .so 文件并将其放在 libs/armeabi-v7a 文件夹中。现在我得到了这个例外:

10-15 12:54:55.289: E/AndroidRuntime(32253): FATAL EXCEPTION: InitializeBinaryDictionary 
10-15 12:54:55.289: E/AndroidRuntime(32253): android.content.res.Resources$NotFoundException: File res/raw/main_en.dict from drawable resource ID #0x7f070003
4

4 回答 4

6

我想我可能已经解决了这个问题......

在另一个项目中遇到了类似的问题,其中资源由于文件扩展名而被不必要地压缩,我将字典 (.dict) 重命名为 .jet - 从压缩中排除的扩展名。瞧,字典现在正在工作。不确定现在字典未压缩时所看到的分辨率有多好,但至少它是朝着正确方向迈出的一步?

于 2014-05-04T15:08:30.530 回答
6

到目前为止,我已经为不同的项目多次定制了 LatinIME。我从来没有遇到过这个问题。但是我从来没有使用过eclipse来创建apks。我将整个 AOSP 代码下载到我的机器上,并使用 AOSP 编译了修改后的源代码。并mm在 out 文件夹中创建 apk 文件,并且可以安装adb install -r latinime.apk

这是下载 AOSP 的方法:http: //source.android.com/source/downloading.html 这里是最初的编译方法:http: //source.android.com/source/initializing.htmlhttp:// /xda-university.com/as-a-developer/getting-started-building-android-from-source

并且LatinIME可以在中找到<android roo>/packages/inputmethods/LatinIME,修改代码和cd到相同的路径并运行mm(你需要在同一个终端做source build/envisetup.shlunch full-eng做之前做mm

于 2014-05-05T09:28:03.837 回答
5

首先是一些背景。正如另一个答案问题所暗示的那样,似乎与.dict正在压缩的文件有关。例如,您可以在项目的 LatinIME 测试中看到官方 Android 构建如何解决这个问题

# Do not compress dictionary files to mmap dict data runtime
LOCAL_AAPT_FLAGS += -0 .dict

快速搜索一下网络就会发现,如今这种来自 Eclipse 的指令或指示 aapt 并非易事。build.xml如果您想正确处理案例,您可能最终会创建一个don't-compress-dicts

一个很好的建议是这个关于如何指示不要压缩某些文件的答案/问题。aapt

如果您想从您提供的官方 git 链接构建它,您最终将构建整个 Android 存储库,您可以按照构建运行说明进行操作

于 2014-05-05T08:15:34.387 回答
3

如果使用 gradle,添加这个

android {
 aaptOptions {
        noCompress 'dict'
    }
于 2016-04-27T08:05:55.290 回答