eclipse で Unable to resolve target 'android-17' エラー

久しぶりにeclipseを起動したら「Unable to resolve target ‘android-17’」というエラーが出た。
Unable_to_resolve_target-01

ちなみに以下、環境はWindows 7 PRO 64BIT、the Eclipse ADT Bundle のバージョンは「adt-bundle-windows-x86_64-20140702」だ。

早速検索すると、要は該当するAPIがインストールされてないということのようだ。
自分で作ったプロジェクトならターゲットは意識しているからAPIが用意してあるか確認するわけだが、人様のプロジェクトを拝借するときはこういうことが起こるというわけだと理解した。
いずれにしても「SDK Manager.exe」を起動する。
起動しない。
一瞬DOS窓が開くが、表示を見る間も無く閉じる。
また検索すると、java.exeの呼び方がおかしくなってるからとのこと。
気になって調べてみたら、このシステムにはjava.exeが5つもある。
Unable_to_resolve_target-02
こんなに必要なのか、それとも本来は1つでいいのかすら分からないが、要は、呼ぶべきjava.exeと違うjava.exeが呼ばれてしまって「SDK Manager.exe」が起動しないんだそうだ。
この場合は、
adt-bundle-windows-x86_64-20140702¥sdk¥tools¥android.bat
を起動すればいいらしい。
すると、やっと「Android SDK Manager」が起動して、確かに件のAPIはまだインストールされていなかったことが確認できる。
Unable_to_resolve_target-03
チェックを入れてインストールする。




PIC+Bluetoothドングル+Nexus 7 Software 2

LEDの明るさを変更するにはAndroid側から「S##」を送信する(##は0~99までの数字)のだが、これもシーク・バーに連動させた方が扱いやすいので変更した。
ついでにボタンも大きめにし、縦と横でレイアウトを変更したりした。
Screenshot_2013-12-23-05-57-22

Screenshot_2013-12-23-05-57-55
レイアウトは
res¥layout¥main.xml
で決定しているが、横のレイアウトはこのファイルを
res¥layout-land¥main.xml
となるようにlayout-landフォルダを作成してコピーし、eclipseのGraphic Layoutで変更するのが手っ取り早かった。
これだけの操作で、Nexus 7を縦に持っても横に持っても自在にレイアウトが切り替わる。
ただし、縦から横、横から縦に画面が切り替わるとBluetoothの接続が切れる。
この対処方法は見つかっていない。
縦か横で固定にする方法もあり、AndroidManifest.xml の activity にscreenOrientationを追加すればいいのだそうだ。
横画面に固定するには
<activity android:screenOrientation="landscape">
縦画面に固定するには
<activity android:screenOrientation="portrait">
と書く。




Androidアプリ開発できるかな 015 サンプルを取り込む

プロジェクトとして提供されていないコード部分だけのサンプルを取り込んで自分でプロジェクトを作成するときに、なるべくトラブルが少なくなるようにするために気をつけた方がいい点の覚書き。
一度はどこかで目にして知ってはいても、そのうちいろんなコードを見つけてきてはお試しするようになるとすっかり忘れている内容だ。
ま、1年半以上放置するから当然のことなのだが。

たとえば以下のようなサンプルを見つけた場合。

Android layout xml file: activity_main.xml
Activity class: MainActivity.java

プロジェクトを作成してからでないとソースのファイルを読み込めないのでまずはプロジェクトを作るが、そのときすでにソースに書かれている設定を参照しながらやらなければいけない。
というか、ド素人には後の対応が難しい。

doroid_app_15-01

まずはソースのこの部分を参照して、
doroid_app_15-02

このように同じにした方がいい。
doroid_app_15-03

この部分は、
doroid_app_15-04

この設定で名前を合わせた方がいい。
ソースのファイル名も「MainActivity.java」となっているし、「activity_name」はソースのファイル名の「activity_name.xml」と合わせてある。
doroid_app_15-05

もちろん、プロジェクトを作ったときに自動で作成されたコードを後で消して、頂いて来たサンプルのコードを貼り付ければ、ファイル名がらみのトラブルは起きない。

それでも、この例ではres¥menu¥main.xmlとソースの記述で問題が起きるたで、多少のコードの修正は必要だった。
doroid_app_15-06

doroid_app_15-07

以上の手順を慎重にやらなかった場合は対処に手間取ることになるが、この例では、上の「activity_main」を「main」に書き換えただけでエラー無く実行できた。




PIC+Bluetoothドングル+Nexus 7 Software

PIC用のプログラムと回路を4LEDに対応させ、Android用のアプリはボタンを増やして、液晶画面をタップすることで4種類の信号を送れるようにそれぞれソースを書き換えてみた。

Bluetooth Chatもいいけれど、やっぱりタップでコントロールできる方がいい。

環境をまとめて書いておこう

PIC回路関連
Bluetooth USBアダプター iBUFFALO BSHSBD04BK
Microchip PIC24FJ64GB002
USBコネクタ(Aタイプ メス)
タクトスイッチ
抵抗 10kΩ
抵抗 150Ω
LED
電解コンデンサ 10μF
ブレッドボードとか配線材とか

PIC Program関連
Microchip PICKit3
MPLAB X IDE v1.95

Androidアプリ関連
Android Developer Tools v22.3.0-887826

Android端末
Nexus 7 (2012) Android 4.3

PC OS環境
Windows 7 Pro 64BIT




Androidアプリ開発できるかな 014 Eclipseのプロジェクト名を変更する

Eclipseのプロジェクトをバックアップするにはどうするのがいいんだろう?
試行錯誤でコードをいじくるのに、ここまでは完成という段階をキープしておいて、まずかったら戻って来れるように、1つ前のプロジェクトをとっておきたい。

どんな方法が一番いいのかわからないので、暫定的な方法の覚書き

フォルダごとコピーして番号をつけて管理するのでプロジェクトの名前を変更する。
すべて、プロジェクト・エクスプローラー上のプロジェクト名を右クリックして、表示されるメニューからの操作だ。

プロジェクトを開いておかないとメニューに必要な項目が出ないので開く。
eclipse-project-ren-01

eclipse-project-ren-02

名前の最後に番号でもつけるのがいいかなと思う。
eclipse-project-ren-03

このとき、「リソース ‘Hogehoge’ はファイルシステムと非同期です。」といわれたら、
eclipse-project-ren-04

戻って「更新」をクリックしてから再度行う。
eclipse-project-ren-05

追記
バックアップの目的なら、プロジェクトをコピーして、貼り付ける時に名前を変更すれば良いようだ。
eclipse_copy_paste

「Androidアプリ開発できるかな 015」へ




PIC+Bluetoothドングル+Nexus 7 トラ技版

インターネットで検索かけていろいろ情報を仕込むわけだが、世間の時系列と逆行して知識が入ってくる場合もある。

いろいろ彷徨ったあげくに、
PIC + USB Bluetooth Adapter Android
という話は、『トランジスタ技術2012年9月号 特集第9章「1Mbpsが数十m飛ぶ! Bluetooth対応のワイアレスPICマイコンI/O基板』という記事が始まりのような気がしてきた。
結局、この記事のライターの原田明憲氏のブログを拝見するのがもっとも時系列に流れを追いやすいのだと今頃気づいたわけだが後の祭りだ。

で、トラ技のやつもやってみることにした。
雑誌はまだ手に入っていないがソースはダウンロードできる。
http://toragi.cqpub.co.jp/tabid/545/Default.aspx
雑誌が無いので回路図も無いわけだが、PIC用のソースを見ると、
mPORTBSetBits(0x8000);
となっているので、RB15を制御していることがわかる。
で、そこへもLEDを追加して、PIC用とAndroid用の両方をビルドして実行すると、問題なく動作した。

何だかこれが一番楽に動いた気がするが、それは今までの放浪の成果。

部屋の隅にPICの回路を置いておき、離れた所でNexus 7の液晶をタップすると、LEDが遠くで点滅する。
なんかうれしい。
いろんなものがワイヤレスでコントロールできるわけだ。




Bluetooth Chat をNexus 7で動かす。

PICで組んだ回路上のUSB Bluetoothアダプタを介して、PICをNexus 7上のAndroidアプリで無線制御するというのをやっている。

とりあえず、いろいろ検索して、人様のやった通りに再現はでき、Nexus 7から文字コードを送ると回路上のLEDが点灯、消灯できるのは確認済みだ。

で、まず、Androidアプリの方から、とりあえずソースから実行可能なアプリを自力でビルドするところまでこぎつけようというのが今回のお題。

Windows 7 Pro 64BIT
Android Developer Tools Build: v22.3.0-887826
Nexus 7 (2012) Android 4.3

Androidの開発環境の構築方法に関しては、Eclipse関連の記事に覚書きしてある。

Bluetooth Chatというサンプルが提供されていて、Sample for SDKの中に入っていることがわかったので、やってみた。

サンプルを読み込んで実行してみよう。
BluetoothChat01-01

BluetoothChat01-02

BluetoothChat01-03

BluetoothChat01-04

エラーが出る。
BluetoothChat01-05
BluetoothChat01-06

エラー・メッセージを頼りに対処法を探すと、
BluetoothChat01-07

以下のように書き換えたり、
BluetoothChat01-08

BluetoothChat01-09

コメント・アウトすればとりあえずは動くようだ。
BluetoothChat01-10

BluetoothChat01-11

BluetoothChat01-12

BluetoothChat01-13

プログラムの中身も、修正の意味も、まったく理解していないが、とりあえず、プログラム・ソースの段階からアプリを作成できる可能性があることだけは確認された。




Androidアプリ開発できるかな 013 タイトルバーを隠す

タイトルバーを隠す。
AndroidManifest.xml内でandroid:themeを以下のようにする。
android:theme=”@android:style/Theme.NoTitleBar”
eclipse013-01

「Androidアプリ開発できるかな 014」へ




Androidアプリ開発できるかな 012 「public 型 ##### はそれ独自のファイル内に定義されなければなりません」

「public 型 ##### はそれ独自のファイル内に定義されなければなりません」

このエラーも、雛形だけ作ってよそからコードをもらってきて貼り付けたときによく起きるエラーだ。

eclipse012-01

対処方法は以下のとおり。
eclipse012-03

つまり、
AlertDialogSample.java
から
AlertDialogSampleActivity.java
に名前を変更すればいいということらしい。

eclipse012-04

ちなみに、直したときにActivity を Avtivity としてしまい、気付いて訂正して実行したら、Eclipseのプロジェクト・エクスプローラー上ではエラーは無かったし、ビルドでもエラーは無かったのに、端末上では「問題が発生したため、########## を終了します。」という表示が出て実行されない。
eclipse012-05
LogCatではこんな感じで赤字が並んでいる。
eclipse012-06
とにかく一番上の行を取り出してみて、書いてある内容で検索してみると、
Please add your Activity in your AndroidManifest.xml.
というのを発見した。
確かに、Activityの名前を変更したりしてておかしくなったんだから、これはちょっと関係あるかも、と思って AndroidManifest.xml をチェックしてみると。
さっき間違えた Avtivity のままになってる。
eclipse012-07
ので、これを修正したら、ちゃんとエラー無く実行された。
いったい、どの部分がどのタイミングで書き換えられるのかがよくわかってない。
試しに同じことをもう一度はじめからやってみて、今度は Activity のスペリングミスをしないでファイル名を書き換えたら、今度は AndroidManifest.xml の方がまったく書き換わってなかった。
ごにょごにょやってるときの操作のどれかがトリガーになって書き換えられているはずだが、ごにょごにょやってる本人が把握してやってないのでそのタイミングは謎のままだ。

本日のEclipse様からのお告げ
「public型 ##### はそれ独自のファイル内に定義されなければなりません」というエラーでは、#####は#####.javaに書いてなければいけないので、ファイル名を#####に変更してシンクロさせる。
それに関連して、プロジェクト・エクスプローラー上ではエラー表示が無いのに、実行したら端末側でエラーになる場合は、AndroidManifest.xml の Activity の記述を確認する。

「Androidアプリ開発できるかな 013」へ






Androidアプリ開発できるかな 011 「##### は解決できないか、フィールドではありません」

「##### は解決できないか、フィールドではありません」
というエラーが頻繁に出る。
プロジェクトの雛形は自分でというかEclipseに作らせて、参考にさせてもらったサイトからコードをコピペしてプロジェクト内で使った場合に多い。
androideclipse011-01
素人考えだが、gen¥hogehoge¥R.java の中の id に SeekBar01 や TextView01 が無きゃいかんのだろうと思うが、下に示すようにどちらも無い。
androideclipse011-02
「確かにこれじゃあエラーだわな」とまではわかるが「で、どうしたらいいの」ってのがわからない。
検索の結果、大前提として、R.java は自動的に作ってくれるものらしいので、これを自分でいじる必要は無いことがわかった。
そして以下のような対処方法が見つかった。

xmlファイルを見直してからプロジェクトをクリーンしなさい。
res¥layout¥main.xml を見て、直して、確認して、大丈夫そうだ。
androideclipse011-03
クリーンする。
androideclipse011-04
androideclipse011-05

見た目上は、変化が無い。
実行してみると、こんな窓が出て
androideclipse011-06
問題なく実行される。
R.java もちゃんと更新されている。
androideclipse011-07

レイアウトとプログラムの内容がちぐはぐになっていると発生するということのようだ。

ちなみに、巷のサンプルではレイアウト用のファイルがmain.xmlとなっている場合が多いのに、何気なくEclipseでプロジェクトを作ると別の名前になってることがあって、その場合も上のエラーが出まくる。
これも、気付くまではここで結構立ち往生していた点だ。
androideclipse011-09
androideclipse011-10
上の例では、main を activity_seek_bar_sample に直すだけでエラーが無くなる。
ゼロからのスタートだと、こんなことで結構長く悩んだりする。

「Androidアプリ開発できるかな 012」へ