修复安卓12打不开java,在64位Termux中安装32位java

@Ta 2022-02-03发布,2022-02-03修改 5467点击

背景

由于谷歌的限制,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

步骤

回复列表(11|隐藏机器人聊天)
  • @Ta / 2022-02-03 / /

    步骤1:在dpkg开启32位arm架构

    # 查看当前软件包架构
    dpkg --print-architecture
    
    # 添加32位arm架构
    dpkg --add-architecture arm
    
    # 显示添加的架构
    dpkg --print-foreign-architectures
    
    # 更新软件包列表
    apt update
    

    IMG_20220203_152139.jpg

  • @Ta / 2022-02-03 / /

    步骤2:尝试直接安装32位java,肯定会失败。所以我们只能采取其他方法。

    apt install openjdk-17:arm
    

    IMG_20220203_152424.jpg

  • @Ta / 2022-02-03 / /
    @老虎会游泳@老虎会游泳,老虎的源码,应该直接大众化安装,小白化安装。

    就像wordperss把源码放在目录。然后访问首页点击安装。

    太复杂了,环境要求也高。小白,只呼不知道咋安装?
  • @Ta / 2022-02-03 / /

    步骤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
    
  • @Ta / 2022-02-03 / /

    步骤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
    

    Screenshot_2022-02-03-17-47-57-205_com.termux.jpg

  • @Ta / 2022-02-03 / /

    @apkdy死神,虎绿林程序是为hu60.cn设计的网站程序,目前我并没有计划让它成为大家都能安装的程序。如果你不是为了学习编程、PHP、Linux技术或网站运维技术,可能不适合安装虎绿林程序。

  • @Ta / 2022-02-03 / /

    @apkdy死神,我之所以编写这篇教程,是因为@希望自己长胖胖他想学习PHP

    如果对于学习编程、网站运维和Linux技术没有兴趣,那么使用虎绿林网站程序最好的方法是直接打开hu60.cn,而不是自己架设一个。

    如果有兴趣,那么尝试自己安装虎绿林程序,就是学习这些的良好开始。

  • @Ta / 2022-02-03 / /

    @apkdy死神,最重要的问题在于,我本人对“把虎绿林程序开放给不了解PHP和Linux的公众”这件事情不感兴趣。

    如果有人能帮我完成这件事情,我当然欢迎。但是如果没有人来做,我自己可能不会做。

  • @Ta / 2022-02-03 / /
    @希望自己长胖胖,学啥php  go
    语言不香吗,java不香吗
  • @Ta / 2022-02-04 / /
    @deed
    我喜欢php吖 ,可以在网页上直接开发软件和游戏呢,感觉是超级强大的哦, 而且是开源的,感觉未来无限可期……
  • @Ta / 2022-02-07 / /
    @希望自己长胖胖java也开源啊
添加新回复
回复需要登录