2016-05-10 15 views
2

私はdebuggable true文はありません内容を正確に把握したいと思います:AndroidStudio:「デバッグ可能」とは何ですか?

// build.gradle 
android 
    {   
    buildTypes 
     { 
     debug 
      { debuggable true 
      }  
     } 
    } 

I 午前、それはエミュレータ(genymotion)を使用せずにデバッグすることが:ブレークポイントが動作します。 Log.d(...)ステートメントはAndroidモニターに出力されます。

debuggableフラグがの中にあるので、セクションのdebugセクションは、とにかく冗長であるようです。 buildTypesセクションの外側にあるべきではありません。debugビルドタイプを使用する必要があることをideに示しますか?


またdebugrelease buildtypesの差のいくつかの簡単な素人一般的な背景の理解を得るためにいいだろう。

+0

あなたの投稿に「downvoters please explain」というメッセージを入れないようにしてください。ダウンローダーは、彼らの特権であると説明したり、説明したりしません。サイトに不必要な混乱を加えてしまいます。そのようなメタ情報はあなたの質問や回答には含まれません。 – meagar

+0

私は同意します...それは臆病です...しかし同時に、私が質問を投稿すると、他の有識者はそれを見るのを避ける傾向があります。それは違法な質問です。このシステムの完全性 – dsdsdsdsd

答えて

0

これは、アプリケーションのマニフェストが生成されたときにAndroidのgradleプラグインにdebuggableフラグを含めるようにします。これにより、エミュレータまたはデバイスで実行中にデバッガをアプリケーションに接続することができます。

+0

これは愚かな音だが、これは私のためのさらに多くの質問を作成する(私は、javascript/Webアプリケーションの背景から来る)... ...何を "アプリケーションに接続する" ...何を意味 "デバッガ"(明白な定義以外の)..."アプリケーションマニフェスト "とは何ですか...なぜ生成する必要がありますか? (誰がそれを使用するのですか?)... – dsdsdsdsd

+0

@dsdsdsdsこれはすべて、これらのタイプのGoogle検索のaway.questionです。このフォームのトピックです。あなたは基本的にチュートリアルを探しています。 – AndroidMechanic

+0

このサイトの他のほとんどの質問よりも、あなたが「AndroidMechanic」であり、明らかにこのサイトを使用していれば、私のような将来のアンドロイド初心者が理解を求めて、Googleを使用してここに着陸すると、あなたの知恵は貴重なものになるような、それらに... – dsdsdsdsd

3

Androidでは、デバッガはJDWPを使用して仮想マシンと通信します。デバッグが有効な場合、VMはJDWPトラフィックをリスンして要求に応答する専用のスレッドを作成します。 (gdbなどのネイティブデバッガを使用することもできますが、それは魚の別のケトルです)

消費者に販売されているデバイスでは、通常、余分なスレッドを実行する必要はありません。デバッグ可能。また、マルウェアはデバッガインタフェースを使用して実行中のアプリを調べたり操作したりする可能性があるため、無効にすることが最も安全です。一方、エミュレータ上で動作するものはすべてデバッグ可能でなければならないので、デフォルト動作は異なります。 ro.debuggableシステムプロパティによってこれが決まります(adb shell getprop ro.debuggable)。

アプリマニフェストのdebuggableフラグは、アプリが開発中であることをVMに通知し、アプリが本番端末で実行されているかどうかに関係なく、デバッガからの接続を許可する必要があります。

上記のすべては、ビルドではなく、アプリケーションのランタイム動作に関連しています。デバッグビルドはリリースビルドとも異なります。 -gフラグをjavacに渡すと、追加の情報が出力され、.dexファイルに追加のデバッグ情報を取り除くか保持するオプションがdxになります。 (私は、どのようにgradleフラグがこれらと相互作用しているのかわかりません)

+0

ありがとう..これは参考になりました...しかし、私がまだ 'debuggable'フラグが何をしているのかはっきりしていないので、私を許してください...' Run'や ' 「デバッグ」ボタン(アンドロイドスタジオ)、またはエミュレータ(genymotion)を使用しているのか、実際のアンドロイド携帯電話を使用しているのかを示します。 ブレークポイントもLog.d(...)も影響を受けていないようです... – dsdsdsdsd

+0

アプリケーションが 'debuggable'をfalseに設定してビルドされると、マニフェストはVMがデバッガの動作をリッスンしないように指示します。したがって、実稼働(非開発者)デバイスでデバッガを実行しているときに、デバッガをアプリケーションに接続できないようにすべきです。ルートデバイスは 'ro.debuggable'を変更する可能性があるので、答えに表示されているadbシェルコマンドで設定を確認することができます。ビルド設定のどれも 'Log.d'に影響を与えません。ログメッセージを無効にしたい場合は、それを自分で行う必要があります。 ( 'log.d'へのチェックを加えることはうまくいかず、引数の設定をスキップしません。) – fadden

関連する問題