Skip to content

Build an armeabi-v7a package for 32-bit Android TVs - #115

Open
nomnommust wants to merge 2 commits into
OpenIPC:mainfrom
nomnommust:feat/android-arm
Open

nomnommust wants to merge 2 commits into
OpenIPC:mainfrom
nomnommust:feat/android-arm

Conversation

@nomnommust

Copy link
Copy Markdown

Summary

  • Publish a separate armeabi-v7a APK so 32-bit Android TVs, such as the TCL G10, can install the viewer. The existing arm64 package is unchanged.
  • Build FFmpeg for android-arm and load that runtime on 32-bit devices instead of the emulator libraries.
  • Skip the .NET 9 linux-bionic-arm runtime pack, which does not exist, and the ONNX win-arm binary, which the package does not ship.

Test plan

  • The Android arm CI job uploads org.openipc.viewer-arm-Signed.apk and its native-code is only armeabi-v7a.
  • Sideload that APK on a 32-bit Android TV and confirm it installs and launches.
  • Confirm the arm64 and x64 packages are still produced with their existing names.

…ewer.

Boards like the TCL G10 ship a 32-bit userspace and reject the arm64-only APK.
@qodo-free-for-open-source-projects

Copy link
Copy Markdown

PR Summary by Qodo

Add a 32-bit Android TV APK with ARM FFmpeg support

✨ Enhancement ⚙️ Configuration changes 🕐 20-40 Minutes

Grey Divider

AI Description

• Publish a separate armeabi-v7a APK for 32-bit Android TVs without changing existing package names.
• Build and load ARM FFmpeg libraries while bypassing unavailable .NET and ONNX assets.
• Verify each APK’s integrity and ABI before uploading release artifacts.
Diagram

graph TD
  CI["Android CI"] --> FF["FFmpeg build"] --> Libs["ARM native libs"] --> Project["Android project"] --> APK["Per-ABI APKs"] --> Loader["FFmpeg loader"]
  Targets["Build targets"] --> Project
  CI --> APK
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Publish one multi-ABI APK
  • ➕ One Android download and fewer release assets to manage.
  • ➖ Larger download for every device.
  • ➖ Gives up the existing single-ABI packaging strategy.
2. Retarget dependent libraries for Android
  • ➕ Could avoid the conditional .NET 9 runtime-pack workaround.
  • ➖ Broadens framework and dependency changes beyond this Android packaging feature.
  • ➖ Does not remove the need to handle the missing ONNX Windows ARM asset.

Recommendation: Keep the separate APK approach: it adds 32-bit support without enlarging or renaming existing packages. Validate the conditional MSBuild targets and sideload the ARM artifact before release, since those paths lack automated device coverage.

Files changed (7) +115 / -31

Enhancement (1) +21 / -7
build-ffmpeg-android.shCross-compile FFmpeg for armeabi-v7a +21/-7

Cross-compile FFmpeg for armeabi-v7a

• Adds ARMv7 to the default Android build targets and writes its shared libraries to runtimes/android-arm/native. Sets assembler flags to preprocess ARM assembly sources across hosts.

tools/build-ffmpeg-android.sh

Bug fix (2) +13 / -3
FfmpegRuntime.csInclude ARM in FFmpeg load-failure guidance +1/-1

Include ARM in FFmpeg load-failure guidance

• Updates the missing-native-library error to point users to the android-arm FFmpeg output alongside arm64 and x64.

src/OpenIPC.Viewer.Video/Pipeline/FfmpegRuntime.cs

RuntimeIds.csDetect 32-bit Android ARM at runtime +12/-2

Detect 32-bit Android ARM at runtime

• Maps Architecture.Arm to android-arm instead of treating it as android-x64, allowing the loader to select the 32-bit ARM libraries.

src/OpenIPC.Viewer.Video/Pipeline/RuntimeIds.cs

Documentation (1) +2 / -1
README.mdDocument the 32-bit Android TV download +2/-1

Document the 32-bit Android TV download

• Lists the new armeabi-v7a APK and its intended devices. Updates the FFmpeg build description to include android-arm.

README.md

Other (3) +79 / -20
build.ymlBuild and upload a verified 32-bit ARM APK +28/-15

Build and upload a verified 32-bit ARM APK

• Caches and builds FFmpeg for android-arm alongside the existing ABIs, then publishes a separately named ARM APK. Integrity and single-ABI checks now cover all three APKs before upload.

.github/workflows/build.yml

Directory.Build.targetsExclude unavailable assets during android-arm builds +42/-0

Exclude unavailable assets during android-arm builds

• For net9.0 libraries built with android-arm, suppresses the unavailable linux-bionic-arm runtime pack. It also removes a missing ONNX Windows ARM binary from build items.

Directory.Build.targets

OpenIPC.Viewer.Android.csprojPackage ARM native libraries for armeabi-v7a +9/-5

Package ARM native libraries for armeabi-v7a

• Adds android-arm to the supported runtime identifiers and includes its FFmpeg shared libraries under the armeabi-v7a ABI when present.

src/OpenIPC.Viewer.Android/OpenIPC.Viewer.Android.csproj

@qodo-free-for-open-source-projects

qodo-free-for-open-source-projects Bot commented Nov 12, 2026 •

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0) 🎨 UX issues (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)

Grey Divider


Remediation recommended

1. 32-bit TVs cannot find app updates ✓ Resolved

Resolving commit: 6297d17

Resolution reason
ClassifyAsset now maps names containing "-arm-Signed.apk" to "armv7" (line 18), so the actual CI
asset org.openipc.viewer-arm-Signed.apk is classified as the 32-bit Android build. The test was
updated to include the real asset filename and assert it resolves via FindAsset(Android, "armv7").
The canonical arm64 and x64 classifications are unchanged, and "-armv7" is still accepted.
Description
The release workflow names the new APK org.openipc.viewer-arm-Signed.apk, but
GithubReleaseFeed.ClassifyAsset recognizes only -armv7 as a 32-bit Android asset and classifies
this name as arm64. On a 32-bit device using the default GitHub update feed, the exact
android/armv7 lookup finds no asset and the update check returns NoBuildForPlatform.

Grey Divider

Tip of the day
💡 Did you know, you can open the rule or relationship behind a finding in one click

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

The package is named -arm-Signed.apk, which the feed treated as the arm64 build, so 32-bit TVs never saw an update.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants