Windows for Android で Eclipse プロジェクトのネイティブ デバッグ サポートを機能させるのに問題があります。残念ながら、Google は 1 日以上調査を行った後も役に立ちませんでした。
私は日食のほとんどの初心者なので、私が推測する非標準的なことも行うので、解決策は簡単かもしれません。
私の Android プロジェクトは、私のデバイス (Acer Iconia A500 Android 3.2.1、HTC Incredible S Android 4.0.4 など) で既に機能し、正常に動作しています。
ADT プラグイン ウィザードでプロジェクトを作成し、ADT によって追加されたプロジェクト コンテキスト メニュー エントリを使用してネイティブ サポートを追加しました。
次に、既に持っている Java ファイルを追加しました (以前は CMake と Android スタンドアロン ツールチェーンを使用してコンパイルしていましたが、この方法でリモート デバッグを試みたことはありませんでした)。それらをドロップした「com.xy」の新しいパッケージを作成しました(プロジェクトは商用製品の一部になるため、実際のパッケージ名は明らかにしたくありません)。
次に、ソースを jni フォルダーにドラッグして追加しました。ソースは jni フォルダー内にはありませんが、プロジェクトの下の場所「../../」にリンクされています (クロスプラットフォーム アプリケーションの一部であるため、さまざまなツールチェーンでソース ファイルを再利用できます)。
また、次のように Android.mk を調整して、製品に同梱される 4 つの静的ライブラリにもリンクします。
LOCAL_PATH := $(call my-dir)
MY_PATH := $(LOCAL_PATH)
LOCAL_PATH := $(MY_SDK)/lib/Android/armeabi-v7aD
include $(CLEAR_VARS)
LOCAL_MODULE := A
LOCAL_SRC_FILES := libA.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := B
LOCAL_SRC_FILES := libB.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := C
LOCAL_SRC_FILES := libC.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_MODULE := D
LOCAL_SRC_FILES := libD.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
LOCAL_C_INCLUDES += $(my_SDK)/include/
LOCAL_PATH := $(MY_PATH)/../../..
LOCAL_CFLAGS += -Wno-format -DANDROID -fno-rtti -fno-exceptions #And many other flags If they are important I will post them later, too
LOCAL_CPPFLAGS += -fno-rtti -fno-exceptions
LOCAL_MODULE := MY_PROJECT
LOCAL_SRC_FILES := Android/Main.cpp # Some other sources..
LOCAL_LDLIBS := -lstdc++ -lEGL -lGLESv2 -llog -Wl,--allow-multiple-definition -Wl,--no-undefined
LOCAL_STATIC_LIBRARIES := A B C D
include $(BUILD_SHARED_LIBRARY)
Application.mk もあります。
APP_ABI := armeabi-v7a
APP_PLATFORM := android-9
APP_STL := stlport_static
APP_CFLAGS += -fno-rtti -fno-exceptions
次に、デバッグ構成の下に、デフォルトのアクティビティを起動して使用する新しい「Android ネイティブ アプリケーション」を追加しました。
デバッガー「${NdkGdb}」
コマンドファイル "${NdkProject}\libs\${NdkCompatAbi}\gdb.setup"
共有ライブラリ (自動的に追加) ${NdkProject}/obj/local/$NdkCompatAbi}/
残りも自動的に追加され、このように動作するはずです。
私が奇妙だと思うことの1つは、コンソール出力を取得することです
[2013-03-08 10:50:36 - cygpath を起動できません。] java.io.IOException: プログラム "cygpath" を実行できません: CreateProcess エラー = 2、指定されたファイルが見つかりません
しかし、この方法でプロジェクトをうまくビルドでき、後で gdb を接続しようとしても警告が表示されません (私は Msys を使用していますが、cygwin もインストールされているため、Eclipse がここで不平を言っている理由がわかりません)。
アプリケーションを起動すると、デバイスで起動し、次のコンソール出力 ([Android ネイティブ アプリケーション] gdb) が表示されます。
(no debugging symbols found)
Error while mapping shared library sections:
/system/bin/linker: No such file or directory.
Error while mapping shared library sections:
libstdc++.so: No such file or directory.
... And alot more of that type
(no debugging symbols found)
warning: Unable to find dynamic linker breakpoint function.
GDB will be unable to debug shared library initializers
and track explicitly loaded dynamic code.
warning: shared library handler failed to enable breakpoint
No line 219 in file "jni/../../../MySourceFile.cpp".
私は間違いなく NDK_DEBUG=1 でビルドします。静的 .a ライブラリは -g でビルドされます AndroidManifest.xml にはエントリ android:debuggable="true" があります。
(Msys を使用して) Eclipse プロジェクト ディレクトリで "sh /ndk-gdb --verbose" を実行すると、次の出力が得られます。
Android NDK インストール パス: /c/SDK/android-ndk-r7 デフォルトの adb コマンドを使用: /c/SDK/android-sdks/platform-tools/adb.exe 検出された ADB バージョン: Android Debug Bridge バージョン 1.0.31 最終的な ADB を使用コマンド: '/c/SDK/android-sdks/platform-tools/adb.exe' 自動検出されたプロジェクト パスを使用: . 検出されたパッケージ名: com.xy アプリケーションによってターゲットにされた ABI: armeabi-v7a デバイス API レベル: 13 デバイス CPU ABI: armeabi-v7a armeabi 互換性のあるデバイス ABI: armeabi-v7a 検出されたデバッグ可能なフラグ: true エラー: ターゲットにインストールされたデバッグ不可能なアプリケーションデバイス。デバッグ可能なバージョンを再インストールしてください!
このプロジェクトのネイティブ デバッグ サポートが本当に必要です。だから私は本当に助けていただければ幸いです。
cygwin を使わなければならないというのは本当ですか? デバッガーをアタッチしようとしているときに、妥当なエラー メッセージが表示されません。