Suche senden
Hochladen
Eclipseを使ったandroid nativeデバッグ
•
3 gefällt mir
•
2,925 views
L
l_b__
Folgen
http://source.android.com/source/using-eclipse.html を見るべきですが、未だ要望があるようなのでアップロード。
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 61
Jetzt herunterladen
Downloaden Sie, um offline zu lesen
Empfohlen
ABS2015 のセッション紹介
ABS2015 のセッション紹介
l_b__
Androidの新ビルドシステム
Androidの新ビルドシステム
l_b__
Yapf2013
Yapf2013
l_b__
Fuchsia概略その1
Fuchsia概略その1
l_b__
JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)
l_b__
PF開発に使えるAOSPのツール達
PF開発に使えるAOSPのツール達
l_b__
Android,Brillo,ChromeOS
Android,Brillo,ChromeOS
l_b__
Androidのリカバリシステム (Androidのシステムアップデート)
Androidのリカバリシステム (Androidのシステムアップデート)
l_b__
Empfohlen
ABS2015 のセッション紹介
ABS2015 のセッション紹介
l_b__
Androidの新ビルドシステム
Androidの新ビルドシステム
l_b__
Yapf2013
Yapf2013
l_b__
Fuchsia概略その1
Fuchsia概略その1
l_b__
JellyBeanのソースをとりあえず眺めてみた(手抜き)
JellyBeanのソースをとりあえず眺めてみた(手抜き)
l_b__
PF開発に使えるAOSPのツール達
PF開発に使えるAOSPのツール達
l_b__
Android,Brillo,ChromeOS
Android,Brillo,ChromeOS
l_b__
Androidのリカバリシステム (Androidのシステムアップデート)
Androidのリカバリシステム (Androidのシステムアップデート)
l_b__
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
Makoto Yamazaki
僕がAndroid開発する時にちょっと便利だと思うtips
僕がAndroid開発する時にちょっと便利だと思うtips
Masataka Kono
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
Yu Nobuoka
Choreonoid+ros
Choreonoid+ros
独立行政法人 産業技術総合研究所
go.mobile で Android 開発
go.mobile で Android 開発
Hiroshi Kurokawa
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
akio19937
ネットワークの切り替えを感知する方法
ネットワークの切り替えを感知する方法
Keisuke Yamaguchi
PHP開発からAndroid開発をするようになって学んだWebとモバイルの違い
PHP開発からAndroid開発をするようになって学んだWebとモバイルの違い
Masataka Kono
Gazebo/ROSで力覚センサプラグインを使う
Gazebo/ROSで力覚センサプラグインを使う
HDeanK
Remote Development with Visual Studio Code & A clean dev env, working every ...
Remote Development with Visual Studio Code & A clean dev env, working every ...
Hiroyuki Ohnaka
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
Kengo Suzuki
Go MobileでAndroidアプリ開発
Go MobileでAndroidアプリ開発
Takuya Ueda
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
Naruto TAKAHASHI
Androidリリース作業の効率化(2)
Androidリリース作業の効率化(2)
Kenichi Kambara
Jenkins導入ライブ
Jenkins導入ライブ
Hiasyoshi Suehiro
お気に入り拡張機能
お気に入り拡張機能
SatsukiYabu
GoによるiOSアプリの開発
GoによるiOSアプリの開発
Takuya Ueda
View Customize Pluginで出来ること
View Customize Pluginで出来ること
onozaty
JUCEハンズオン@Ableton and Max Community Japan #009
JUCEハンズオン@Ableton and Max Community Japan #009
Tatsuya Shiozawa
絶対落ちないアプリの作り方
絶対落ちないアプリの作り方
Fumihiko Shiroyama
Jenkins study 7 2013-01-28
Jenkins study 7 2013-01-28
Ato ARAKI
Docker for Windows & Web Apps for Containers 実践活用技法
Docker for Windows & Web Apps for Containers 実践活用技法
Microsoft Corporation
Weitere ähnliche Inhalte
Was ist angesagt?
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
Makoto Yamazaki
僕がAndroid開発する時にちょっと便利だと思うtips
僕がAndroid開発する時にちょっと便利だと思うtips
Masataka Kono
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
Yu Nobuoka
Choreonoid+ros
Choreonoid+ros
独立行政法人 産業技術総合研究所
go.mobile で Android 開発
go.mobile で Android 開発
Hiroshi Kurokawa
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
akio19937
ネットワークの切り替えを感知する方法
ネットワークの切り替えを感知する方法
Keisuke Yamaguchi
PHP開発からAndroid開発をするようになって学んだWebとモバイルの違い
PHP開発からAndroid開発をするようになって学んだWebとモバイルの違い
Masataka Kono
Gazebo/ROSで力覚センサプラグインを使う
Gazebo/ROSで力覚センサプラグインを使う
HDeanK
Remote Development with Visual Studio Code & A clean dev env, working every ...
Remote Development with Visual Studio Code & A clean dev env, working every ...
Hiroyuki Ohnaka
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
Kengo Suzuki
Go MobileでAndroidアプリ開発
Go MobileでAndroidアプリ開発
Takuya Ueda
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
Naruto TAKAHASHI
Androidリリース作業の効率化(2)
Androidリリース作業の効率化(2)
Kenichi Kambara
Jenkins導入ライブ
Jenkins導入ライブ
Hiasyoshi Suehiro
お気に入り拡張機能
お気に入り拡張機能
SatsukiYabu
GoによるiOSアプリの開発
GoによるiOSアプリの開発
Takuya Ueda
View Customize Pluginで出来ること
View Customize Pluginで出来ること
onozaty
JUCEハンズオン@Ableton and Max Community Japan #009
JUCEハンズオン@Ableton and Max Community Japan #009
Tatsuya Shiozawa
絶対落ちないアプリの作り方
絶対落ちないアプリの作り方
Fumihiko Shiroyama
Was ist angesagt?
(20)
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
20150425 DroidKaigi つかえるGradleプロジェクトの作り方
僕がAndroid開発する時にちょっと便利だと思うtips
僕がAndroid開発する時にちょっと便利だと思うtips
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
5 年続く 「はてなブックマーク」 アプリを継続開発する技術
Choreonoid+ros
Choreonoid+ros
go.mobile で Android 開発
go.mobile で Android 開発
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
第1回ROS勉強会発表資料 ROS+Gazeboではじめるロボットシミュレーション
ネットワークの切り替えを感知する方法
ネットワークの切り替えを感知する方法
PHP開発からAndroid開発をするようになって学んだWebとモバイルの違い
PHP開発からAndroid開発をするようになって学んだWebとモバイルの違い
Gazebo/ROSで力覚センサプラグインを使う
Gazebo/ROSで力覚センサプラグインを使う
Remote Development with Visual Studio Code & A clean dev env, working every ...
Remote Development with Visual Studio Code & A clean dev env, working every ...
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
Androidのセキュア開発について考えてみた(明日、敗訴しないためのセキュアコーディング.ver2)
Go MobileでAndroidアプリ開発
Go MobileでAndroidアプリ開発
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
Androidリリース作業の効率化(2)
Androidリリース作業の効率化(2)
Jenkins導入ライブ
Jenkins導入ライブ
お気に入り拡張機能
お気に入り拡張機能
GoによるiOSアプリの開発
GoによるiOSアプリの開発
View Customize Pluginで出来ること
View Customize Pluginで出来ること
JUCEハンズオン@Ableton and Max Community Japan #009
JUCEハンズオン@Ableton and Max Community Japan #009
絶対落ちないアプリの作り方
絶対落ちないアプリの作り方
Ähnlich wie Eclipseを使ったandroid nativeデバッグ
Jenkins study 7 2013-01-28
Jenkins study 7 2013-01-28
Ato ARAKI
Docker for Windows & Web Apps for Containers 実践活用技法
Docker for Windows & Web Apps for Containers 実践活用技法
Microsoft Corporation
Cordovaコトハジメ( Html5fun×senchUG )
Cordovaコトハジメ( Html5fun×senchUG )
Masayuki Abe
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
Daisuke Hiraoka
Pre react native0504
Pre react native0504
卓馬 三浦
今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman
tomo_masakura
サーバーだけじゃない!Linux デスクトップを使い倒そう その3 ― 今話題の Kotlin から Ruby、C++ 1x…の開発環境を整える
サーバーだけじゃない!Linux デスクトップを使い倒そう その3 ― 今話題の Kotlin から Ruby、C++ 1x…の開発環境を整える
Fuminobu Takeyama
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
Takako Miyagawa
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
Hideharu MATSUFUJI
Android studio で行ってみよう!!
Android studio で行ってみよう!!
Kazuaki Ueda
Linux daemonとsupervisordの美味しい関係
Linux daemonとsupervisordの美味しい関係
Kazushige TAKEUCHI
Tizen 2.0 alpha でサポートされなかった native api
Tizen 2.0 alpha でサポートされなかった native api
Naruto TAKAHASHI
Andoird版OpenCVのJavaサンプルを動かす
Andoird版OpenCVのJavaサンプルを動かす
shobomaru
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
Yu Nobuoka
Android Dev Tools Knowledge
Android Dev Tools Knowledge
Shinobu Okano
Ide env
Ide env
Shuichi Jinushi
Driverについて
Driverについて
幸雄 村上
Google I/O 2011 HowToADK
Google I/O 2011 HowToADK
Masahiro Hidaka
Android Studio First Step Guide
Android Studio First Step Guide
Masahiro Hidaka
第8回 HoloLens 参考書 読書会
第8回 HoloLens 参考書 読書会
Masashi Eguchi
Ähnlich wie Eclipseを使ったandroid nativeデバッグ
(20)
Jenkins study 7 2013-01-28
Jenkins study 7 2013-01-28
Docker for Windows & Web Apps for Containers 実践活用技法
Docker for Windows & Web Apps for Containers 実践活用技法
Cordovaコトハジメ( Html5fun×senchUG )
Cordovaコトハジメ( Html5fun×senchUG )
Appsody でnodejsのアプリを立ち上げよう!
Appsody でnodejsのアプリを立ち上げよう!
Pre react native0504
Pre react native0504
今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman
サーバーだけじゃない!Linux デスクトップを使い倒そう その3 ― 今話題の Kotlin から Ruby、C++ 1x…の開発環境を整える
サーバーだけじゃない!Linux デスクトップを使い倒そう その3 ― 今話題の Kotlin から Ruby、C++ 1x…の開発環境を整える
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
まっつんチャレンジ OSC出張編 45分でわかる PHP+Eclipseによるテスト駆動開発環境の構築
Android studio で行ってみよう!!
Android studio で行ってみよう!!
Linux daemonとsupervisordの美味しい関係
Linux daemonとsupervisordの美味しい関係
Tizen 2.0 alpha でサポートされなかった native api
Tizen 2.0 alpha でサポートされなかった native api
Andoird版OpenCVのJavaサンプルを動かす
Andoird版OpenCVのJavaサンプルを動かす
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
Android Dev Tools Knowledge
Android Dev Tools Knowledge
Ide env
Ide env
Driverについて
Driverについて
Google I/O 2011 HowToADK
Google I/O 2011 HowToADK
Android Studio First Step Guide
Android Studio First Step Guide
第8回 HoloLens 参考書 読書会
第8回 HoloLens 参考書 読書会
Mehr von l_b__
Binderのはじめの一歩とAndroid
Binderのはじめの一歩とAndroid
l_b__
Binderのはじめの一歩
Binderのはじめの一歩
l_b__
Open binder
Open binder
l_b__
Android デバッグ小ネタ
Android デバッグ小ネタ
l_b__
Intentの概要
Intentの概要
l_b__
Stagefright入門
Stagefright入門
l_b__
Stagefright入門
Stagefright入門
l_b__
Mehr von l_b__
(7)
Binderのはじめの一歩とAndroid
Binderのはじめの一歩とAndroid
Binderのはじめの一歩
Binderのはじめの一歩
Open binder
Open binder
Android デバッグ小ネタ
Android デバッグ小ネタ
Intentの概要
Intentの概要
Stagefright入門
Stagefright入門
Stagefright入門
Stagefright入門
Kürzlich hochgeladen
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
Yuki Kikuchi
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NTT DATA Technology & Innovation
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
FumieNakayama
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
Hiroshi Tomioka
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
UEHARA, Tetsutaro
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
sugiuralab
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
FumieNakayama
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
akihisamiyanaga1
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
博三 太田
Kürzlich hochgeladen
(9)
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
Eclipseを使ったandroid nativeデバッグ
1.
Eclipseを使ってAndroid Nativeデバッグしてみる とちょっとおまけ 2010/08/29 @l_b__ 日本Androidの会横浜支部 PF部第1回勉強会
2.
目次 1. Androidのデバッグの仕組み 2. EclipseにAndroidのソースを読み込ませる まずは全部 3.
EclipseにAndroidのアプリだけのNativeソースを読み込ませる 4. EclipseでNativeアプリをデバッグしてみる 5. EclipseでAndroidJavaフレームワークをデバッグしてみる
3.
最初にごめんなさい 今回Windows使っていないです。 環境はUbuntuLinux10.04(Lucid Lynx)で試しています。 Android NDK使っていないです。 (というかNDK使ったことありません) Androidのソースを落として来てください。 (http://source.android.com/source/download.html 参照) 仕組み的にはNDKでも大差無いのではと思います。 Eclipseは3.5(Galileo)、JavaはSun
JDK 1.5です。 Ubuntu10.04へのJava1.5のインストールは http://blog.sola- dolphin-1.net/archives/2613458.html を参照してください。
4.
1.Androidのデバッグの仕組み
5.
AndroidのNativeデバッグ ● ターゲット上のGDBServerとホスト上のGDBをTCPで接続 ● ホスト上のGDBはARM向けクロスターゲットデバッガ。PCに入っている x86向けではないことに注意。 Target
Android Device process Host PC GDBServer Target Application ADBGDB Eclipse クロスターゲット向け のデバッガ
6.
AndroidのNativeライブラリデバッグ ● ライブラリをデバッグする場合は別プロセスでGDBServerを立ち 上げて、ターゲットのプロセスにアタッチ。 Target Android
Device process Host PC Target Library ADBGDB Eclipse クロスターゲット向け のデバッガ process GDB Server
7.
AndroidのJavaデバッグ ● DalvikのJDWP(Java Debug
Wire Protocol)を使ってTCP経由でリ モートデバッグ。 ● 詳細はソースの/dalvik/docs/debugger.html,debugmon.html参照。 Target Android Device process Host PC DalvikVM Target Android Application ADBJDB Eclipse
8.
2.EclipseにAndroidのソースを 読み込ませる まずは全部
9.
まずEclipseの準備 ● Eclipse3.5(Galileo)をeclipse.orgから取得してください。 ○ubuntu標準の奴は使いません。 ● Eclipseを起動、Install
New SoftwareでGalileoのサイトを選 び、CDT(Eclipse C/C++ Development Tools)をインストールし てください。 ● 同じくInstall New Software→Mobile and Device DevelopmentにあるEclipse C/C++ DSF Debugger Integration,Memory View Enhancements,Remote Launchを 入れとくといいかもしれません。(すみません、こいつらが何か詳細 わかってません) ● 他にもSubclipseなりEGitなりFindBugsなりお好きなプラグインを どうぞ。
10.
Androidのソース落とす ● 落とし方はhttp://source.android.com/source/download. htmlなりhttp://blog.sola-dolphin-1.net/archives/2613458. htmlなり見て下さい。 ● 今回はFroyo(Android2.2)のブランチ、ソース は$HOME/android/myfroyo
にあるものとします。 ○もちろんソースを置く場所はご自由に。以降をご自分の環境に 置き換えて読んでください。
11.
Eclipseの初期設定 ● デフォルトの設定だとヒープ容量が足りないので、以下をEclipse インストールディレクトリにあるeclipse.iniに追加します。 -Xms=128m -Xmx512m -XX:MaxPermSize=256m ● 上はAndroid公式の推奨値。PCにメモリを十分積んでいるなら もっと大きくてもよいかも。
12.
Eclipseに読み込ませる ● Eclipseを起動。File→New→C++Projectで新しくC++のプロジェ クトを作成します。
13.
Eclipseのプロジェクトに読み込ませる ● すでにMakefileがあるので、Makefile projectのEmpty Projectを選択。Use
default locationのチェックを外し、 Androidのソース位置をLocationに設定。
14.
Eclipseのプロジェクトに読み込ませる ● Finishを押してしばし待ちます。C/C++ファイルのインデックスの 生成にそれなりに時間がかかります。 ● バックグラウンドタスクも完了し、無事読み込まれたら Project→Properties→C/C++
Buildを選択、Behaviourタブを 選択。 ● Use Parallel Buildをチェックし、Use Parallel Jobsに並列ビル ドするプロセス数を設定。(make の -jオプション。 -j8は速いで す。) ● Build(Incremental build)のallを削除。AndroidのMakefile にはmake allの定義がありません。
15.
Eclipseのプロジェクト設定
16.
Eclipseでプロジェクトをビルド ● ここまで設定するとProject→Build Projectでビルドできます。 ●
ソース全体をビルドするので時間かかります。 ● ProjectのBuild Automaticallyのチェックは外しといたほうがよ いかも。
17.
Eclipseで全ソース読み込んで良いことは 何? ● C/C++のソースインデックスが作成されているので、ソースを読む ときに宣言元や定義元を右クリックで簡単に呼び出せる。 ○ただしC/C++ソースのみ。Javaはダメ。Javaについては後述し ます。 ● Nativeフレームワークをがしがし改造するなら改造して全体ビル ドをEclipse上だけで行える。
18.
しかし... ● とにかくリソース喰い。一部アプリをいじるだけならソース全体読み 込むと余計な時間ばかりかかります。 ● 特にVMwareなどの仮想環境上で作業していたり、ノートPCで作 業したりするときはつらいです。
19.
3.EclipseにAndroidのアプリ だけのNativeソースを 読み込ませる
20.
Nativeアプリの作成 ● 例としてHelloWorldをAndroidのログに出力する実行形式のア プリを作成します。 ● アプリの配置位置として/external/helloworldディレクトリを作 成します。 ○フレームワークに手を入れるのではないので、本来は/device/ (ベンダー)/(機種)のような個別向けのディレクトリに配置すべ きかも。 ○ただ、/externalの下に置くと、mm(ビルドコマンド。後述しま す。)呼んで簡単にビルドできるので。/device以下に置いた時 にどうビルドするかは調べていません。知っていたら教えてくだ さい。
21.
Nativeアプリの配置例 ● HelloWorldアプリはこんな 感じで配置。 ● build/build.sh ○
Eclipse向けのビルドスクリプト 実 行権限を付加しておくこと ● libhelloworld ○ ログ書き込み処理を行うstaticラ イブラリ ● main ○ アプリのメイン関数 ● Android.mk ○ 各ディレクトリのビルドスクリプト
22.
Eclipseのビルド設定 ● Nativeアプリをビルドするbuild.shを読み込ませる設定は Project→Propertiesから以下のようにBuild commandを設定。
23.
Eclipseのパス設定 ● ソースを全部読み込ませた場合と違い、フレームワークのインク ルードファイルを自動でインデックス化してくれない。 ● なので、フレームワークのインクルードディレクトリを Project→Propertiesで次ページのように設定するとインクルード ファイルの依存関係をEclipseが解決してくれるようになる。 ●
ただし、ビルド時の依存解決は手動で書くAndroid.mkに必要な インクルードディレクトリを定義することに注意。Eclipseはビルドの 依存関係は解決してくれません。
24.
Eclipseのパス設定
25.
Eclipseのパス設定 ● パス設定を行う際は下記のチェックを入れておくとC/C++を一度に 設定出来て便利。
26.
HelloWorldアプリ ● 今回のアプリは以下の通り ● /Android.mk include
$(all-subdir-makefiles) ● /main/main_helloworld.c #include <helloworld.h> int main(int argc, char** argv) { writeLog(); return 0; }
27.
HelloWorldアプリ ● /main/Android.mk LOCAL_PATH:= $(call
my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES:= main_helloworld.c LOCAL_STATIC_LIBRARIES += libhelloworld LOCAL_SHARED_LIBRARIES:= libcutils LOCAL_C_INCLUDES:= $(LOCAL_PATH)/../libhelloworld LOCAL_MODULE:= helloworld include $(BUILD_EXECUTABLE)
28.
HelloWorldアプリ ● /libhelloworld/helloworld.c #define LOG_TAG
"HELLOWORLD" #include <helloworld.h> #include <cutils/log.h> void writeLog() { int i = 0; for(;i < 5; i++) { LOGD("Hello Android World. :%d", i); } }
29.
HelloWorldアプリ ● /libhelloworld/helloworld.h #ifndef HELLOWORLD_H_ #define
HELLOWORLD_H_ void writeLog(); #endif /* HELLOWORLD_H_ */
30.
HelloWorldアプリ ● /libhelloworld/Android.mk LOCAL_PATH:= $(call
my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES:= helloworld.c LOCAL_SHARED_LIBRARIES:= libcutils LOCAL_MODULE:= libhelloworld include $(BUILD_STATIC_LIBRARY)
31.
HelloWorldアプリ ● /build/build.sh #!/bin/bash source ~/android/myfroyo/build/envsetup.sh cd
~/android/myfroyo/external/helloworld mm
32.
envsetup.shの便利なコマンド ● Androidの/build/envsetup.shには色々便利なコマンドがありま す。これらのコマンドを使うには $source
build/envsetup.sh を 実行します。 ○envsetup.shは実行権限が無いので、sourceコマンドで読み 込ませます。 ● croot ソースツリーのトップに移動 ● cgrep ソースツリーのC/C++ファイルからgrep ● jgrep ソースツリーのJavaファイルからgrep ● resgrep ソースツリーのres/*.xmlからgrep ● godir 指定した名前のファイルを含むディレクトリに移動 ● m ソース全体のビルド ● mm 現在のディレクトリ以下をビルド(そのディレクトリにAndroid.mkが必要) ● mmm 現在のディレクトリから相対パスで指定したディレクトリ以下をビルド ● choosecombo ビルドターゲット用の環境変数を設定する(lunchの方が便利そう)
33.
アプリのビルド ● EclipseでProject→Build Projectとやるとビルドされます。 (build/build.shを呼んでいるだけです) ●
ビルドされたアプリはデバッグシンボル付きが out/target/product/generic/symbols/system/binに、デ バッグシンボル無しが out/target/product/generic/system/bin に配置されます。
34.
Nativeのビルド出力 ● Nativeアプリ/ライブラリは一般的に以下の手順でビルドされま す。 ● out/target/product/generic/objの下でオブジェクトファイル がコンパイルされる。アプリはEXECUTABLES、ライブラリは静的 がSTATIC_LIBRARIES、動的がSHARED_LIBRARIES以下 にそれぞれのディレクトリが生成されます。 ○helloworldの場合、 out/target/product/generic/obj/EXECUTABLES/
helloworld_intermediates
35.
Nativeのビルド出力 ● それぞれのディレクトリのLINKEDディレクトリにデバッグシンボル 付きバイナリがリンクされます。 ● stripコマンドでデバッグシンボルが取り除かれたバイナリが各 ディレクトリに配置されます。 ○helloworldの場合、デバッグシンボル付きバイナリは out/target/product/generic/obj/EXECUTABLES/
helloworld_intermediates/LINKED に、 デバッグシンボル無しは out/target/product/generic/obj/EXECUTABLES/ helloworld_intermediates に出来ます。
36.
Nativeのビルド出力 ● 最終的にinstallコマンドによって、各バイナリは out/target/product/generic/ 以下のディレクトリに配置され ます。 ○デバッグシンボル付きアプリはsymbols/system/bin ○デバッグシンボル無しアプリはsystem/bin ○デバッグシンボル付き動的ライブラリはsymbols/system/lib ○デバッグシンボル無し動的ライブラリはsystem/lib
37.
HelloWorldの実行結果 ● デバイスやエミュレータを起動し、adbで接続できることを確認しま す。 ● helloworldのバイナリをadbでデバイスに転送します。 ○adb
push helloworld /data/local/tmp ● adbでデバイスにログインし、アプリを実行します。 ○adb shell chmod +x /data/local/tmp/helloworld ○adb shell /data/local/tmp/helloworld ● logcatでログにHelloWorldの結果が出力されているのを確認し ます。
38.
HelloWorldの実行結果 ● adb logcatした結果 D/HELLOWORLD(
366): Hello Android World. :0 D/HELLOWORLD( 366): Hello Android World. :1 D/HELLOWORLD( 366): Hello Android World. :2 D/HELLOWORLD( 366): Hello Android World. :3 D/HELLOWORLD( 366): Hello Android World. :4
39.
4.EclipseでNativeアプリを デバッグしてみる
40.
ようやく本題 ● 大雑把なデバッグの手順は以下の通りです。 ○デバイス/エミュレータにシンボル付きバイナリとgdbserverを 転送します。 ○デバイス上でgdbserverを起動。 ○adbでgdbserverのポートをフォワード。 ○Eclipseのデバッグ構成を設定。 ○EclipseのC/C++アプリリモートデバッグでadbがフォワードした ポートに接続してデバッグ。
41.
ファイルのデバイスへの転送 ● まずはgdbserverを転送します。 ○adb push
prebuilt/android-arm/gdbserver/gdbserver /data/local/tmp ○adb shell chmod +x /data/local/tmp/gdbserver ● 次にデバッグシンボル付き実行ファイルを転送します。 ○adb push out/target/product/generic/symbols/system/bin /helloworld /data/local/tmp ○adb shell chmod +x /data/local/tmp/helloworld
42.
GDBServerの起動 ● GDBServerをadb経由で起動します。 ○adb shell
/data/local/tmp/gdbserver :5039 /data/local/tmp/helloworld ● これでデバイスのポート5039でgdbserverが起動し、接続待ち 状態になります。
43.
GDBServerのポートをフォワード ● ADBを使ってホストのポートをGDBServerの待ち受けポートに転 送します。 ○adb forward
tcp:5039 tcp:5039 ● ホストのTCPポート5039への接続がデバイスのTCPポート5039 に転送されます。 ● ファイルの転送からポートのフォワードまではスクリプト化しておく と楽でしょう。
44.
Eclipseのデバッグ構成 ● Eclipseのデバッグの構成を開き、C/C++ Applicationに新しい構 成を作成します。 ○ C/C++
Remote Applicationでは無いので注意。 ● MainタブのC/C++ Applicationにデバッグシンボル付きバイナリ の位置を設定します。
45.
Eclipseのデバッグ構成 Debuggerタブ ● デバッグ構成のDebuggerタブでDebuggerにgdbserver Debuggerを選択、Stop
on start at mainにチェックします。 ● MainタブのGDB debuggerにクロスターゲットデバッガを設定し ます。
46.
Eclipseのデバッグ構成 Debuggerタブ ● SharedLibrariesタブにデバッグシンボル付き動的ライブラリの ディレクトリを設定します。
47.
Eclipseのデバッグ構成 Debuggerタブ ● ConnectionタブでTypeをTCP、Port
Numberを5039に設定し ます。
48.
Eclipseのデバッグ構成 Sourceタブ ● Sourceタブは特に修正していません。デフォルトで以下のように 設定されます。
49.
デバッグの実行 ● デバッグを実行するとmain関数で止まった状態でデバッグパース ペクティブが開きます。
50.
再度ごめんなさい JNI使ったAndroidアプリのNativeライブラリ側デバッグについても 書こうと思っていましたが、力尽きました。 機会があったらまたということで。
51.
5.EclipseでAndroid Javaフレームワークを デバッグしてみる
52.
おまけですが... ● EclipseにAndroidのソースを読み込ませて、Javaフレームワーク をデバッグすることができます。 ● DDMSにプロセス毎のDalvik
JDWP待ち受けポートが表示され るので、Javaリモートアプリケーションのデバッグ機能を使って接 続します。
53.
Eclipseプロジェクトへの読み込み ● Eclipseを起動。File→New→JavaProjectで新しくJavaのプロ ジェクトを作成します。 ● その後、Nextを押してしばらく 待ちます。
54.
プロジェクトを読み込むときの注意 ● 同一のディレクトリを複数のプロジェクトで共有することはできませ ん。 ○外部のソースをインポートしてプロジェクトを作成した場合、. projectファイルがディレクトリに作成されるため、一つのディレ クトリは一つのプロジェクトとしか結びつかない。 ● シンボリックリンクを使ってみたが、どうも深いディレクトリにある POLICY系のファイルを読んでくれずに、makeするとビルドエラー が発生。 ●
しょうがないので、C向けとJava向けにFroyoのディレクトリを別に 作りました... いい対処方法あったら教えてください。
55.
Eclipseプロジェクトへの読み込み ● プロジェクトの作成でしばらく待つと、ソースを自動でインポートし てくれます。(Linux版のみ。Windows版の場合は自分でソース ディレクトリを設定する必要があります。)
56.
DDMSでデバッグしたいプロセスの選択 ● DDMSを開き、DevicesのViewでデバッグしたいプロセスを確認 します。右側にJDWPのポート番号が表示されます。 ● launcherをデバッグするので、ポート8603か8700を選びます。 ○8603はVM毎にユニークなポート番号、8700はDDMSで選択 されたVMに割り当てられるポート番号?
57.
DDMSでデバッグしたいプロセスの選択
58.
Javaのデバッグ構成 ● Eclipseのデバッグの構成を開き、Remote Java
Applicationに 新しい構成を作成します。 ● 接続先のポートに8603か8700を指定し、デバッグを実行しま す。
59.
デバッグの実行 ● デバッグパースペクティブでデバッグ情報が表示されます。 ● なぜかソースとステップ実行中の行が連動しませんが、変数や行 番号情報は表示され、ステップ実行も可能です。ブレークポイント もきちんと設定されます。 (ソースディレクトリとして登録されたの が多すぎか?)
60.
デバッグの実行
61.
最後に ご質問があったら日本Androidの会横浜支部のGoogle Groups (http://groups.google.com/group/android-jp-yokohama)まで どうぞ。
Jetzt herunterladen