JavaソースコードなしのAndroidアプリのデバッグ

についての記事は何ですか



この記事では、「水」を使わずに、JavaソースコードがなくてもAndroidアプリケーションをデバッグする方法を簡単に説明します。 この記事は初心者向けではありません。 これは主に、 Smali構文を多少理解し、Androidのエンジニアリングアプリケーションを逆にした経験がある人に役立ちます。



ツール



Apk-tool 1.4.1およびNetBeans 6.8が必要です 。 はい、はい、これらは古代のバージョンです! 新しいバージョンでは、残念ながらデバッグは開始されません。これは、さまざまな議論で既に繰り返し言及されています(たとえば、 ここここを参照 )。



詳細にインストールを停止しません。 NetBeansはデフォルトでインストールされます。インストールを開始して、[次へ]、[次へ]、[次へ]の順にクリックします。 Apk-toolsのインストールは、 apktool.jar



ファイルを通常のフォルダーに展開することで構成されます。



また、途中でDDMSが必要になります-これはAndroid SDKに含まれています。



デバッグ



このセクションでは、手順を追って説明します。 Windows用に作成されましたが、おそらくLinuxおよびMac OSで動作します。 ブログにはこのマニュアルの英語のドラフトもありますが、ルールがあるためリンクは提供しません。 この命令は、Apkツールwikiからの元の命令を多かれ少なかれ繰り返しますが、デバッグが開始されない追加のポイントが含まれています。 かつてそれは私からは始まりませんでしたが、グーグルの強化と「科学的な突く」方法によってこれらの追加ポイントを見つけました。 今、私の経験が誰かの時間を節約することを願っています



指示に正確に従ってください-これは重要です!



  1. Apkツールを使用out



    て.apkファイルをout



    ディレクトリにデコードします。 これを行うには、 -d



    オプションを使用します。

     java -jar apktool.jar d -d my.app.apk out
          
          





    その結果、 out/smali



    ディレクトリには、Smaliがコメントアウトしたコードを含む多数の.javaファイルがあります。 これは正常な動作です。

  2. android:debuggable="true"



    属性をout/AndroidManifest.xml



    ファイルの<application>



    セクションに追加します

  3. out



    ディレクトリをビルドして.apkファイルに戻します。

     java -jar apktool.jar b -d out my.app.to.debug.apk
          
          





  4. ファイルmy.app.to.debug.apk



    して、デバッグする実際のデバイスまたはエミュレーターにインストールします。
  5. out/build



    ディレクトリを削除します(手順6および7でプロジェクトの作成を妨げる場合があります)。

  6. NetBeansを起動し、「ファイル」->「新規プロジェクト」をクリックします。 [Java]-> [既存のソースを含むJavaプロジェクト]を選択します。 「次へ」をクリックします。
  7. 「プロジェクトフォルダー」としてout



    を指定out



    ます。 「次へ」をクリックします。
  8. ソースパッケージフォルダリストにout/smali



    を追加します。 「次へ」をクリックしてから「完了」をクリックします。 その結果、Smaliコードがコメントアウトされた同じ.javaファイルがプロジェクトに追加されます。
  9. 実際のデバイスまたはエミュレーターでmy.app.to.debug.apk



    を実行します(実際のデバイスを使用している場合は、USBケーブルを使用してコンピューターに接続されていることを確認し、システムがそれを認識します)。

  10. DDMSを起動し、リストでアプリケーションを見つけてクリックします。 最後の列の情報を思い出してください。これはポート番号で、通常は86xx/8700



    ようなものです。

  11. Netbeansで、[デバッグ]-> [デバッガーの接続]-> [JPDA]を選択し、[ポート]フィールドに8700



    と入力します(または前のステップで使用したポート番号)。 残りのフィールドは変更しないでください。 [OK]をクリックします。
  12. これで、アプリケーションをデバッグできます。Netbeansパネルで、適切なボタンをクリックできます
  13. 関心のある命令にブレークポイントをインストールします(はい、既に2回言及した同じ.javaファイル内のコメント化されたSmaliコードからの命令の1つに)。 「。」、「:」または「#」で始まる行にブレークポイントを設定できないことに注意してください。 スマリコードの指示のみ!
  14. アプリケーションでブレークポイントが機能するようにします。 その後、段階的なデバッグを実行したり、フィールドや変数の値を表示したりできます。


つまり、すべてです。



落とし穴



もちろん、キャッチなしの方法はありません。 通常はすべて、手順に従って厳密に手順13までのすべてが順調に進みます。ただし、手順13では、アプリケーションコードの最初にブレークポイントを配置することがよくあります。たとえば、アプリケーションを開始するアクティビティのonCreate(...)



メソッドなどです。 論理的なようです-アプリケーションのデバッグを開始する場所が明確でない場合は、最初から開始することをお勧めします。 しかし、ほとんどの場合、物事は行きません。 デバッグされたアプリケーションは、何も起こらなかったかのようにそれ自体で機能し、 onCreate(...)



卑劣なブレークポイントはまったく機能しません。



これは、すでに実行中のアプリケーションにデバッガーを接続しているという事実によるものです。 これは、アプリケーションの開始時(たとえば、アプリケーションが開始するアクティビティの同じonCreateメソッド内)のコードがすでに実行されており、その上にブレークポイントを設定することは(もちろんですが)役に立たないことを意味します。 さらに、実行中のアプリケーションにデバッガーをアタッチすると、ブレークポイントが発生するまで、または自分で停止するまで停止しません。これも覚えておく価値があります。



次回の記事では、最初からソースコードなしでAndroid用のJavaアプリケーションをデバッグできるトリックを紹介します。 アプリケーションが起動するアクティビティの最初のonCreate(...)



メソッド(またはコンストラクター)から。



質問がある場合は、コメントまたはプライベートメッセージで質問してください。 私はできるだけ早く答えようとします、しかし、私が愚かであるならば-辛抱してください。 私は皆に答えようとします。



ハッピーデバッグ!



All Articles