トップページ > 記事閲覧
Android版のDXライブラリで外部javaライブラリを使用する方法
名前:みこ 日時: 2021/12/14 08:35

長らくご愛用させて頂いております。 クロスプラットフォーム化のために、AndroidプロジェクトをDxLibに移行作業をしております。 Android独自の機能はjavaで、ゲーム本体のプログラムはC/C++で開発する事により、 クロスプラットフォームの実現をしようと思っているのですが、 Android独自の機能の導入でハマってしまい、調べても分からなかった為当掲示板にて質問致します。 【開発環境】 Windows 10 Visual Studio Community 2019 DXライブラリ Ver 3.22c 【やりたい事】 DXLibでAdMob(広告)や、 Google Play Billing Library(課金機能)の導入。 【やってみた事】 ・Android SDK マネージャーより『Google Play Service』や、『Google AdMob Ads SDK』のインストール ・jarファイル(google-play-services.jar)の追加 →javaプロジェクトに『libs』フォルダを追加   『project.properties』ファイルに『jar.libs.dir=libs』と記載 ・上記に加え、『AndroidManifest.xml』ファイル   application android:hasCode="true"   activity android:name=com.project.Manifest   に変更     『src\com\project\Manifest.java』ファイル追加、  package com.project;  import com.google.android.gms.ads.AdView;   上記を試したが、AdViewがインポートできませんでした。 【公式ページを参考に試した事】 参考にしたページ : DXライブラリ Android版を使用した Androidアプリで Java のコードで GPS を使用する( Visual Studio編 )  リンク先     : h t t p s://dxlib.xsrv.jp/lecture/Android/Android_Java_GPS_VisualStudio.html#R3 4.Java のコードを入力する 記載の import android.support.v4.app.ActivityCompat; がインポートできませんでした。 ご教授の程宜しくお願い申し上げます。
メンテ

Page: 1 |

Re: Android版のDXライブラリで外部javaライブラリを使用する方法 ( No.1 )
名前:管理人 日時:2021/12/14 22:51

> 4.Java のコードを入力する 記載の > import android.support.v4.app.ActivityCompat; > がインポートできませんでした。 すみません、Visual Studio の C++ の Androidアプリ作成機能はかなり昔の状態で更新が止まってしまっているので、 Android Studio を使用する方式を試してみてください m(_ _;m
メンテ
Re: Android版のDXライブラリで外部javaライブラリを使用する方法 ( No.2 )
名前:みこ 日時:2021/12/16 17:12

ご回答ありがとうございます! 左様でございますか、可能であればクロスプラットフォームに優れているVisualStudioで開発をしたかったのですが、 AndroidStudioでもifdef等使えば出来なくもなさそうなので断念します。 ※前日提示したDXライブラリ Ver 3.22c が少し古かったので最新版(Ver3.23)に更新してあります。 今後の為に試した事を一通り記載させて頂きます。※昨日一昨日の事ですのでエラーメッセージ等は消してしまいました。 【Visual Studio エラー内容】 ソフト     | @ | A | B | community 2017 | 〇 | 〇 | ✕ | community 2019 | 〇 | 〇 | ✕ | community 2022 | 〇 | ✕ | ✕ | @ ビルドに成功した A デバッグに成功した (四角形が表示された) B javaを有効化してビルドに成功した ※4.Java のコードを入力する 記載の Manifest.xmlを編集しただけでエラー発生、jarファイルを読み込む以前の問題でした。 以下、質問内容が変わってしまうのですが、AndroidStudioを使用した場合もうまくいきませんでした。 【環境】 Android Studio 4.0 Build-Tools 30.0.2 NDK 23.1.7779620 Gradle Plugin 4.0.0 Gradle Ver 6.1.1 JDK 8 SDK 31 【結果】 ビルドが通らない native-lib.cpp > "DxLib.h" に赤い波線 (file not found) DrawBox 関数以外の全てのDxLib関数が赤文字 (Use of undeclared identifier 'TRUE') android_main が灰色 (Function 'android_main' is never used ) MainActivity.java > public native String stringFromJNI(); が赤文字 (Cannot resolve corresponding JNI function Java_com_meca_zeros_MainActivity_stringFromJNI. Could not find an existing file with JNI definitions in it. Please add a file with JNI definitions to the project in order to get suggestions. ) 【エラーログ】 Build command failed. Error while executing process C:\AndroidSDK_400\cmake\3.10.2.4988404\bin\ninja.exe with arguments {-C ******プロジェクトパス******\app\.cxx\cmake\debug\armeabi-v7a native-lib} ninja: Entering directory `******プロジェクトパス******\app\.cxx\cmake\debug\armeabi-v7a' [1/2] Building CXX object CMakeFiles/native-lib.dir/native-lib.cpp.o [2/2] Linking CXX shared library ******プロジェクトパス******\app\build\intermediates\cmake\debug\obj\armeabi-v7a\libnative-lib.so FAILED: ******プロジェクトパス******/app/build/intermediates/cmake/debug/obj/armeabi-v7a/libnative-lib.so cmd.exe /C "cd . && C:\AndroidSDK_400\ndk\23.1.7779620\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe --target=armv7-none-linux-androideabi16 --gcc-toolchain=C:/AndroidSDK_400/ndk/23.1.7779620/toolchains/llvm/prebuilt/windows-x86_64 --sysroot=C:/AndroidSDK_400/ndk/23.1.7779620/toolchains/llvm/prebuilt/windows-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -D_FORTIFY_SOURCE=2 -march=armv7-a -mthumb -Wformat -Werror=format-security -fno-limit-debug-info -static-libstdc++ -Wl,--build-id=sha1 -Wl,--no-rosegment -Wl,--fatal-warnings -Wl,--no-undefined -Qunused-arguments -shared -Wl,-soname,libnative-lib.so -o ******プロジェクトパス******\app\build\intermediates\cmake\debug\obj\armeabi-v7a\libnative-lib.so CMakeFiles/native-lib.dir/native-lib.cpp.o -LC:/DxLib_Android/プロジェクトに追加すべきファイル_Android用/armeabi-v7a -llog -landroid -lGLESv1_CM -lEGL -lGLESv2 -lOpenSLES -lm -lDxLib -lDxUseCLib -ljpeg -lpng -lzlib -ltiff -ltheora_static -lvorbis_static -lvorbisfile_static -logg_static -lbullet -lopus -latomic -lm && cd ." ld: error: undefined symbol: __gnu_thumb1_case_uqi >>> referenced by DxBaseImage.cpp >>> DxBaseImage.o:(DxLib::ReverseGraphImage(DxLib::tagBASEIMAGE*)) in archive C:/DxLib_Android/プロジェクトに追加すべきファイル_Android用/armeabi-v7a\libDxLib.a >>> referenced by DxBaseImage.cpp >>> DxBaseImage.o:(DxLib::ReverseBaseImageH(DxLib::tagBASEIMAGE*)) in archive C:/DxLib_Android/プロジェクトに追加すべきファイル_Android用/armeabi-v7a\libDxLib.a >>> referenced by DxBaseImage.cpp >>> DxBaseImage.o:(DxLib::ReverseBaseImage(DxLib::tagBASEIMAGE*)) in archive C:/DxLib_Android/プロジェクトに追加すべきファイル_Android用/armeabi-v7a\libDxLib.a >>> referenced 85 more times ld: error: undefined symbol: __gnu_thumb1_case_uhi >>> referenced by DxBaseImage.cpp >>> DxBaseImage.o:(DxLib::ReverseBaseImageV(DxLib::tagBASEIMAGE*)) in archive C:/DxLib_Android/プロジェクトに追加すべきファイル_Android用/armeabi-v7a\libDxLib.a >>> referenced by DxBaseImage.cpp >>> DxBaseImage.o:(DxLib::DrawCircleBaseImage(DxLib::tagBASEIMAGE*, int, int, int, int, int, int, int, int)) in archive C:/DxLib_Android/プロジェクトに追加すべきファイル_Android用/armeabi-v7a\libDxLib.a >>> referenced by DxBaseImage.cpp >>> DxBaseImage.o:(DxLib::DrawCircleBaseImage(DxLib::tagBASEIMAGE*, int, int, int, int, int, int, int, int)) in archive C:/DxLib_Android/プロジェクトに追加すべきファイル_Android用/armeabi-v7a\libDxLib.a >>> referenced 60 more times ld: error: undefined symbol: __gnu_thumb1_case_si >>> referenced by DxBaseImage.cpp >>> DxBaseImage.o:(DxLib::GraphColorMatchBltVer2(void*, int, DxLib::tagCOLORDATA const*, void const*, int, DxLib::tagCOLORDATA const*, void const*, int, DxLib::tagCOLORDATA const*, tagPOINT, tagRECT const*, int, int, unsigned int, int, int, int, int, int)) in archive C:/DxLib_Android/プロジェクトに追加すべきファイル_Android用/armeabi-v7a\libDxLib.a >>> referenced by DxBaseImage.cpp >>> DxBaseImage.o:(DxLib::GraphColorMatchBltVer2(void*, int, DxLib::tagCOLORDATA const*, void const*, int, DxLib::tagCOLORDATA const*, void const*, int, DxLib::tagCOLORDATA const*, tagPOINT, tagRECT const*, int, int, unsigned int, int, int, int, int, int)) in archive C:/DxLib_Android/プロジェクトに追加すべきファイル_Android用/armeabi-v7a\libDxLib.a >>> referenced by DxBaseImage.cpp >>> DxBaseImage.o:(DxLib::GraphColorMatchBltVer2(void*, int, DxLib::tagCOLORDATA const*, void const*, int, DxLib::tagCOLORDATA const*, void const*, int, DxLib::tagCOLORDATA const*, tagPOINT, tagRECT const*, int, int, unsigned int, int, int, int, int, int)) in archive C:/DxLib_Android/プロジェクトに追加すべきファイル_Android用/armeabi-v7a\libDxLib.a >>> referenced 46 more times ld: error: undefined symbol: __gnu_thumb1_case_sqi >>> referenced by DxBaseImage.cpp >>> DxBaseImage.o:(DxLib::SetPixelBaseImage(DxLib::tagBASEIMAGE*, int, int, int, int, int, int)) in archive C:/DxLib_Android/プロジェクトに追加すべきファイル_Android用/armeabi-v7a\libDxLib.a >>> referenced by DxModel.cpp >>> DxModel.o:(DxLib::__MV1LoadTexture(void**, int*, void**, int*, int*, int*, int*, char**, char**, wchar_t**, wchar_t**, wchar_t const*, wchar_t const*, wchar_t const*, int, float, int, int, DxLib::MV1_FILE_READ_FUNC const*, bool, int, int)) in archive C:/DxLib_Android/プロジェクトに追加すべきファイル_Android用/armeabi-v7a\libDxLib.a >>> referenced by DxModelLoader0.cpp >>> DxModelLoader0.o:(DxLib::PStrMoveOneB(DxLib::X_PSTRING*)) in archive C:/DxLib_Android/プロジェクトに追加すべきファイル_Android用/armeabi-v7a\libDxLib.a >>> referenced 23 more times ld: error: undefined symbol: __gnu_thumb1_case_shi >>> referenced by DxBaseImage.cpp >>> DxBaseImage.o:(DxLib::SaveBaseImageToBmp_WCHAR_T(wchar_t const*, DxLib::tagBASEIMAGE const*)) in archive C:/DxLib_Android/プロジェクトに追加すべきファイル_Android用/armeabi-v7a\libDxLib.a >>> referenced by DxChar.cpp >>> DxChar.o:(DxLib::CL_vsnprintf(int, int, int, int, char*, unsigned int, char const*, std::__va_list)) in archive C:/DxLib_Android/プロジェクトに追加すべきファイル_Android用/armeabi-v7a\libDxLib.a >>> referenced by DxChar.cpp >>> DxChar.o:(DxLib::CL_vsnprintf(int, int, int, int, char*, unsigned int, char const*, std::__va_list)) in archive C:/DxLib_Android/プロジェクトに追加すべきファイル_Android用/armeabi-v7a\libDxLib.a >>> referenced 43 more times clang++: error: linker command failed with exit code 1 (use -v to see invocation) ninja: build stopped: subcommand failed. また、一番安定していた(個人的な価値観)バージョンのAndroidStudioでも試してみた所、ビルドには通りましたがデバッグで四角形が表示されませんでした。 【環境】 Android Studio ArcticFox 2020.3.1 Patch 4 Build-Tools 32.0.0 NDK 23.1.7779620 Gradle Plugin 7.0.4 Gradle Ver 7.0.2 JDK 11.0.10 SDK 31 デバッグは実機使用 (SCV40 Android 10) 【結果】 デバッグに失敗 ※以下AndroidStudio 4.0 と同様 native-lib.cpp > "DxLib.h" に赤い波線 (file not found) DrawBox 関数以外の全てのDxLib関数が赤文字 (Use of undeclared identifier 'TRUE') android_main が灰色 (Function 'android_main' is never used ) MainActivity.java > public native String stringFromJNI(); が赤文字 【エラーログ(デバッグ時)】 ※赤文字は印(★)してあります 12/16 14:43:04: Launching 'app' on samsung SCV40. Install successfully finished in 4 s 365 ms. $ adb shell am start -n "com.***プロジェクト名***/android.app.NativeActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -D Waiting for application to come online: com.***プロジェクト名*** | com.***プロジェクト名***.test Waiting for application to come online: com.***プロジェクト名*** | com.***プロジェクト名***.test Connected to process 17502 on device 'samsung-scv40-****デバイスID****'. Connecting to ***プロジェクト名*** Waiting for application to come online: com.***プロジェクト名*** | com.***プロジェクト名***.test ★Waiting for application to start debug server Connecting to ***プロジェクト名*** Waiting for application to come online: com.***プロジェクト名*** | com.***プロジェクト名***.test ★Waiting for application to start debug server Connecting to ***プロジェクト名*** Waiting for application to come online: com.***プロジェクト名*** | com.***プロジェクト名***.test ★Waiting for application to start debug server Connecting to ***プロジェクト名*** Waiting for application to come online: com.***プロジェクト名*** | com.***プロジェクト名***.test ★Waiting for application to start debug server Connecting to ***プロジェクト名*** Waiting for application to come online: com.***プロジェクト名*** | com.***プロジェクト名***.test ★Waiting for application to start debug server Connecting to ***プロジェクト名*** Waiting for application to come online: com.***プロジェクト名*** | com.***プロジェクト名***.test ★Waiting for application to start debug server Connecting to ***プロジェクト名*** Waiting for application to come online: com.***プロジェクト名*** | com.***プロジェクト名***.test ★Waiting for application to start debug server Connecting to ***プロジェクト名*** Waiting for application to come online: com.***プロジェクト名*** | com.***プロジェクト名***.test ★Waiting for application to start debug server Connecting to ***プロジェクト名*** Waiting for application to come online: com.***プロジェクト名*** | com.***プロジェクト名***.test ★Waiting for application to start debug server Connecting to ***プロジェクト名*** Waiting for application to come online: com.***プロジェクト名*** | com.***プロジェクト名***.test ★Waiting for application to start debug server Connecting to ***プロジェクト名*** Waiting for application to come online: com.***プロジェクト名*** | com.***プロジェクト名***.test ★Waiting for application to start debug server Connecting to ***プロジェクト名*** Waiting for application to come online: com.***プロジェクト名*** | com.***プロジェクト名***.test ★Waiting for application to start debug server Connecting to ***プロジェクト名*** Waiting for application to come online: com.***プロジェクト名*** | com.***プロジェクト名***.test ★Waiting for application to start debug server Connecting to ***プロジェクト名*** Waiting for application to come online: com.***プロジェクト名*** | com.***プロジェクト名***.test ★Waiting for application to start debug server ★Could not connect to remote process. Aborting debug session. また何か分かり次第ご報告させて頂きます。 お手数をお掛けしますが何卒宜しくお願い申し上げます。
メンテ
Re: Android版のDXライブラリで外部javaライブラリを使用する方法 ( No.3 )
名前:管理人 日時:2021/12/17 02:23

私も現在 Android Studio ArcticFox 2020.3.1 Patch 4 を使用していますので、 Android Studio ArcticFox 2020.3.1 Patch 4 であれば正常に実行することができると思います まず新規プロジェクトを作成する時のダイアログの Minimum SDK のバージョンを API 26: Android 8.0 (Oreo) など、少し古いバージョンを指定するようにしてください あと、CMakeLists.txt の以下の箇所について add_library( # Sets the name of the library. (プロジェクト名) # Sets the library as a shared library. SHARED # Provides a relative path to your source file(s). native-lib.cpp) ↑ (プロジェクト名) となっている部分を native-lib に変更してください add_library( # Sets the name of the library. native-lib # Sets the library as a shared library. SHARED # Provides a relative path to your source file(s). native-lib.cpp) もう一つ、target_link_libraries の最初の行もプロジェクト名となっていると 思いますので、こちらも native-lib に変更してください target_link_libraries( # Specifies the target library. (プロジェクト名) ↓ target_link_libraries( # Specifies the target library. native-lib 上記以外の箇所についてはこちらの使い方ページの通りの手順でプロジェクトを作成してください m(_ _)m <Android Studio 4.0 による Androidアプリ開発でのDXライブラリの使い方> https://dxlib.xsrv.jp/use/dxuse_android_studio_4_0.html
メンテ
Re: Android版のDXライブラリで外部javaライブラリを使用する方法 ( No.4 )
名前:みこ 日時:2021/12/17 07:39

お世話になっております。 ご回答ありがとうございます! native-lib に置き換えた場合も同じエラーに発展します。 Minimum SDK を 26 にした場合もビルドは通りますが、native-lib.cpp、MainActivity.java 両方同じエラー内容でした。 もう少し調べてみたのですが、 kanamaru 様の立てた『android版の使いかたについて』2021/12/11 11:05  >名前:管理人 日時:2021/12/11 21:26  >SDK 30 や SDK 31 は最新でまだ安定していないのか、DXライブラリ用に何も設定を変更していなくても  >C++ のプロジェクトはエラーが発生して起動しないようです とありましたので、同スレ内に記載してあるバージョンを全て合わせ、ターゲットSDKを29に落としてみましたが、 上記と同じエラー内容でした。 build.gradle > implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.constraintlayout:constraintlayout:2.0.4' testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' gradle  7.0.2 gradleplugin 7.0.4 ↓以下は情報が無かった為、管理人様とバージョンが相違しているかもしれません。 Build-Tools 32.0.0    (最新) NDK 23.1.7779620 (最新) JDK 11.0.10   (個人的に一番怪しいと思います) SDK 29      (安定?) Minimum SDK   26 その他全て最新 念の為スクショを貼っておきます。 h t t p s://dl.dropboxusercontent.com/s/id41uqb6stp0own/AndroidStudioエラー.jpg また何か分かり次第ご連絡させて頂きます。 お手数をお掛けしますが何卒宜しくお願い申し上げます。
メンテ
Re: Android版のDXライブラリで外部javaライブラリを使用する方法 ( No.5 )
名前:kanamaru 日時:2021/12/17 08:20

スクショをみました。 まず、c++のプログラムの方はandroidstudioがdxlib.hを見つけられないので赤文字になってたりします。 手元にあるきちんとエミュレータで実行確認したプロジェクトでもそうなっています。なので気にしなくても問題はありません。 最近書いたアドベントカレンダーの記事でも書きましたがおかげでスペルミスがわからないので解決策を見つけたいです。 以下間違っていたらすいません。 次にjavaについてですが、これはいらない関数だと思われます。 c++を使ったプロジェクト作成時に自動作成されたプロジェクトで使ってはいますが、 今回該当のjavaの関数は使わないはずです。なのでいっそのことjavaの該当箇所を消していいと思います。 実際dxlibのjavaコードを利用するサンプルでは該当箇所は消えてますし。 JDKは確かに気になりますが、多分大丈夫だと思います。影響あるならもっとエラーが出たりしても不思議ではありませんし。…多分。
メンテ
Re: Android版のDXライブラリで外部javaライブラリを使用する方法 ( No.6 )
名前:みこ 日時:2021/12/17 10:08

>kanamaru 様 ご回答ありがとうございます! エラーを無視して試しにデバッグしてみたら四角形が表示されました!ありがとうございます! そのままjavaコードの使用、Viewの表示まで確認出来ましたので、 最終目標のAdMobや、Google Play Billing Libraryの導入も時間の問題といった感じです。 ただ、kanamaru様もおっしゃる通り、DxLib.hを読み込めていない問題(赤文字等)が非常に気になります。 (今後膨大なコードを組む上でバグの発見が困難になったり、スペルミスが分からないといった問題もあり、何よりとても気持ち悪いです。。) こちらでも解決策を模索してみます。 宜しくお願い申し上げます。
メンテ
Re: Android版のDXライブラリで外部javaライブラリを使用する方法 ( No.7 )
名前:みこ 日時:2021/12/17 11:07

お世話になっております。 上記問題(赤文字等)について、解決策を見つけました。 DxLibを格納しているフルパスの日本語部分 ※"プロジェクトに追加すべきファイル_Android用" 等 を全て英文字に変え、CMakeList.txtのDxLibフルパスを反映させる。  ↓ 文字化けするのでヘッダーファイル(DxLib.hのみで特に問題無いと思います)の文字コードをUTF-8に変更  ↓ AndroidStudioを再起動  ↓ これでエラーが消えると思います。 ※エラーがまだ残っている場合Build > Clean Projectを実行して再起動 (文字コードの仕様上日本語が文字化けしている?) 以上、お手数をお掛けしますが何卒宜しくお願い致します。
メンテ
Re: Android版のDXライブラリで外部javaライブラリを使用する方法 ( No.8 )
名前:kanamaru 日時:2021/12/17 22:49

試してみました。 本当に赤線だったり赤文字が消えたのを確認しました。 まさかこんな簡単なことだとは。 てっきり何か追加で設定が必要だったりするんだろうと思ってました。 あくまでもdxlibの場所はcmakeが知っているだけでandroidstudioは知らないからだろうと思ってました。 (というか多分管理人さんも同じように考えていたと思います。確かどっかで似たようなことを書いていた記憶があります) 僕の場合はwindows版を使ってるし、プロジェクトに追加すべきファイル_Android用フォルダしかいらないよねということで、 プロジェクトに追加すべきファイル_Android用フォルダの中身を一個上の階層にコピーして他のいらないフォルダを消しました。 qiitaに公開してるアドベントカレンダーの記事更新しないと。
メンテ
Re: Android版のDXライブラリで外部javaライブラリを使用する方法 ( No.9 )
名前:管理人 日時:2021/12/18 15:00

> みこさん > DxLibを格納しているフルパスの日本語部分 > ※"プロジェクトに追加すべきファイル_Android用" 等 > を全て英文字に変え、CMakeList.txtのDxLibフルパスを反映させる。 >  ↓ > 文字化けするのでヘッダーファイル(DxLib.hのみで特に問題無いと思います)の文字コードをUTF-8に変更 ご情報ありがとうございます パスに日本語文字が含まれているのが原因だったんですね… 取り急ぎ『プロジェクトに追加すべきファイル_Android用』フォルダの名前を『Lib_Android』に変更して DxLib.h などのヘッダファイルの文字フォーマットを UTF8 に変更した Ver3.23 をアップしました m(_ _;m
メンテ
Re: Android版のDXライブラリで外部javaライブラリを使用する方法 ( No.10 )
名前:みこ(解決) 日時:2021/12/19 03:25

お世話になっております。 編集およびアップロードありがとうございます! これにて解決とさせて頂きます。 以上、宜しくお願い申し上げます。
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存