質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.10%

cocos2d-xで作成したプログラムがAndroidのエミュレータ及び実機でビルドできません

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 2,796

score 9

前提・実現したいこと

cocos2d-xを利用してスマートフォンゲームを作っています。
Macbook Pro のターミナル上で cocos new コマンドでHelloWorldプログラムを作成し、Android Studio でビルドしたところ、エミュレータ上で、アプリケーション起動後すぐにアプリが停止してしまい、以下のようなエラーメッセージがターミナルに出力されてしまいました。
また、実機でもビルドしてみたものの、全く同じ状態になり、Android Device Monitor の LogCat で以下のような出力がありました(抜粋)。

発生している問題・エラーメッセージ

________以下、ターミナルでの出力____________

MacBook-Pro:HelloCocos4 user$ cocos run -p android --android-studio
Building mode: debug
Using Android Studio project : /Users/user/cocos2d-xProjects/HelloCocos4/proj.android-studio
running: '/Users/user/Library/Android/sdk/tools/android update project -t android-13 -p /Users/user/cocos2d-xProjects/HelloCocos4/proj.android-studio/app'


The "android" command is deprecated.
For manual SDK, AVD, and project management, please use Android Studio.
For command-line tools, use tools/bin/sdkmanager and tools/bin/avdmanager


Invalid or unsupported command "update project -t android-13 -p /Users/user/cocos2d-xProjects/HelloCocos/proj.android-studio/app"

Supported commands are:
android list target
android list avd
android list device
android create avd
android move avd
android delete avd
android list sdk
android update sdk
Error running command, return code: 2.

_________以下、Android Device Monitor での LogCat 出力(抜粋)_____
06-20 20:06:59.038: E/AndroidRuntime(6900): FATAL EXCEPTION: main
06-20 20:06:59.038: E/AndroidRuntime(6900): Process: com.mycompany.HelloCocos4, PID: 6900
06-20 20:06:59.038: E/AndroidRuntime(6900): java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.mycompany.HelloCocos4-1/base.apk"],nativeLibraryDirectories=[/data/app/com.mycompany.HelloCocos4-1/lib/arm64, /system/lib64, /vendor/lib64]]] couldn't find "libMyGame.so"
06-20 20:06:59.038: E/AndroidRuntime(6900):     at java.lang.Runtime.loadLibrary0(Runtime.java:984)
06-20 20:06:59.038: E/AndroidRuntime(6900):     at java.lang.System.loadLibrary(System.java:1562)
06-20 20:06:59.038: E/AndroidRuntime(6900):     at org.cocos2dx.lib.Cocos2dxActivity.onLoadNativeLibraries(Cocos2dxActivity.java:248)
06-20 20:06:59.038: E/AndroidRuntime(6900):     at org.cocos2dx.lib.Cocos2dxActivity.onCreate(Cocos2dxActivity.java:264)
06-20 20:06:59.038: E/AndroidRuntime(6900):     at android.app.Activity.performCreate(Activity.java:6682)
06-20 20:06:59.038: E/AndroidRuntime(6900):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
06-20 20:06:59.038: E/AndroidRuntime(6900):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2619)
06-20 20:06:59.038: E/AndroidRuntime(6900):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2727)
06-20 20:06:59.038: E/AndroidRuntime(6900):     at android.app.ActivityThread.-wrap12(ActivityThread.java)
06-20 20:06:59.038: E/AndroidRuntime(6900):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1478)
06-20 20:06:59.038: E/AndroidRuntime(6900):     at android.os.Handler.dispatchMessage(Handler.java:102)
06-20 20:06:59.038: E/AndroidRuntime(6900):     at android.os.Looper.loop(Looper.java:154)
06-20 20:06:59.038: E/AndroidRuntime(6900):     at android.app.ActivityThread.main(ActivityThread.java:6121)
06-20 20:06:59.038: E/AndroidRuntime(6900):     at java.lang.reflect.Method.invoke(Native Method)
06-20 20:06:59.038: E/AndroidRuntime(6900):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
06-20 20:06:59.038: E/AndroidRuntime(6900):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)

該当のソースコード

C++
ソースコードは、cocos コマンドで作成した初期状態の HelloWorld のままです。

試したこと

Android NDK のバージョンが新しすぎると良くないとのことでしたので、Android NDK r9d をダウンロードしてパスを指定してみましたが変化なしでした。
その他、ネットや書籍で調べて得た方法を片っ端から試してみても、全く解決せず、打つ手なしの状態です。
ちなみに、Xcode では、問題なくビルドできています。

補足情報(言語/FW/ツール等のバージョンなど)

cocos2d-xのバージョンは3.14です。
文章読みにくくてすいません。解決方法に何か心当たりのある方、よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

原因は、Android SDKの更新により、コマンドラインでのビルドが出来なくなったことです。
エラーメッセージにもその事が書かれています。

The "android" command is deprecated.
For manual SDK, AVD, and project management, please use Android Studio.
For command-line tools, use tools/bin/sdkmanager and tools/bin/avdmanager


Andoid SDKのバージョンを古くする事で回避できますが、根本的な解決にはなりません。

cocos2d-xの本体をv3.15.1で環境を作り直し、cocos newでプロジェクトを新規に作り直しましょう。
v3.15.1では、Android Studioのみでビルドできるようにプロジェクト設定が変更されています。
またNDKのバージョンはr14bが推奨です。
Android Studioでビルドする都合上、NDKは<ANDROID_SDK_ROOT>/ndk-bundle/に配置されている必要があります。
ここにインストールされていない場合は、Android StudioからNDKのダウンロード&インストールが出来るので気にしなくても良いかもしれません。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/06/21 22:44

    回答ありがとうございます!
    先ほど、cocos2d-x v3.15.1 をダウンロードし、ターミナル上で setup.py の実行及び source .bash_profile コマンドで環境設定を行いました。その後、新規プロジェクトを作成し、Android Studio でビルドしたところ、ビルド後にAndroid Studio 上で、以下のようなエラーが出力されてしまいました。

    /Users/user/cocos2d-xProjects/HelloCocos6/cocos2d/cocos/platform/android/jni/ProcessCpuTracker.cpp
    Error:(69, 54) error: 'read' was not declared in this scope
    Error:(70, 13) error: 'close' was not declared in this scope
    Error:(69, 54) error: 'read' was not declared in this scope
    Error:(70, 13) error: 'close' was not declared in this scope

    ソースコードの該当箇所は以下です。

    ______________ProcessCpuTracker.cpp________________
    #ifdef ANDROID
    int fd = open("/proc/stat", O_RDONLY);

    if (fd < 0)
    {
    return cpuInfos;
    }

    const int len = read(fd, buffer, sizeof(buffer)-1); // この部分のreadがエラーです
    close(fd); // この部分のcloseがエラーです。

    if (len < 0) {
    LOGD("Unable to open process fd=%d", fd);
    return cpuInfos;
    }
    buffer[len] = 0;
    #else

    この場合、何か初期状態の Hello World から修正しなければならないのでしょうか?
    もし何か思い当たることがありましたら、ご教授お願いできませんでしょうか。
    よろしくお願いします。

    キャンセル

  • 2017/06/22 07:40

    SDK マネージャーで NDK のバージョンを確認したところ、バージョンが15となっていたため、NDK r14b をダウンロードし、Library/Android/sdk/ndk-bundle と置き換えたところ、無事起動することができました。本当に助かりました。ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.10%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る