AndroidのNDKですが、普通にC/C++ソースをコンパイル、リンクするぐらいならWindowsでも問題無いのですが、オープンソース系を使ってライブラリを作成してからリンク等をする場合、ちょっと環境的に無理があります。
それでも、MacOSなら、それなりにビルドツールが揃っているのでなんとかなるのですが、Windowsとなると難しい側面が多いですよね。
じゃー、Linuxでやれば良いじゃんとなるのですが、Windows使ってる方が何かと効率が良い時もあるんですよね。
ということで、両立させる良い方法はというと、Windowsには、WSLがありますよね。
このWSLにAndroid用ビルド環境を構築しておき、この環境でライブラリをビルド出来るようにすれば便利です。
WSL環境
WSLは、ChatGPTにでも聞いて環境構築して下さいませ。
ChatGPTは、万能ですよ。
まず、WSLにてUbuntu環境を用意します。 他でも良いですが、Debian系が好きなので
それでは、構築です。
wslを起動して作業開始しましょう。VSCodeなんかを使えば楽ですよ。
1.java環境インストール
apt install openjdk-17-jdk
.bashrcに追記
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin
JAVA環境が複数ある場合、以下のコマンドで確認して下さいね。
update-alternatives --config java
2.Android環境インストール
https://developer.android.com/studio#downloads
linux コマンドライン版の zip形式をダウンロードし、ホームへコピーする
unzip [android-sdk.zip]
mkdir -p ~/Android/Sdk/cmdline-tools
ちょっと、古いバージョンだと都合が悪いので、後の作業の為にリネームしときます。
mv cmdline-tools ~/Android/Sdk/cmdline-tools/latest.org
.bashrcに追記
export ANDROID_HOME=$HOME/Android/Sdk
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/cmdline-tools/latest.org/bin
3.Android開発環境を整える
sdkmanager --install "cmdline-tools;latest"
ここで、cmdline-toolsがだぶってしまうので、orgを削除
rm -rf ~/Android/Sdk/cmdline-tools/latest.org
sdkmanager --install "platform-tools"
.bashrcに追記
export PATH=$PATH:$ANDROID_HOME/platform-tools
ライセンスAgree
sdkmanager --licenses
パッケージリスト
sdkmanager --list
NDK <- ここらへんは、バージョンを考慮して下さい
sdkmanager --install "ndk-bundle"
sdkmanager --install "ndk;24.0.8215888"
sdkmanager --install "ndk;25.1.8937393"
sdkmanager --install "ndk;26.1.10909125"
sdkmanager --install "cmake;3.18.1"
sdkmanager --install "cmake;3.22.1"
sdkmanager --install "build-tools;33.0.0"
sdkmanager --install "platforms;android-34"
パッケージ更新
sdkmanager --update
4.AndroidStudio側
基本は、AndroidStudio NDK で、openssl と libssh ビルド と同じです。
しかし、scratch.shを実行しても、正しく動作しませんよね。
なので、ラッパーのbatとshを作成します。opensslのサンプルです。
/---openssl-1.1.1n
|--output <- ここにインクルードとライブラリが出来上がります。
|--build.sh
|--wslscrach.bat
|--wslscratch.sh
wslscrach.bat
wsl -d ubuntu ./wslscratch.sh
echo exit
wslscratch.sh
#!/bin/bash
SRCFOLDER=`pwd`
rm -rf output/*
rm -rf ~/openssl
cp -rp ../openssl ~/.
cd ~/openssl
./scratch.sh
cp -rp output/* ${SRCFOLDER}/output/
これで、wslscrach.batを実行することで、outputフォルダにscratch.shの結果が出力されます。
wslscratch.shで、カレントフォルダをコピーしてビルドしているんですが、直接ビルドすることも可能です。
しかし、WSLの仕様で、Windows側のファイルを直接操作すると、めちゃくちゃ遅くなります。
なので、一旦、Linux側へソース環境をコピーしてビルドするようにしています。