标题: 修复安卓12打不开java,在64位Termux中安装32位java
时间: 2022-02-03发布,2022-02-03修改
由于谷歌的限制,Termux提供的64位java目前无法在安卓12中正常运行(详情)。
虽然可以改用32位Termux来解决问题,但是需要卸载重装,原先所有的Termux数据都会丢失。如果你不想重装,我会尝试提供直接在64位Termux中安装32位java的方法。
你也可以关注这个github issue来了解Termux在安卓12 java问题上的最新进展:
https://github.com/termux/termux-packages/issues/7332
https://hu60.cn/q.php/bbs.topic.102524.6.html?floor=118#118
前置条件:如何保持Termux后台运行
可选前置条件:如果你从termux安装软件包很慢,可以切换下载服务器(称为“软件源”)。切换方法见该教程:https://mirrors.tuna.tsinghua.edu.cn/help/termux/
『回复列表(11|隐藏机器人聊天)』
步骤1:在dpkg开启32位arm架构
# 查看当前软件包架构
dpkg --print-architecture
# 添加32位arm架构
dpkg --add-architecture arm
# 显示添加的架构
dpkg --print-foreign-architectures
# 更新软件包列表
apt update
步骤3:下载并解压32位openjdk-17
及其所有依赖。
# 创建并进入deb文件夹
mkdir ~/deb
cd ~/deb
# 下载`openjdk-17:arm`
apt download openjdk-17:arm
# 下载`openjdk-17:arm`的所有依赖
LANG=en LANGUAGE=en apt-cache depends --recurse openjdk-17:arm | grep -E '(Depends|PreDepends|Recommends|Suggests):' | awk '{print $2}' | grep -v '<' | xargs apt download
# 创建并进入termux32文件夹
mkdir ~/../termux32
cd ~/../termux32
# 解压下好的deb
find ~/deb/ -type f | while read f; do dpkg -X "$f" ~/../termux32; done
步骤4:尝试运行32位java
# 设置一个PREFIX32环境变量
PREFIX32="$(realpath ~/../termux32/data/data/com.termux/files/usr)"
# 为深层目录创建一个符号连接
ln -s "$PREFIX32" ~/../usr32
# 为32位程序创建一个包装器
PREFIX32="$(realpath ~/../usr32)"
cat >"$PREFIX/bin/bin32_wrapper" <<EOF
#!$PREFIX/bin/sh
bin="\$(basename "\$0")"
export PREFIX="$PREFIX32"
export JAVA_HOME="\$PREFIX/opt/openjdk"
export PATH="\$PREFIX/bin:\$JAVA_HOME/bin"
export LD_LIBRARY_PATH="\$PREFIX/lib:\$JAVA_HOME/lib"
exec "\$PREFIX/bin/\$bin" "\$@"
EOF
# 给执行权限
chmod +x "$PREFIX/bin/bin32_wrapper"
# 为32位java创建包装器链接
cd "$PREFIX/bin"
ls ~/../usr32/opt/openjdk/bin | while read f; do echo "$f"; ln -s bin32_wrapper "$f"; done
然后就能用了
# 创建一个测试java文件
mkdir ~/java
cd ~/java
cat >./HelloWorld.java <<EOF
public class HelloWorld {
public static void main(String args[]) {
System.out.println("Hello World!");
}
}
EOF
# 编译它
javac HelloWorld.java
# 运行它
java HelloWorld