在Android Studio中编译谷歌自带输入法

介绍

近期开始做输入法的项目,所以必须要解决一些工程问题,在此记录下

第一篇先介绍编译篇,后续会增加java代码和native的代码分析篇


开始动手

首先,从谷歌的AOSP(Android Open Source Project)仓库git clone到本地

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

代码clone到本地后,代码的目录如下:

LatinIME目录结构

可以看到,目录下没有Eclipse的工程文件也没有Android Studio的工程文件,而是随Android源码编译的,有安卓源码的同学直接make -j4就能拿到编译的LatinIME的apk,相关的so可以在out/target/product/generic/system/lib取到,对安卓源码方式编译感兴趣的可以参考这里:

http://source.android.com/source/building.html

后续步骤不再赘述,下面主要描述没有安卓源码的编译方式

接下来,在Android Studio中新建一个工程,把LatinIME/java目录拷贝到src目录下,会有很多编译错误,java目录有如下代码:

LatinIME Java目录结构

通过报错可以看出,缺失了com.android.inputmethod.latin.common和com.android.inputmethodcommon这两个包的代码,以及一些零散类的实现

在AS中新建一个Module common,将LatinIME/common目录的文件拷贝到此模块,作为android library编译,编译还是报错,继续补全文件SettingsFragment的基类是InputMethodSettingsFragment,而这个类在源码中找不到,需要谷歌的源码中搜索,以下是缺失的文件地址:

https://android.googlesource.com/platform/frameworks/opt/inputmethodcommon/+/master/java/com/android/inputmethodcommon

最后,项目中用到了注解,javax.annotation等包找不到,需要补上jsr305,下载地址如下:

http://mvnrepository.com/artifact/com.google.code.findbugs/jsr305/3.0.1

到此为止,Java部分的编译就OK了,当然跑起来后loadLibrary会Crash,因为我们没有放入对应的so文件,native部分迁移到Android Studio会在下一篇中补上

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 129,083评论 19 550
  • 地址: chrome: ...
    郭学璞阅读 167评论 0 0
  • 2017.3.4 二月初七 周六 武汉 小雨 4-15 今天是晚上补的晨间日记,一到周末就打乱仗。 转载整理时间管...
    飞鸣的海燕阅读 26评论 0 0
  • 经常听见有人说我们现在这个社会世态炎凉人心冷漠,已经病入膏肓无药可医,我却从不这样认为,我觉得世间还是好人居多,人...
    二月之下阅读 107评论 0 4
  • 独立自信、睿智果断、风度不凡的你,自带时代精英魅力,善于打破固有界限、用思维革新创造全新可能……#你是真的你吗#全...
    yuxueliang阅读 18评论 0 0