android studio  gradle cmark 分かんない民のための 「Android C++ ライブラリビルド」

2021年8月からGoogle Play公開は、64bit対応が必須に

arm64-v8a  のsoファイルが生成したい

android studio  gradle cmark 分かんない民(自分)です。
androidアプリの64bit対応 必須まで1年ちょっとということで利用しているライブラリ周りを64bit化していく
手書き文字認識ライブラリを利用していたので今回は、これを64bitに対応させたい。

unity  androidの場合の ライブラリの確認

2015年位にgoogleplayに最初リリースした時のソースを再度使用する。

https://github.com/lizaifang/zinnia

このjniラッパー作成済みのプロジェクトを使いたい
32bitで作成していた時は、android NDK r8でarmeabi-v7a 32bitでビルドしてsoファイルのみUNITYに再配置を行った。
再度同手順にて、arm64-v8a  のsoファイルが生成したい。
当時は、eclipse  でサンプルのビルドを行うだけでsoファイルの生成ができたが、
公式のIDEもandroid studioになり、 gradle とcmarkの設定を行う必要がある。

普段unityでのみ開発しているのこと、今回必要なのはUnityで使用できるライブラリのみなので
android ndkのコマンドラインでビルドすることにした。
android studioの学習するかは、また今度。

 

・android ndkの最新版をダウンロードする。
・ndkのpathを通しておく
・cmdで ndk-buildを実行する →エラーでる
・エラー対応していく
・生成されたsoファイルをUnityへ配置する。

 

android ライブラリのアーキテクチャの確認

まず、現状Unityで使用しているライブラリのアーキテクチャの確認から。
windows環境なので、未だにCYGWIN使ってます。
cygwin 起動後 以下で確認 (cygdrive でファイルパスを指定する場合 ¥を/に変更してください)

armeabi-v7a 32bit アーキテクチャで有ることを確認します。

 

古いライブラリ ビルド手順

古いNDKだとarm64-v8aを生成できなかったので、android ndkをupdateする。
今回は、android studioでダウンロードしたパッケージを利用した。
ファイルの場所 「21.1.6352462」はバージョン
C:\Users\{ユーザー名}\AppData\Local\Android\Sdk\ndk\21.1.6352462

システム → システム詳細設定→環境変数→システム環境変数

パスは以下2つを追加する
変数名  ANDROID_NDK_HOME
値: ndkのファイルの場所 (例  C:\Users\{ユーザー名}\AppData\Local\Android\Sdk\ndk\21.1.6352462

変数名  path (以前のパスがあれば上書き)
値: ndkのファイルの場所 (例  C:\Users\{ユーザー名}\AppData\Local\Android\Sdk\ndk\21.1.6352462

cmdで ndk-buildを実行する →エラーでる

コマンドプロンプトを起動
①jniのフォルダパスへ移動

>cd C:\Users\user\Downloads\zinnia-1-master\zinnia-1-master\android\jni

②ビルドを実行する
C:\Users\user\Downloads\zinnia-1-master\zinnia-1-master\android\jni>ndk-build

③サンプルライブラリが古いndkにて構成されているためエラーが出る

 

修正手順
① C:\Users\user\Downloads\zinnia-1-master\zinnia-1-master\android\jni内の
application.mkファイルを
APP_STL := stlport_static  から
APP_STL := c++_shared に変更する

②C:\Users\user\Downloads\zinnia-1-master\zinnia-1-master\android\project.properties内の
target=android-19を
target=android-1に変更

これで再度ビルドを行うと、 C++のバージョンが11 または17に変更されているため
廃止になっているコードがいくつか出てきてエラーとなる
修正例

①SVM.CPP 50行目付近

ランダムの廃止のため以下に変更する

 

 

②trainer.cpp 106行目付近

文字の学習機能は、別途PCで行っているため、 コメントアウトした(;;)

③ return 0;追記 数カ所あり

 



各cppファイルを開いて
return 0;で戻り値を明示する。

これで再ビルドすると 今度は完了した。

 

64bitライブラリをunityに適用させる方法

ビルド後のsoファイルの場所は、
C:\Users\user\Downloads\zinnia-1-master\zinnia-1-master\android\libs内の各フォルダ
armeabi-v7a  →32bit用のライブラリ
arm64-v8a  → 64bit用のライブラリ
x86  →使用しない
x86_64 →使用しない
ただし、 以前はlibzinnia.so 1ファイルだったものが libc++_shared.soとセットになっている。

2つの.soファイルをコピーして
unityの構成内
Assets\Plugins\Android\libs内に
armeabi-v7aフォルダ
arm64-v8aフォルダ それぞれに貼り付け
フォルダがない場合は、手動で作成。
なお、unity側のdll呼び出しは、以前と同様です。(libc++_shared.soを追加する必要なし)
以上で終了♪

android studio  gradle cmark 分かんない民でもなんとかなった

android studio  gradle cmark 分かんない民でもなんとかライブラリを作成することができた。
同じような事例あると思います。sqlite3とか、 pdf等
iosは、別途対応予定です。
androidほど面倒じゃないので楽ちん。

 

参考にしたページ

https://developer.android.google.cn/distribute/best-practices/develop/64-bit?hl=ja

http://blog.livedoor.jp/nyangostar/archives/79801661.html

 

koo

Java,PHP,Ruby,android,ios,C#,C++,python,vba,unity,sqlなんでも手を出しては挫折する系。電子工作はじめました。

あわせて読みたい

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です