同文编译手记
RIME
浏览 - 次 字数5724 2019-05-16

工具准备

环境准备

一:安装 Java 支持

sudo apt install openjdk-11-jdk openjdk-11-jre

如上,将安装 Java 支持到系统,接下来,为之添加「环境变量」

gedit ~/.bashrc

在打开的文件末尾,添加如下内容,如有疑虑,可与之前的内容之间留一些空格,在这里,顺手把「gradle」需要的环境变量也添加上去。

下面第一行路径中的「pc」是我的当前登录到 Ubuntu 的用户名,你需要改成你的,这里不支持相对路径。

export ANDROID_HOME="/home/pc/Android/Sdk"
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
export PATH=$PATH:/opt/gradle-5.2.1/bin:${JAVA_HOME}/bin:${ANDROID_HOME}/tools:${ANDROID_HOME}/platform-tools:${ANDROID_HOME}/ndk-bundle

在终端中,用下面的命令,刷新一次「环境变量」:

source .bashrc

然后,验证 Java 支持:

java --version

弹出 Java 版本,则安装 Java 环境成功。

二:安装 Gradle

刚才,已经在添加了「 /opt/gradle-5.2.1/bin 」,把预备好的包解压,取出里面的「 gradle-5.2.1 」(里面有「 bin 」的子目录),放到系统的 opt 目录里。因为 opt 的权限默认不可写,先给它换换权限:

sudo chmod -R 777 /opt

这样一来,Gradle 的路径就放好了,现在验证一下:

gradle -v

出现版本信息,则证明成功了。

三:编译 Glog 和 Gtest

安装一下其它依赖:

sudo apt install cmake python git libyaml-cpp-dev -y

分别——分别——分别——在两者的文件夹内打开终端,以下命令编译它们

mkdir build
cd build
cmake ..
make
sudo make install

部署 SDK

这里,需要 VPN 环境,连好 VPN,我们开始了。 把预备好的「Android studio」解压出「Android studio」文件夹,然后放到系统的 opt 目录里。进入它的子目录——bin文件夹下,打开终端:

./studio.sh

将会弹出绿色的ico在任务栏里,提示你对「Android studio」做一些初始化的设置。

「Do not import settings」⇒ 「standard」⇒ 一路「next」⇒ 下载一些工具 ⇒ 等待完成 ⇒ 「Android SDK is up to date」 ⇒ 「Finish」

到此 SDK 部署成功,关掉该程序。

拉代码

在「文档」中新建「trime」文件夹,进入其中,打开终端:

git clone --recursive https://github.com/osfans/trime.git trime

这个过程会很久,因为大约会拉下来 1.5 GB 数据。

打开文本编辑器,输入如下内容,保存为「98-trime.sh」,再把这个脚本文件放到代码的根目录下面:

#!/bin/bash
my_name_s="五笔98版"
my_name_t="五筆98版"
my_folder="WB98"
my_package="trime_3"
echo "『包名』和『存储目录』同时修改过后,才能与原版本存。"
echo "修改后的『简体名称』是:${my_name_s}"
echo "修改后的『繁体名称』是:${my_name_t}"
echo "修改后的『存储目录』是:${my_folder}"
echo "修改后的『包名』是:${my_package}"
echo "修改 Makefile 配置文件的『默认路径』。"
sed -i "s/\/rime\//\/${my_folder}\//g" ./Makefile
echo "修改 build.gradle 配置文件的『包名称』。"
sed -i "s/com.osfans.trime/com.osfans.${my_package}/g" ./app/build.gradle
echo "修改『包目录』。"
mv ./app/src/main/java/com/osfans/trime ./app/src/main/java/com/osfans/${my_package}
mv ./app/src/main/assets/rime ./app/src/main/assets/${my_folder}
echo "修改 AndroidManifest 中的『包名称』。"
sed -i "s/com.osfans.trime/com.osfans.${my_package}/g" ./app/src/main/AndroidManifest.xml
echo "修改 JAVA 中的『包名称』。"
sed -i "s/com.osfans.trime/com.osfans.${my_package}/g" ./app/src/main/java/com/osfans/${my_package}/enums/*.java
sed -i "s/com.osfans.trime/com.osfans.${my_package}/g" ./app/src/main/java/com/osfans/${my_package}/*.java
sed -i "s/\"rime/\"${my_folder}/g" ./app/src/main/java/com/osfans/${my_package}/ResetDialog.java
sed -i "s/\"rime\"/\"${my_folder}\"/g" ./app/src/main/java/com/osfans/${my_package}/Config.java
echo "修改 CMakeLists.txt 中的『类名称』。"
sed -i "s/\/trime\//\/${my_package}\//g" ./app/src/main/jni/CMakeLists.txt
echo "修改『软件名称』。"
sed -i "s/同文输入法/${my_name_s}/g" ./app/src/main/res/values-zh-rCN/strings.xml
sed -i "s/同文輸入法/${my_name_t}/g" ./app/src/main/res/values-zh-rTW/strings.xml
echo "修改 donottranslate.xml 文件的『默认路径』。"
sed -i "s/sdcard\/rime/sdcard\/${my_folder}/g" ./app/src/main/res/values/donottranslate.xml
echo "修改 xml 文件夹的『包名称』。"
sed -i "s/com.osfans.trime/com.osfans.${my_package}/g" ./app/src/main/res/xml/method.xml
sed -i "s/<com.osfans.trime./<com.osfans.${my_package}./g" ./app/src/main/res/xml/prefs.xml
echo "修改 layout 文件夹的『包名称』。"
sed -i "s/com.osfans.trime/com.osfans.${my_package}/g" ./app/src/main/res/layout/*.xml
unset my_name_s
unset my_name_t
unset my_folder
unset my_package
echo "修改完成,可以放入配置文件打包了!"

这个「98-trime.sh」,是用来修改程序包名,及相关内容的。所以,在代码包的根目录下,打开终端:

sudo chmod 777 ./98-trime.sh
./98-trime.sh

应该会显示如下内容:

$ ./98-trime.sh
『包名』和『存储目录』同时修改过后,才能与原版本存。
修改后的『简体名称』是:五笔98版
修改后的『繁体名称』是:五筆98版
修改后的『存储目录』是:WB98
修改后的『包名』是:trime_3
修改 Makefile 配置文件的『默认路径』。
修改 build.gradle 配置文件的『包名称』。
修改『包目录』。
修改 AndroidManifest 中的『包名称』。
修改 JAVA 中的『包名称』。
修改 CMakeLists.txt 中的『类名称』。
修改『软件名称』。
修改 donottranslate.xml 文件的『默认路径』。
修改 xml 文件夹的『包名称』。
修改 layout 文件夹的『包名称』。
修改完成,可以放入配置文件打包了!

改完代码之后,我们开始用「Android studio」对代码进行依赖检测。

打开「Android studio」的方法,就是进入到「Android studio」目录下的「bin」文件中,以「studio.sh」这个shell脚本调用,完整命令如下,在终端中输入:

/opt/android-studio/bin/studio.sh

可能会有提示「Failed to load module “canberra-gtk-module”」,不用管它,这是程序外观的GTK组件不全,不影响编译工具的使用。

在弹出的窗中,用「open an existing Android Studio project」,一步步找到你在「文档」下建的「trime」,在「trime」下拉下来的代码,有个「绿色」的「trime」图标,选中它,点「OK」确认。

A : 修改 VM 参数

在程序的标题栏中:Help ⇒ Edit Custom VM Options ⇒ Create ? ⇒ Ctreat !

填入:

-Xms256m
-Xmx8192m
-XX:ReservedCodeCacheSize=2048m
-XX:+UseCompressedOops
-XX:MaxPermSize=4096m

填完之后,ctrl + S 保存一下。

然后,要退出「Android studio」,并重新打开,以让刚才的参数生效,这个参数非常重要,关系着编译的进度能否完成。

重开之后,再到 Help 中的 VM 项中看一下,刚才的填的数还在不在。

B : 分析依赖

在标题栏中有「File」,点来有下弹菜单,其中有「Sync Project with Gradle Files」,点这里,会进行依赖检测,然后,按程序下方的分栏——「Sync」所指示,点击安装若干具体版本的依赖细节。

比如「Install NDK」,这个会很大,785 MB 。这些都是从「dl.google」上下载的,所以,你懂的,没有 VPN 是不行的。

还可能会要求「Install CMake 3.10.2」。

一波操作之后,注意,可能会弹出 「Android Gradle Plugin Update Recommended」的窗口,它是要求你升级 Gradle 版本的,不要升,要点「Don’t remind me again for this project」。

如果升了,可能会中途报错。

拒绝了这个升级建议之后,「Android studio」会预编译一些文件索引,注意看「Android studio」的底边框,有「Build Symbols…」的提示,你用鼠标点一下这里,会显示详情。

让它建一下索引吧,这个过程会很慢,得等。

索引建完之后,我们来生成签名文件。

生成签名文件

标题栏中「Build」-「Generate Signed Bundle / APK …」-「APK」-「Next」-「Key store path」(Create new)。

接下来,弹出一个「New Key Store」:

然后,程序下框处,会有「Gradle Build Running」的字样,出现这个,代表签名文件已做好了,现在关掉程序。我们要编译软件了。

写入签名引导

代码根目录下,终端输入:

gedit ./gradle.properties

写入:

storePassword=98wb98wb
keyPassword=98wb98wb
keyAlias=key0
storeFile=key/98wb.jks

保存。

写入路径引导

代码根目录下,终端输入:

gedit ./local.properties

写入:

下面两行路径中的「pc」是我的当前登录到 Ubuntu 的用户名,你需要改成你的,这里不支持相对路径。

ndk.dir=/home/pc/Android/Sdk/ndk-bundle
sdk.dir=/home/pc/Android/Sdk

编译

生成「debug.apk」可以直接用,也可以生成「release.apk」,都能直接用。

make debug

或者

make release

配置文件定义

清空默认,放入咱们的码表文件。而各默认设定,则打开「prefs.xml」,就可以魔改了,比如「defaultValue」映入眼帘……

提示

最好先在「编译」的步骤里,都各给编译一次,,第一次编译会有些慢。而程序编译通过了,我们再放入「码表文件」,以及修改「prefs.xml」,搞完这些自定义后,做第二重编译打包工作——这时,会很快。

Good Luck !

WuBiXiaoZhu