记录在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项目下 XDout/android/cmake-build/Debug下有6G文件,我勒个乖乖…删了以后还是没用,这下没招了。后来又发现C:\Users\用户名\AppData\Local\vcpkg\archives下也有东西…
当花费几个小时的同步完成后,你会发现有很多错误没法处理,而且有的头文件也依赖linux
改用WSL2 Ubuntu编译
于是我们使用WSL2并在里面安装Android Studio
Android Studio我们使用root用户运行,避免一些权限问题
由于WSL2自带XServer,所以我们可以直接启动Android Studio。但是这个图形化界面不会继承系统的缩放,而且没有图形加速,帧数还是比较低的。我们还需要在Android Studio的设置里找到缩放,修改为合适大小
环境配置
然后配置ANDROID_SDK, ANDROID_NDK和VCPKG_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即可)
最后直接运行,你会遇到几种情况:
- 遇到
#include <config.h>报错,直接把这行注释掉 - 遇到某些方法的首字母大小写错误,手动修正大小写
- 遇到某个头文件没引入,
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了