2010年5月24日月曜日

[Androidアプリ]XperiaのUSBドライバー

開発用としてXperiaを入手しました。
さっそくapkをインストール・・・と思うと、USBがうまく認識してくれません。
USBマスストレージじゃダメだー。

設定 > アプリケーション > USBデバッグ

を有効にするとさらにUSBドライバを要求されたのですが、どこにドライバが?

答えは「Xperiaの中のmicroSD内」。
ついでにUSBストレージとして有効にする場合も、Xperia側から「マウント」する必要があります。
一般人にはハードル高い(笑)
普通は挿したら認識してくれると思いますもん。

マウント方法は、PCとXperaをUSBケーブルで接続した状態で、Xperiaの画面上端あたりを指で下方向になぞると出てくるメニューから行います。
「USB接続」なる文字の部分を指でタップするとマウントする/しないを聞かれますので、「マウント」を選択すればOK。
これでPCからXperiaの中のmicroSDの中が触れるようです。

USBドライバはマウントして、XperiaのmicroSDの中にある「CDBrowser/Drivers.zip」をPC上にコピー、解凍します。

マイコンピュータ > プロパティ > ハードウェア > デバイスマネージャ

でデバイスマネージャを開いて、「SEMC SO-01B」とかそんな感じの名前で「?」アイコンがついているところを右クリック。
「ドライバの更新」を選択して、先ほど解凍したDriversフォルダを指定しましょう。

私の場合はマウント方法でつまづきました。
参考になれば幸いです。

2010年5月21日金曜日

[Androidアプリ]xmlファイル書き換えるとEclipseでエラー(追記)

「[Androidアプリ]xmlファイル書き換えるとEclipseでエラー」
で書いた内容が発生した原因らしきものを書き忘れていました。

Eclipseの「プロジェクト」>「クリーン」を実行した直後からです。

Eclipse、使い慣れてないからかこんな変なエラーばっかりで時間を食われてしまう・・・。

[Androidアプリ]今度はNullPointerException

xmlファイルの部分で少し時間を食ったものの、無事サンプルコードが動いて一安心。

したのもつかの間。
その後、ソースコードを直して動きを確認しようと「実行」を押すとエラーが。

ダイアログには
「Java.lang.NullPointerException:"xxx起動"中に内部エラーが発生しました。」
というようなメッセージが表示されている。

何がNull?
エミュレータは起動してあるし・・・。

さっきリファクタリングした時に
------------------------------------------------------------------------------------------------
org.eclipse.core.internal.resources.ResourceException: リソース '/xxx が存在しません。
at org.eclipse.core.internal.resources.Resource.checkExists(Resource.java:319)
at org.eclipse.core.internal.resources.Resource.checkAccessible(Resource.java:196)
at org.eclipse.core.internal.resources.Project.checkAccessible(Project.java:113)
at org.eclipse.core.internal.resources.Project.hasNature(Project.java:489)
at com.android.ide.eclipse.adt.internal.project.FolderDecorator.decorate(Unknown Source)
at org.eclipse.ui.internal.decorators.LightweightDecoratorDefinition.decorate(LightweightDecoratorDefinition.java:263)
at org.eclipse.ui.internal.decorators.LightweightDecoratorManager$LightweightRunnable.run(LightweightDecoratorManager.java:81)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.ui.internal.decorators.LightweightDecoratorManager.decorate(LightweightDecoratorManager.java:365)
at org.eclipse.ui.internal.decorators.LightweightDecoratorManager.getDecorations(LightweightDecoratorManager.java:347)
at org.eclipse.ui.internal.decorators.DecorationScheduler$1.ensureResultCached(DecorationScheduler.java:371)
at org.eclipse.ui.internal.decorators.DecorationScheduler$1.run(DecorationScheduler.java:331)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
------------------------------------------------------------------------------------------------
というエラーが多発していたけど、このリソースのことかな?

比較のために新規プロジェクトを作成して、足りない部分を探してみる。
しかし、名前が違う以外は足りないものは無さそうだ。

エラーログには、
------------------------------------------------------------------------------------------------
java.lang.NullPointerException
at com.android.sdklib.AddOnTarget.isCompatibleBaseFor(AddOnTarget.java:230)
at com.android.sdkuilib.internal.widgets.AvdSelector$TargetBasedFilter.accept(AvdSelector.java:170)
at com.android.sdkuilib.internal.widgets.AvdSelector.fillTable(AvdSelector.java:727)
at com.android.sdkuilib.internal.widgets.AvdSelector.refresh(AvdSelector.java:432)
at com.android.ide.eclipse.adt.internal.launch.EmulatorConfigTab.updateAvdList(Unknown Source)
at com.android.ide.eclipse.adt.internal.launch.EmulatorConfigTab.initializeFrom(Unknown Source)
at org.eclipse.debug.ui.AbstractLaunchConfigurationTab.activated(AbstractLaunchConfigurationTab.java:354)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.handleTabSelected(LaunchConfigurationTabGroupViewer.java:1323)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer$6.widgetSelected(LaunchConfigurationTabGroupViewer.java:434)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:228)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1027)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1012)
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:770)
at org.eclipse.swt.custom.CTabFolder.setSelection(CTabFolder.java:3256)
at org.eclipse.swt.custom.CTabFolder.onMouse(CTabFolder.java:2045)
at org.eclipse.swt.custom.CTabFolder$1.handleEvent(CTabFolder.java:323)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
------------------------------------------------------------------------------------------------
と、
------------------------------------------------------------------------------------------------
java.lang.NullPointerException
at com.android.sdklib.AddOnTarget.isCompatibleBaseFor(AddOnTarget.java:230)
at com.android.sdkuilib.internal.widgets.AvdSelector$TargetBasedFilter.accept(AvdSelector.java:170)
at com.android.sdkuilib.internal.widgets.AvdSelector.fillTable(AvdSelector.java:727)
at com.android.sdkuilib.internal.widgets.AvdSelector.refresh(AvdSelector.java:432)
at com.android.ide.eclipse.adt.internal.launch.EmulatorConfigTab.updateAvdList(Unknown Source)
at com.android.ide.eclipse.adt.internal.launch.EmulatorConfigTab.initializeFrom(Unknown Source)
at org.eclipse.debug.ui.AbstractLaunchConfigurationTabGroup.initializeFrom(AbstractLaunchConfigurationTabGroup.java:86)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupWrapper.initializeFrom(LaunchConfigurationTabGroupWrapper.java:194)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.displayInstanceTabs(LaunchConfigurationTabGroupViewer.java:804)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer$8.run(LaunchConfigurationTabGroupViewer.java:680)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.inputChanged(LaunchConfigurationTabGroupViewer.java:697)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.setInput0(LaunchConfigurationTabGroupViewer.java:659)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationTabGroupViewer.setInput(LaunchConfigurationTabGroupViewer.java:635)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog.handleLaunchConfigurationSelectionChanged(LaunchConfigurationsDialog.java:916)
at org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationsDialog$3.selectionChanged(LaunchConfigurationsDialog.java:544)
at org.eclipse.jface.viewers.StructuredViewer$3.run(StructuredViewer.java:864)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.core.runtime.Platform.run(Platform.java:888)
------------------------------------------------------------------------------------------------
の2つのメッセージが出ているがエミュレータへのランチャのところだろうか。

「実行構成」を開いてみるといきなりダイアログが表示されて、またもやNullPointerException。
実行構成から参照している部分が何か無いようだ。

結局、原因ははっきりとわからなかったが、メインのActivityを指定すると都度NullPointerExceptionを告げるダイアログが表示されたことから、このActivityが無い(?)か参照先がおかしくなっている模様。
解決方法を探ってみたがこんなことでハマってる人はいないようで、これという解決方法が見つからなかったので以下の力業で実行できるようにした。無理やり。

(1)プロジェクト一式を退避させる。
(2)新規プロジェクトを作成する。(前のプロジェクトと違う名前にする)
(3)ソース&リソース、設定ファイル等を全部新規プロジェクトに移し変える。
(4)必要な部分を修正。

こうしてNullPointerExceptionが発生して、動作確認が出来ない事態は避けられた。
だが、解決方法がはっきりしていない以上、発生する度にこんなことするのは時間の無駄だしどうしたものか。

[Androidアプリ]xmlファイル書き換えるとEclipseでエラー

Androidアプリで画面遷移時のスライドアニメーションをやってみようと

「throw Life:ActivityのOpenとCloseをアニメーションさせる」
http://www.adamrocker.com/blog/289/activity_open_close_animation.html

を参考にxmlファイルをいじっていたところ、実行時にエラーが。

-------------------------------------------------------------------------------------------------
17:51:04,593 FATAL [main] Main - No embedded stylesheet instruction for file: file:/C:/work/eclipse/workspace/TestXperiaApp/res/values/styles.xml
org.eclipse.wst.xsl.jaxp.debug.invoker.TransformationException: No embedded stylesheet instruction for file: file:/C:/work/eclipse/workspace/TestXperiaApp/res/values/styles.xml
at org.eclipse.wst.xsl.jaxp.debug.invoker.internal.JAXPSAXProcessorInvoker.transform(JAXPSAXProcessorInvoker.java:225)
at org.eclipse.wst.xsl.jaxp.debug.invoker.internal.JAXPSAXProcessorInvoker.transform(JAXPSAXProcessorInvoker.java:186)
at org.eclipse.wst.xsl.jaxp.debug.invoker.internal.Main.main(Main.java:73)
Caused by: org.eclipse.wst.xsl.jaxp.debug.invoker.TransformationException: No embedded stylesheet instruction for file: file:/C:/work/eclipse/workspace/TestXperiaApp/res/values/styles.xml
at org.eclipse.wst.xsl.jaxp.debug.invoker.internal.JAXPSAXProcessorInvoker.transform(JAXPSAXProcessorInvoker.java:214)
... 2 more
-------------------------------------------------------------------------------------------------

「styles.out.xml」なるファイルが真っ白で残っていました。
困ったことに何度やっても同じエラー。
「styles.out.xml」を削除しても出てしまいます。

悩んだ末にリファクタリングでプロジェクト名を変更して、また戻したらエラーが出なくなりました。
原因はどこにあったのだろう・・・。


開発環境:Eclipse 3.5.1 + Xperia X10スキン

2010年5月20日木曜日

Androidアプリ開発 覚え書き[5/20]

Androidの開発環境は以前に構築していましたが、訳あって急に触ることになりました。

Xperia X10のスキンを入れて、いざAndroidプロジェクトを作成!
そして、実行!

[2010-05-20 17:34:51 - TestXperiaApp]Error in an XML file: aborting build.
[2010-05-20 17:34:51 - TestXperiaApp]res\layout\main.xml:0: ERROR Resource entry main is already defined.
[2010-05-20 17:34:51 - TestXperiaApp]res\layout\main.out.xml:0: Originally defined here.
[2010-05-20 17:34:51 - TestXperiaApp]C:\work\eclipse\workspace\TestXperiaApp\res\layout\main.out.xml:1: ERROR Error parsing XML: no element found

・・・何かエラー出た。
xmlの記述が悪いのかと色々触ってみるも効果なし。

悩んだ末にXperiaのエミュレータを起動してから「実行」をしてみたら動きました。
えー。
そういうことー。

自分にがっかり(笑)

それにしても、Xperiaエミュレータの起動が遅いのは私だけでは無いみたいですね。
起動まで5分近くかかるとか、最初フリーズしてると思いましたもん。
皆様もお気をつけあれ。