Activity, over time
Daily observations from the public event archive.
Attention
Daily stars & forks
Star accumulation
Cumulative stars
Pull requests
Daily opens & merges
Conversations
Daily issues & comments
Community
Daily accounts & reviews
Releases
Daily releases
Trending history
Daily top 10 · last 90 days · UTC
Mentions
Stars
Forks
Contributors
Latest stargazers
The last 10 distinct accounts we observed this year.
Most active participants
PR, issue, comment & review events in the past year.
Packages
Scan pending.
README badges
Embed a badge in your README or website.
Live mentions · last 30 days
Mentions
AndroidスマホだけでJavaアプリをビルドする:Termux+Ubuntu 24.04環境構築 はじめに PCやGitHub Actionsを使わず、Androidスマートフォン1台でAndroidアプリをビルドできる環境を作りました。 使用したのは Termux+Ubuntu+OpenJDK 17+Android SDK+Gradle。最初はSDKの導入やARM64環境でのビルドにつまずきましたが、最終的にはJava製アプリのDebug APKを作成し、同じスマホへインストールして起動できました。その後、Google Play向けの署名付きAABも作成しています。 この記事では、実際に動いた手順と、エラーが出た箇所を中心に記録します。Android Studioやエミュレーターは使用していません。 ! 2026年10月時点の手順です。Android SDKやGradle、配布されるARM64用ツールの状況は変わるため、バージョンが異なる場合は読み替えてください。 検証環境 項目 環境 端末 Google Pixel 8 OS / CPU Android 17 / ARM64(aarch64) Linux Termux上のUbuntu 24.04(PRoot-Distro) Java OpenJDK 17 Android SDK Platform 37.0、Build Tools 37.0.0 Android Gradle Plugin 9.2.0 Gradle 9.4.1(Gradle Wrapper) ソース管理 Git / GitHub 前提として、Termuxはインストール済みで、ビルドするAndroid/JavaプロジェクトはGitHub上に作成済みとします。以下では「Termuxで実行」と「Ubuntuで実行」を区別します。 1. TermuxにUbuntuを導入 まずTermuxのパッケージを更新し、PRoot-Distroをインストールします。 Termuxで実行(準備): pkg update && pkg upgrade -y pkg install -y proot-distro git 続けて、Ubuntu 24.04をインストールします。これは初回のみ実行します。 Termuxで実行(Ubuntuのインストール): proot-distro install ubuntu:24.04 インストール後は、以下のコマンドでUbuntuにログインします。次回以降も、Ubuntuを使うときはこのコマンドから始めます。 Termuxで実行(Ubuntuへのログイン): proot-distro login ubuntu これでUbuntuのシェルに入ります。Ubuntu内ではrootユーザーとして作業したため、以降のSDKパスは /root/android-sdk としています。 すでに導入済みのUbuntuは proot-distro list で確認できます。再インストールは不要です。 2. UbuntuにJava 17を導入 ここからUbuntuで実行: apt update apt install -y --no-install-recommends \ openjdk-17-jdk-headless git curl unzip ca-certificates java -version javac -version uname -m openjdk version "17..." と aarch64 が表示されれば、JavaとCPUアーキテクチャを確認できます。 AndroidのOSバージョンとJDKのバージョン番号を一致させる必要はありません。今回のプロジェクトではJDK 17を選びました。 3. Android SDK Command-line Toolsを導入 Android Studioを入れずに、Google公式のCommand-line Toolsを使います。 Ubuntuで実行: export ANDROID_HOME=/root/android-sdk mkdir -p "$ANDROID_HOME/cmdline-tools" cd /tmp curl -fL \ dl.google.com \ -o cmdline.zip unzip -q cmdline.zip -d "$ANDROID_HOME/cmdline-tools" mv "$ANDROID_HOME/cmdline-tools/cmdline-tools" \ "$ANDROID_HOME/cmdline-tools/latest" rm cmdline.zip パスを設定します。 cat >> ~/.bashrc <<'EOF_BASHRC' export ANDROID_HOME=/root/android-sdk export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$PATH" EOF_BASHRC source ~/.bashrc sdkmanager --version .bashrc にすでに同じ環境変数がある場合は重複させないようにします。 つまずき:SDK Platformが見つからない 最初に以下を試したところ、パッケージが見つからないという警告が出ました。 sdkmanager "platforms;android-37" "build-tools;37.0.0" 今回の環境では、Platform側の名前が android-37.0 でした。そこで次の指定に変更しています。 sdkmanager --sdk_root="$ANDROID_HOME" --channel=3 \ "platforms;android-37.0" \ "build-tools;37.0.0" sdkmanager --licenses --channel=3 はCanaryを含むチャンネルを対象にします。別バージョンを使用する場合は、いきなり上の名前を使うのではなく、次のコマンドで配布されている名前を確認してください。 sdkmanager --list --channel=3 ls -ld "$ANDROID_HOME/platforms/android-37.0" ls -ld "$ANDROID_HOME/build-tools/37.0.0" ライセンスの内容を確認して同意します。 4. ARM64版Build Toolsを使えるようにする ここが今回の大きな難所でした。 Android SDKの標準Build ToolsにはPC向けのネイティブ実行ファイルが含まれ、ARM64スマホ上ではそのまま動かないものがあります。そこで、コミュニティが配布するARM64向けのBuild Tools実行ファイルを利用しました。 使用した配布元: amirghm/android-sdk-tools-arm64 Ubuntuで実行: mkdir -p /root/android-arm64 cd /root/android-arm64 BASE="github.com/amirghm/android-sdk-tools-arm64/releas…" curl -fLO "$BASE/build-tools-37.0.0-android-arm64.tar.gz" curl -fLO "$BASE/SHA256SUMS" sha256sum --ignore-missing -c SHA256SUMS tar -xzf build-tools-37.0.0-android-arm64.tar.gz ./build-tools/37.0.0/aapt2 version チェックサムとツールの起動を確認します。今回は、Google公式のSDKパッケージを先にインストールしたうえで、次の6つの実行ファイルを差し替えました。 SRC=/root/android-arm64/build-tools/37.0.0 DST=/root/android-sdk/build-tools/37.0.0 BACKUP=/root/android-build-tools-backup/37.0.0 mkdir -p "$BACKUP" for tool in aapt aapt2 aidl zipalign dexdump split-select; do test -f "$SRC/$tool" && test -f "$DST/$tool" || { echo "ERROR: $tool が見つかりません"; break; } test -e "$BACKUP/$tool" || cp -p "$DST/$tool" "$BACKUP/$tool" cp -p "$SRC/$tool" "$DST/$tool" echo "OK: $tool" done "$DST/aapt2" version ! ここで利用したARM64版のバイナリはGoogle公式配布物ではありません。配布元、ライセンス、チェックサムを確認して利用してください。また、SDKを更新すると標準バイナリで上書きされる可能性があります。 5. GradleにARM64版AAPT2を指定 GradleがPC向けのAAPT2を使わないよう、Ubuntu内に設定します。 mkdir -p /root/.gradle cat >> /root/.gradle/gradle.properties <<'EOF_GRADLE' android.aapt2FromMavenOverride=/root/android-sdk/build-tools/37.0.0/aapt2 org.gradle.jvmargs=-Xmx1024m org.gradle.workers.max=2 org.gradle.parallel=false EOF_GRADLE android.aapt2FromMavenOverride が重要な設定です。残りはスマホのメモリ負荷を抑えるためのものです。設定キーがすでに存在する場合は、追記ではなく既存の値を更新してください。 6. GitHubからソースコードを取得 ここではGitHub上にAndroidプロジェクトがある前提です。Ubuntuにログインした状態で、/root/AppProjects にソースをCloneします。別途 /mnt にマウントする操作は必要ありません。 この記事では、リポジトリ名を sampleApp、GitHubアカウント名を (アカウント名) と表記しています。URLは自分のアカウント名に置き換えてください。 Ubuntuで実行: mkdir -p /root/AppProjects cd /root/AppProjects pwd /root/AppProjects git clone 'github.com/(%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%…)/sampleApp.git' cd sampleApp pwd /root/AppProjects/sampleApp TermuxとUbuntuでのディレクトリの見え方 同じプロジェクトフォルダでも、Termuxから見るパスとUbuntuにログインして見るパスは異なります。PRoot-DistroがUbuntuのファイルシステムを別のルート(/)として見せるためです。 どこから見るか プロジェクトディレクトリ Ubuntuにログインした状態 /root/AppProjects/sampleApp Termux側(現在のPRoot-Distroの配置例) $PREFIX/var/lib/proot-distro/containers/ubuntu/rootfs/root/AppProjects/sampleApp Termux側(旧版の配置例) $PREFIX/var/lib/proot-distro/installed-rootfs/ubuntu/root/AppProjects/sampleApp これらは、保存形式に応じて同じUbuntu内のフォルダを指します。 ~/AppProjects(Termuxのホーム直下)とは別なので混同しないようにします。実際の保存先はPRoot-Distroのバージョンで変わるため、Termux側のパスは配置例です。 後からGitHubの最新ソースを取り込む場合も、Ubuntu内で実行します。 cd /root/AppProjects/sampleApp git pull --ff-only origin main Gradle Wrapperの動作確認: cd /root/AppProjects/sampleApp bash ./gradlew --version 今回のプロジェクトでは、Gradle WrapperをGitHubへ追加してから git pull して利用しました。Wrapperがあれば、Gradle本体をaptで個別にインストールする必要はありません。 以降のUbuntuでのビルド作業は /root/AppProjects/sampleApp で行います。 7. Debug APKをビルド Ubuntuで実行: cd /root/AppProjects/sampleApp export ANDROID_HOME=/root/android-sdk printf 'sdk.dir=%s\n' "$ANDROID_HOME" > local.properties bash ./gradlew :app:assembleDebug \ --no-daemon \ --max-workers=2 \ --console=plain 初回はGradleや依存ライブラリのダウンロードがあるため、ある程度時間がかかります。 今回の最初の成功時には、次の結果が出ました。 > Task :app:assembleDebug BUILD SUCCESSFUL in 7m 18s 33 actionable tasks: 33 executed APKは以下に生成されます。 ls -lh app/build/outputs/apk/debug/app-debug.apk 最初に作成したDebug APKは約9.6MBでした。Deprecated Gradle features were used という警告も出ましたが、これは今回のビルド失敗ではなく、将来のGradleとの互換性に関する警告でした。 8. APKをスマホにインストール 生成したAPKを、Androidの「ダウンロード」フォルダへコピーします。 今回の環境では、Ubuntuから /sdcard/Download/ にアクセスできました。Ubuntuで実行: cd /root/AppProjects/sampleApp cp app/build/outputs/apk/debug/app-debug.apk \ /sdcard/Download/sampleApp-debug.apk ls -lh /sdcard/Download/sampleApp-debug.apk 今回はUbuntuから直接 /sdcard/Download/ にコピーできたので、Termuxへ戻ってコピーし直す必要はありません。また、プロジェクトは引き続き /root/AppProjects/sampleApp に置いたままで構いません。別の環境で /sdcard/Download/ が見えない場合だけ、Termux側のストレージアクセス許可(termux-setup-storage)と、PRoot-Distroのストレージ共有設定を確認してください。 あとはAndroidのファイル管理アプリで「ダウンロード」を開き、APKをタップしてインストールします。必要なら、ファイル管理アプリに「不明なアプリのインストール」の許可を与えます。 これで同じスマートフォンで作成したAPKを、そのスマートフォンで起動できました。 9. その後:Google Play向けAABも作成 Debug APKの動作確認後、Google Playへのアップロード用に、署名付きのRelease AABも作成しました。 APKは端末に直接インストールできますが、AABはGoogle Play Consoleにアップロードするための形式で、そのままファイル管理アプリからインストールするものではありません。 ここからも、Ubuntuにログインした状態で実行します。AAB生成には、プロジェクト側にRelease署名の設定があり、Google Playに登録するための既存のアップロード鍵(.jks)を用意していることが前提です。初めて公開するアプリなら、事前にアップロード鍵を作成して署名設定を行います。 9-1. ソースコードを最新にする git -C /root/AppProjects/sampleApp pull --ff-only origin main cd /root/AppProjects/sampleApp 9-2. 署名用の環境変数を設定する 今回のapp/build.gradleは、以下の4つの環境変数からアップロード鍵の情報を受け取る構成です。変数名はGradle側の設定と一致させる必要があります。 鍵のファイル名・エイリアスはサンプルなので、実際に使用している値に置き換えてください。 Ubuntuで実行: export PDFEDITOR_UPLOAD_KEYSTORE="$HOME/play-signing/sample-upload.jks" export PDFEDITOR_UPLOAD_KEY_ALIAS="sample-upload" 鍵ファイルの存在を確認 test -f "$PDFEDITOR_UPLOAD_KEYSTORE" && echo "アップロード鍵を確認しました" パスワードは画面に表示せず入力する read -r -s -p 'アップロード鍵のパスワード: ' PDFEDITOR_UPLOAD_STORE_PASSWORD printf '\n' export PDFEDITOR_UPLOAD_STORE_PASSWORD 同じパスワードを使用している場合 export PDFEDITOR_UPLOAD_KEY_PASSWORD="$PDFEDITOR_UPLOAD_STORE_PASSWORD" 鍵自体のパスワードがキーストアと異なる場合は、PDFEDITOR_UPLOAD_KEY_PASSWORD に別の正しい値を設定します。パスワードをソースコード、シェルスクリプト、GitHubへ書き込まないようにします。 9-3. Release AABをビルドする Ubuntuで実行: ./gradlew :app:bundleRelease -PadMode=production --no-daemon -PadMode=production は、今回のプロジェクトで本番広告設定を選ぶために実装したGradleプロパティです。Android標準の指定ではないため、この切替機能がない一般のプロジェクトでは指定しません。 成功するとBUILD SUCCESSFULと表示され、次の場所にAABが作成されます。 ls -lh app/build/outputs/bundle/release/app-release.aab 9-4. AABの署名を検証してダウンロードフォルダへコピーする jarsigner で検証します。終了コードだけでなく、結果に jar verified. が含まれることを確認してからコピーします。 Ubuntuで実行: AAB="app/build/outputs/bundle/release/app-release.aab" VERIFY_LOG="$(mktemp)" if [ -s "$AAB" ] && \ LC_ALL=C jarsigner -verify -verbose -certs "$AAB" > "$VERIFY_LOG" 2>&1 && \ grep -Fq 'jar verified.' "$VERIFY_LOG"; then echo "AABの署名検証に成功しました" cp -f "$AAB" /sdcard/Download/sampleApp-release-production.aab ls -lh /sdcard/Download/sampleApp-release-production.aab else tail -n 25 "$VERIFY_LOG" echo "AABの生成または署名検証に失敗したため、コピーしません" fi rm -f "$VERIFY_LOG" unset PDFEDITOR_UPLOAD_STORE_PASSWORD PDFEDITOR_UPLOAD_KEY_PASSWORD 今回はUbuntuから直接 /sdcard/Download/ にコピーできました。これでAndroidのファイル管理アプリからAABを選択し、Google Play Consoleにアップロードできます。 実際のアップロードでは、以前使用したversionCodeは再利用できないというエラーにも遭遇しました。その場合は未使用のversionCodeに更新し、AABを再ビルドします。 ! 注意: 署名鍵(.jks)とパスワードはGitHubへコミットしません。アプリ更新時は、登録済みのアップロード鍵を継続して使用します。なお、上記の環境変数名と広告モードは今回のプロジェクトの設定に依存します。 まとめ 今回、特につまずいたのは次の3点です。 SDK Platformのパッケージ名は、想定したandroid-37ではなくandroid-37.0だったこと 標準のBuild Toolsの一部がARM64環境では実行できず、ARM64版実行ファイルとGradleのAAPT2指定が必要だったこと Ubuntu内の /root/AppProjects/sampleApp とTermux側から見た保存先が同じフォルダを指すことを理解しておくこと PCやAndroid Studioを使わずにビルドできるのは便利ですが、ARM64版ツールの入手と環境依存の設定が必要で、一般的なPC向けAndroid開発よりも手間はかかりました。 今回は実機でDebug APKの生成・起動まで成功し、その後の署名付きAAB作成にも同じスマホを利用できました。 参考リンク PRoot-Distro(公式リポジトリ) Android SDK Command-line Tools(Android Developers) sdkmanager(Android Developers) ARM64向けAndroid SDK Tools(amirghm) 構築の参考にしたZenn記事 最後のZenn記事も、環境構築を始める際の参考にさせていただきました。