Android

构建

注意:此构建方案的产物不包含成绩上传的部分(与Windows端类似)

  1. 方便起见,这里使用Github Action构建Android端Phira,本地构建待补充。才不是因为几次都失败了惹
  2. Fork官方Phira仓库,创建 .github/workflows/目录并在该目录下创建一个.yml文件,名称任意。
  3. 在该.yml文件写入以下内容并commit,进入Action页面的Build Android Phira工作流,请求一个workflow(可选择构建分支),等待约5分钟,工作流即可运行完毕。下载Artifact解压备用。

如果需要armeabi-v7a架构构建,请将"arm64-v8a","aarch64-linux-android"分别全部替换为"armeabi-v7a","armv7-linux-androideabi"(未测试)

name: Build Android Phira

on:
  workflow_dispatch:


env:
  CARGO_TERM_COLOR: always
  ANDROID_HOME: ${{github.workspace}}/android-sdk
  ANDROID_NDK_HOME: ${{github.workspace}}/android-ndk-r27c
  ANDROID_NDK_ROOT: ${{github.workspace}}/android-ndk-r27c

jobs:
  Build:

    runs-on: ubuntu-20.04

    steps:
    - uses: actions/checkout@v4.2.2
    
    - run: |
        sudo apt-get update
        sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev libayatana-appindicator3-dev librsvg2-dev libasound2-dev libssl-dev pkg-config
        sed -i '1d' prpr/src/lib.rs
        
    - name: Download static-lib
      uses: suisei-cn/actions-download-file@v1.3.0
      id: downlod-static-lib
      with:
        url: "https://teamflos.github.io/phira-docs/phira_build_guide/prpr-avc.zip"
        target: ./

    - name: Set Up static-lib
      run: |
        unzip prpr-avc.zip -d ./

    - name: Install Android SDK Tools
      run: |
        wget https://dl.google.com/android/repository/commandlinetools-linux-8512546_latest.zip
        unzip commandlinetools-linux-8512546_latest.zip -d $ANDROID_HOME
        echo y | $ANDROID_HOME/cmdline-tools/bin/sdkmanager --sdk_root=${ANDROID_HOME} "platform-tools" "build-tools;33.0.2" "platforms;android-35"

    - name: Install Android NDK
      run: |
        wget https://googledownloads.cn/android/repository/android-ndk-r27c-linux.zip
        unzip android-ndk-r27c-linux.zip -d ${{github.workspace}}

    - name: Install Rust Toolchains
      uses: actions-rs/toolchain@v1.0.6
      with:
        toolchain: stable
        target: aarch64-linux-android
    
    - name: Build for Android
      run: |
        cd phira
        cargo install cargo-ndk
        cargo ndk -t arm64-v8a -p 35 build --release
    
    - name: Upload Artifact
      uses: actions/upload-artifact@v4
      with:
        name: android-build
        path: |
          target/aarch64-linux-android/release/libphira.so

替换

由于未提供打包工具,需要我们手动替换apk下libphira.so文件

直接安装运行,会提示找不到quad_native.QuadNative.preprocessInput的定义

方法一:

  1. 将libphira.so文件推送到Android设备上你熟悉的位置。

  2. 从Phira官方仓库的Release下载libphira.so对应架构的apk,用MT管理器查看。

  3. 将构建出来的libphira.so替换掉lib/arm64-v8a(或armeabi-v7a)/libphira.so

  4. 用Dex编辑器++打开classes.dex,进入org,flos.phira,查看QuadSurface类。

  5. 找到153行(或其他调用preprocessInput的语句),移除这一行的内容(或注释掉)。
  6. 根据MT管理器的提示,保存退出文件,重新签名。

  7. 按需可选择进行apk共存操作。

方法二:

在phira/src/lib.rs中加入以下声明:
#[cfg(target_os = "android")]
#[no_mangle]
pub unsafe extern "C" fn Java_quad_1native_QuadNative_preprocessInput(
    _: *mut std::ffi::c_void,
    _: *const std::ffi::c_void,
    #[allow(dead_code)] motionEvent: ndk_sys::AInputEvent,
    #[allow(dead_code)] f: ndk_sys::jfloat,
    #[allow(dead_code)] f2: ndk_sys::jfloat,
    #[allow(dead_code)] z: ndk_sys::jboolean,
    #[allow(dead_code)] z2: ndk_sys::jboolean,
) {
    
}

原理