Kirikiroid2 Android版本编译记录

记录在Windows 11下使用Android Studio编译krkr2过程

注意事项

请直接跳到使用WSL2的部分

Windows下尝试编译

克隆由贴吧大佬继续开发的krkr2仓库

git clone https://github.com/2468785842/krkr2.git

Android Studio打开仓库的.\platforms\android目录

首先会遇到

E:\AndroidStudio\project\krkr2_angle\platforms\android\app CMake Error at cmake/vcpkg_android.cmake:26 (message): 
Please set an environment variable ANDROID_NDK_HOME 
For example: export ANDROID_NDK_HOME=/home/your-account/Android/Sdk/ndk-bundle 
Or: export ANDROID_NDK_HOME=/home/your-account/Android/android-ndk-r21b

这是因为Android Studio构建时不会包含系统环境变量,我们需要在app目录下的build.gradle里添加VCPKG_ROOT
** 重要提示:路径分隔符请用/而不是\\\ **

android {
    defaultConfig {
      externalNativeBuild {
                  cmake {
                      arguments '-DANDROID_STL=c++_shared', '-DANDROID=ON', '-DVCPKG_ROOT=D:/AndroidStudio/SDK/vcpkg/vcpkg'
                  }
              }

如果还不行就去系统环境变量里添加这个值

ANDROID_NDK_HOME我则直接修改了项目下cmake\vcpkg_android.cmake文件,让他读取Android Studio的ANDROID_NDK。在第一步检测NDK变量前面添加

if(NOT DEFINED ENV{ANDROID_NDK_HOME} AND DEFINED ANDROID_NDK)
    set(ENV{ANDROID_NDK_HOME} "${ANDROID_NDK}")
endif()

if(NOT DEFINED ENV{VCPKG_ROOT} AND DEFINED VCPKG_ROOT)
    set(ENV{VCPKG_ROOT} "${VCPKG_ROOT}")
endif()

接下来在来gradle同步,就会经历一段比较漫长的依赖下载过程

此时必然会遇到glib编译不过的问题(没看github上的解决方法导致几个小时白给去了QAQ)
这微软也是个ccb了,改完以后Gradle sync全部都要重新编译,这vcpkg要装129个依赖,每个依赖都是下载源代码现场编译的,而且会分别编译debug和release版本,弄一次要几个小时,什么逆天玩意…而且改ports下的配置是无效的,即使把ports文件夹删了,buildtrees, packages和downloads都删掉,他还是会走不知道哪里来的缓存编译。后面发现是krkr2项目下out/android/cmake-build/Debug下有6G文件,我勒个乖乖…删了以后还是没用,这下没招了。后来又发现C:\Users\用户名\AppData\Local\vcpkg\archives下也有东西… XD

当花费几个小时的同步完成后,你会发现有很多错误没法处理,而且有的头文件也依赖linux

改用WSL2 Ubuntu编译

于是我们使用WSL2并在里面安装Android Studio
Android Studio我们使用root用户运行,避免一些权限问题

由于WSL2自带XServer,所以我们可以直接启动Android Studio。但是这个图形化界面不会继承系统的缩放,而且没有图形加速,帧数还是比较低的。我们还需要在Android Studio的设置里找到缩放,修改为合适大小

环境配置

然后配置ANDROID_SDK, ANDROID_NDKVCPKG_ROOT
编辑~/.bashrc,加上

# Android SDK & NDK
export ANDROID_SDK="$HOME/Android/Sdk"
export ANDROID_NDK="$HOME/Android/Sdk/ndk/28.0.13004108"

# Vcpkg root
export VCPKG_ROOT="$HOME/vcpkg"

export PATH=$PATH:$HOME/Android/Sdk/platform-tools
export PATH=$PATH:/home/deepdc/android-studio/bin

如果没配置过代理的话也可以

# 设置系统代理为 route 的 IP 地址:端口
proxy_port=10809
route_ip=$(ip route | grep default | awk '{print $3}')
if [[ -n "$route_ip" ]]; then
        export http_proxy="http://${route_ip}:${proxy_port}"
    export https_proxy="http://${route_ip}:${proxy_port}"
    export no_proxy="localhost,127.0.0.1,::1"
    echo "代理已设置为 $route_ip:${proxy_port}"
else
    echo "未找到 route 的 IP 地址,未设置代理"
fi

如果gradle同步网络正常的话,也是什么都不需要修改(ubuntu没有glib问题),就能同步完成

连接一下ADB(WSL2只能使用WIFI连接adb,手机开启无线调试,在Android Studio的终端执行adb connect ip:port即可)
最后直接运行,你会遇到几种情况:

  1. 遇到#include <config.h>报错,直接把这行注释掉
  2. 遇到某些方法的首字母大小写错误,手动修正大小写
  3. 遇到某个头文件没引入,Alt+Enter引入即可

其它小问题自己看着来修复,都不是什么大事,修完就能直接编译完成了

其它问题

WSL2 GUI全局缩放

全局缩放控制,还是比较玄学的,可以参考
Set dpi of wsl2 windows independently of screen resolution · Issue #590 · microsoft/wslg
基本上有两种方法,两种应该在某些条件下都有效但又各有问题,以下命令行是其中一种方法,在Ubuntu终端执行。虽然这个脚本问题也不少

(wget -qO- https://raw.githubusercontent.com/A-Ribeiro/wsl-hidpi-suggestion/main/run.sh | xargs -0 -o bash -c) && . ~/.wsl-hidpi-suggestion

中文输入法

ubuntu22在root用户下使用搜狗输入法会有毛病(当然普通用户是可以用的),所以我们用Sun拼音输入法

sudo apt install language-pack-zh-hans
sudo apt install fcitx dbus-x11 im-config fcitx-sunpinyin

接下来设置locale

sudo dpkg-reconfigure locales

注意: 第一步直接回车不需要选,第二步上下并用空格选中zh_CN.UTF-8 UTF-8

紧接着映射Windows字体, 创建/etc/fonts/local.conf 文件并添加

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
    <dir>/mnt/c/Windows/Fonts</dir>
</fontconfig>

保存后刷新字体缓存

fc-cache -f -v

最后重启wsl2

wsl --shutdown

启动Chrome若弹出一个透明窗口,可以使用export LIBGL_ALWAYS_INDIRECT=1修复

编辑~/.bashrc并添加

export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export DefaultIMModule=fcitx
export QT_IM_MODULE=fcitx
export QT5_IM_MODULE=fcitx

然后source ~/.profile

启动fcitx并打开fcitx设置

fcitx-autostart &>/dev/null && fcitx-config-gtk3

将拼音输入法移动到第二个作为可选输入法,随便添加一个输入法在第一个位置,英语输入移动到第三位(这是我的习惯)

切换输入法改为Shift + Ctrl,比较方便而且不冲突

为了每次都能启动中文输入法,我们可以添加

alias as='fcitx-autostart &>/dev/null && studio'

~/.bashrc

然后命令行执行as就能连同中文输入法一起启动Android Studio了

有时候我们想弄桌面快捷方式,就要编辑/etc/sudoers,并添加

Defaults        env_keep = "COLORTERM LANGUAGE XAUTHORITY LANG LS_COLORS TERM DISPLAY"                          
Defaults        env_keep += "GTK_IM_MODULE QT4_IM_MODULE XMODIFIERS CLUTTER_IM_MODULE QT_IM_MODULE QT5_IM_MODULE


deepdc ALL=(ALL) NOPASSWD: /home/deepdc/android-studio/bin/studio

上面两行是做搜狗输入法的一些尝试,做备用,我们只需要下面那一行就行

这样我们就可以不需要输入密码启动root的Android Studio了