web-dev-qa-db-ja.com

ログインする簡単な方法Android NDKコード?

Eclipseを使用してAndroid NDKアプリケーションでCコードを簡単にデバッグする方法を探しています。gdbなどを使用してアプリをデバッグする方法を読みましたが、方法はメッセージをEclipseにプッシュする方法。

私は、Cで印刷機能を使用し、DDMSログまたは同様のものでそれを見るのと同じくらい簡単なソリューションを探しています。これを行った経験はありますか?

65
wajiw

Androidロギング機能を使用できます:

#include <Android/log.h>

#define APPNAME "MyApp"

__Android_log_print(Android_LOG_VERBOSE, APPNAME, "The value of 1 + 1 is %d", 1+1);

また、Android.mkファイルで、ロギングライブラリに対してリンクしていることを確認してください。

  LOCAL_LDLIBS := -llog
117
svdree

おそらく最も簡単な方法は、printf()ステートメントをシステムログにリダイレクトすることです( 公式ADBリファレンスマニュアル の「stdoutおよびstderrの表示」セクションに基づきます)。

コマンドラインで次の3つのコマンドを入力します。

adb Shell stop
adb Shell setprop log.redirect-stdio true
adb Shell start

次に、Eclipseデバッガーの「LogCat」ウィンドウを表示するか、コマンドラインで次のように入力して、「printf()」ステートメントの出力を表示できます。

adb logcat

エミュレータまたはデバイスから転送する前にデータがバッファリングされるため、次のようにstdoutバッファを必ずフラッシュする必要があることに注意してください。

printf("Hello, I am %d years old!\n", 30);
fflush(stdout);

その後、「I/stdout:」で始まるログメッセージが表示されます。

12
Shervin Emami

これまでにさまざまなログレベルに関する情報を投稿した人はいません。答えは、ロギングの「画像」をいっぱいにする試みです

#include <Android/log.h>

#define TAG "MY_TAG"

#define LOGE(...) __Android_log_print(Android_LOG_ERROR,    TAG, __VA_ARGS__)
#define LOGW(...) __Android_log_print(Android_LOG_WARN,     TAG, __VA_ARGS__)
#define LOGI(...) __Android_log_print(Android_LOG_INFO,     TAG, __VA_ARGS__)
#define LOGD(...) __Android_log_print(Android_LOG_DEBUG,    TAG, __VA_ARGS__)

使用法:

char err[] = "wrong";
LOGE("Something went %s", err);

以下のリンクAndroidログライブラリ。

Android.mk

LOCAL_LDLIBS := -llog

CMakeLists.txt

find_library( log-lib log )
target_link_libraries( ${log-lib} )

さらに読む: ロギング

6
Onik

また、少しユーティリティすることができます

#include <Android/log.h>

#define LOGI(...) ((void)__Android_log_print(Android_LOG_INFO, "native-lib", __VA_ARGS__))

使用法:

std::string hello = "Hello from C++";
int a = 1;
LOGI("int %d, string: %s", a, hello.c_str());
2
Geng Jiawen

ADT 20には、EclipseでNDKプロジェクトをビルドおよびデバッグするためのサポートを提供するNDKプラグインが含まれています。 このドキュメント は、NDKプラグインをインストールして使用する方法を説明しています。手順は非常に簡単で、ほんの数ステップで構成されています。

これは私が見つけた最も簡単な解決策であり、私にとってはうまくいきました。

注:ADTバンドルを使用している場合は、新しいソフトウェアをインストールしてC開発ツールをインストールするだけでよく(スクリーンショットを参照)、「NDKプラグインの使用」の部分にすぐにアクセスできます。

c dev tools install

編集:Eclipse junoのCDTに問題があるようです http://code.google.com/p/Android/issues/detail?id = 33788 Eclipseのデバッガーがブレークポイントを見つけられない原因となります。私が使用した回避策は、アプリをデバッグモードで起動することです(ネイティブアプリとしてデバッグするのではなく、「通常の」デバッグ)、コマンドラインでプロジェクトルートに行き、ndk-gdb(これによりgdb.setupファイルobj/local/armeabiフォルダ)。その後、ブレークポイントは通常どおり機能しました。

上記のリンクの問題に関連するコメントでは、他の回避策がいくつか提案されていますが、これよりも多くの努力が必要と思われるため、試しませんでした。

2
draganstankovic
2
Chris