May 31, 2012

はじめてのHelloWorldアプリ

はじめてアプリを作る時は、File --> New --> Other --> Android Projectとします。
ダイアログがでるので、最低限Project名とPackage名を入力すれば、HelloWorldアプリが新規に作成されます。

ここでは、Project名は「SampleApp」、Package名は「jp.myapp.sample」としています。命名規則ですが、Android的な通例はProject名は先頭大文字、続きは小文字、2つ以上の単語をつなげるときは、アンダースコア(_)など間にいれない、Package名はすべて小文字、ドット(.)で2つ以上の単語が必須、といった感じです。このあたりは公式サンプルアプリやAPIの名前などを眺めて真似するのが良いと思います。

そのまま実行すれば下記のようなアプリが起動します。


作成されたProjectの中身をみるといろいろなファイルやフォルダが作成されていますが、まず見る必要のあるものは、

  • srcフォルダにあるJavaソースコード
  • res/drawable-xxxフォルダにあるアイコン画像ファイル
  • res/layoutフォルダにあるレイアウトxmlファイル(main.xml)
  • res/valuesフォルダにある文字列xmlファイル(strings.xml)
  • AndroidManifest.xmlファイル
です。

ソースコードはAndroidのActivityクラスを継承したSampleAppActivityクラスが1つ作成され、そのActivityクラスのonCreate()メソッドをoverrideして、setContentView()メソッドでlayoutフォルダにあるmain.xmlで定義された画面のレイアウトファイルを読み込んで画面表示しているだけです。

package jp.myapp.sample;

import android.app.Activity;
import android.os.Bundle;

public class SampleAppActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

main.xmlファイルをみるとLinearLayoutというレイアウトで、TextViewというView画面を配置し、strings.xmlで定義された文字列「hello」をテキスト表示するよう指示しています。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />
</LinearLayout>

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="hello">Hello World, SampleAppActivity!</string>
    <string name="app_name">SampleApp</string>

</resources>

AndroidManifest.xmlはアプリに1つだけあるファイルで、アプリの設定が記述されています。中身はアイコン画像やアプリ名、最初に起動するActivityクラスなどが指定されています。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="jp.myapp.sample"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="15" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".SampleAppActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

May 30, 2012

EclipseでAndroidソースコード検索

ソースコード内にあるテキストを検索する方法として、FindとFile Searchの2種類あります。

Findは現在選択しているファイル内部で順番に検索します。インクリメンタルサーチや正規表現を使うこともできます。範囲もファイル全体、指定した行のみ、と選択できます。先に検索したいテキストを選択してから実行すれば、そのテキストが初期値として入力された状態になり、いちいち手入力する手間が省けます。ショートカット(Mac)は「command + F」です。


File Searchは指定した範囲のファイルから一括検索して結果を表示します。一括検索というところが、Findと大きく違うところです。一括なのでインクリメンタルサーチはありませんが、正規表現を使うことができます。ファイルの指定範囲は4種類あります。

  • Workspace:ワークスペースにあるすべてのファイル
  • Selected resources:選択したファイル(複数指定可)
  • Enclosing projects:プロジェクトにあるすべてのファイル
  • Working set:指定した複数のプロジェクトにあるすべてのファイル

検索結果をダブルクリックすれば、そのコードが表示されます。


File SearchはSearchタブからFileを選択してダイアログ上で検索するテキストを入力して実行する方法と、先に検索したいテキストを選択してからSearchタブからTextで検索したい範囲を選択してダイレクトに実行する方法の2種類あります。お好みで使い分けられます。前者のショートカット(Mac)は「control + H」です。

Find、File Searchともに検索だけでなく、置換することも可能です。

EclipseでAndroidソースコード補完

Androidのソースコードを入力するのにコード補完を促す便利なショートカットの紹介です。

「control + space」コード補完

実行すると、下記のように補完可能な候補がリストアップされます。超便利コマンド。




注意:Macでこのショートカットを行ったとき、Spotlightが起動したら、それはSpotlightのショートカットと衝突しています。そのときは、システム環境設定からキーボードを選択し、キーボードショートカットのSpotlightをOFFにします。


BloggerへのAndroidソースコード貼付け方法


BloggerでAndroidのソースコード(主にJava、xml)を奇麗に貼付ける方法です。

SyntaxHighlighterというフリーで公開されているJavaScriptを使うことで、下記のように奇麗に表示できます。

public class ApiDemos extends ListActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        Intent intent = getIntent();
        String path = intent.getStringExtra("com.example.android.apis.Path");
        
        if (path == null) {
            path = "";
        }

        setListAdapter(new SimpleAdapter(this, getData(path),
                android.R.layout.simple_list_item_1, new String[] { "title" },
                new int[] { android.R.id.text1 }));
        getListView().setTextFilterEnabled(true);
    }

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/accessibility_service_instructions"
        />

    <ImageButton android:id="@+id/button"
        android:background="@drawable/ic_launcher_settings"
        android:layout_width="32dip"
        android:layout_height="32dip"
        android:layout_marginTop="50dip"
        android:layout_gravity="center"
        android:scaleType="fitCenter"
        android:adjustViewBounds="true" />
</LinearLayout>

まず最初にBloggerへ設定が必要です。
BloggerのTemplateからEdit HTMLを選択し、確認画面がでるので、Proceedを選択します。


編集画面がでたら</head>を探します。その</head>の直前に下記のコードを挿入します。

<link href='http://alexgorbatchev.com/pub/sh/current/styles/shCore.css' rel='stylesheet' type='text/css'/>
<link href='http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJava.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js' type='text/javascript'></script>
<script language="javascript" type="text/javascript">
 SyntaxHighlighter.config.bloggerMode = true;
 SyntaxHighlighter.all();
</script>

保存して編集を終了します。以上で設定は完了です。

あとは下記の手順で自分の投稿(post)にソースコードを貼付けることができます。
ソースコードを貼付けたい時は、ComposeでなくHTMLに入力モードを切り替えて、

<pre class="brush:java;">
貼付けたいAndroidソースコード(Java)
</pre>

または、

<pre class="brush:xml;">
貼付けたいxml(layout.xmlなど)
</pre>

とpreの間にソースコードを貼付けた記述を挿入します。

ただし!貼付けるソースコードは<>などのHTML的特殊記号がエスケープされている(&lt;のように)必要があります。なので、コードをそのままコピペすることはできません!
そこで、コピペしたコードをHTMLエスケープされたコードに変換してからコピペする必要があります。下記のサイトで簡単に一発変換できます。

WEBサイト・ブログの為のHTMLソースコード変換

これで奇麗なソースコードが表示されます。他にもいろいろ変換してくれるサイトがありますので、気に入ったところを探してみてください。

その他の修飾機能として、タイトルや開始行、特定の行の強調表示なども行えます。
タイトルの指定は、
<pre class="brush:xml;" title="タイトル">
とします。
開始行はfirst-line、行の強調はhighlightを使います。複数行の指定も可能で、カンマ(,)で複数記述できます。
<pre class="brush:xml; first-line:10; highlight:[10,15]">

package jp.myapp.sample;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class SubAppActivity extends Activity {
 private final static String TAB = "SubAppActivity";
    @Override
    public void onCreate(Bundle savedInstanceState) {
     Log.i(TAB, "onCreate");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sub);
    }


おまけ:BloggerへのSyntax Highlighterの設定ですが、下記のサイトで自動生成することができます。Syntax Highlighterは多数の言語に対応していますので、他の言語も使いたい時はこちらのサイトを利用すると簡単です。

Way2Blogging:HOW TO ADD SYNTAX HIGHLIGHTER(V3) TO BLOGGER BLOGS

Syntax Highlighterそのものの使い方は下記の公式サイトを参照。

Syntax Highlighter公式サイト

May 26, 2012

公式サンプルソースのビルドと実行

Androidでは公式サンプルソースコードをたくさんリリースしており、とても参考になります。ここでは、そのソースコードの取得方法からビルド、実行までの解説です。

ソースコードはAndroid SDK Managerからインストールできます。Android SDKの一部として公式リリースされていますので、"Samples for SDK"をインストールします。

次にFileタブからNew -> Other -> Android Projectを選択します。Create project from existing sampleを選択してnextボタンを押すと、さきほどインストールしたサンプルソースコードの一覧がでてきますので、好きなサンプルを選びます。あとは通常どおりビルドして実行することができます。

一番基本的なサンプルコードは"ApiDemos"だと思いますので、まずはこちらをビルドしていろいろ試してみるのが良いと思います。

エミュレータ環境(AVD)の作り方

エミュレータ環境(AVD=Android Virtual Device)の作り方です。
デフォルト(インストールした直後)では存在しないので、エミュレータでアプリを動作させたい場合は環境を作る必要があります。

作り方です。

eclipseを起動して、WindowタブからAVD Managerを起動します。Newボタンを押して新規作成します。名称、画面サイズ、API levelなどなど好みのデバイスに設定してCreateボタンを押せば作成完了です。


デバイスはいくつでも作成できますので、対象となるエミュレータデバイスを好きなだけ作ることができます。

Android開発環境のインストール(Mac編)


#2012年11月更新


Android開発環境のインストール方法(Mac編)です。
公式サイト(Android Developers)に英語でインストール方法の記載がありますが、日本語で簡潔に解説します。

基本的にやるべきことは、eclipseという統合開発ソフトのインストール、その開発ソフトにADT Pluginをインストールして、eclipseからAndroidを開発できる環境(SDK)をインストールすることです。そうすると、eclipse上でAndroidのソフトを開発(コードの記述からデバッグまで)できるようになります。実機がなくてもエミュレータで動作させることもできます。

インストール方法は2通りあります。

1つは新しく用意された方法で、Eclipse環境まで含めたADT Bundleパッケージをインストールする方法です。Androidの開発環境がすべて組み込まれたパッケージ(Eclipse + ADT Plugin + SDK)のため、ただダウンロードしてインストールするだけでいきなりAndroidの開発環境が整います。これから新規に環境を作成する人で、すでに使っているEclipseにAndroid環境をいれたいという人でない限りは、この方法をお勧めします。

インストール方法は、ここからダウンロードしてアプリケーションフォルダに丸ごと放り込んであとは起動するだけです。ショートカットも自動で追加されます。



もう1つは従来のEclipseをダウンロードして手動でAndroid対応のためのADT Pluginをインストールする方法です。具体的なインストール方法は下記の通り。

1) eclipse classic(開発ソフト)の最新版(現時点でversion 3.7.2)を下記からダウンロードします。32bit版と64bit版がありますので、MacのCPUにあわせて適切なほうを選択します。


tar.gzで圧縮されているので、ダブルクリックで解凍します。インストールは解凍したフォルダを丸ごとアプリケーションフォルダに移動するだけで完了です。初めて起動したときはワークスペース(自分で開発したソースコードなどがおかれる場所)のフォルダを問い合わせてくるので、適当に好きな場所でOKです。

eclipseは日本語化することも可能ですが、Android公式環境が英語ですので、下手に日本語化して名称がかわるよりもそのまま使う方がオススメです。

2) eclipseを起動し、そこからADT Pluginをインストールします。HelpタブからInstall New Softwareを選択します。ダイアログがでるので、Addボタンを押します。名前とURLの入力欄がありますので、名前に"ADT Plugin"、URLに"https://dl-ssl.google.com/android/eclipse/"を指定します。その後、どんどんnextボタンをクリックして最後にFinishボタンを押せば完了です。eclipseが再起動します。

3) Android SDKのインストール。SDKは新しいPlatformがリリースされるたびに増えていきますので、たくさんあります。通常は最新版だけインストールしておけばよいと思います。
eclipseを起動し、WindowタブからAndroid SDK Managerを選択します。ToolsとAndroidのversionどれか1つを選択してインストールを実行します。


続いて、adbなどのコマンドラインツールをシェル(bash)から使えるように環境変数(パス)を設定します。ツールは、SDKをインストールした場所にあります。

  • sdk/platform-tools
  • sdk/tools

上記2つのパスを追加します。".bash_profile"に書きように設定します。


以上で完了です。