yahoo_map.png

2011年2月7日、「Yahoo!地図 SDK for Android」が公開されました。

 

Yahoo!地図 SDK for Android

 

概要

  • 「Yahoo!地図 SDK for Android」を使用することにより、「Yahoo!地図」と同じ地図データを利用できる
  • Android 2.1 以降で動作する
  • 有償で販売、またはアプリ内で課金してはいけない ※詳細は「Yahoo! JAPAN - サービス利用規約」(特に第5章)参照
  • アプリの配布時およびアプリ内において、「クレジット表示」が必要
  • 「Yahoo!デベロッパーネットワーク」の「アプリケーションID」が必要
  • 「Yahoo!地図 SDK for Android」には、Javaライブラリー(ymap.jar)と画像リソース(res)が格納されている
  • 「Yahoo!地図 SDK for Android ドキュメント」には、大変わかり易いHTMLが格納されている

 

サンプルソースコード 

package com.adakoda.android.yahoomapsample;

import jp.co.yahoo.android.maps.GeoPoint;
import jp.co.yahoo.android.maps.MapActivity;
import jp.co.yahoo.android.maps.MapController;
import jp.co.yahoo.android.maps.MapView;
import android.os.Bundle;

// 3. 「Yahoo!地図」を表示したいアクティビティを(jp.co.yahoo.android.maps.)MapActivity を継承して作成する
public class YahooMapSampleActivity extends MapActivity {
    private static final String APP_ID = "取得したアプリIDに書き変えてください!";
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 5. MapView を(アプリケーションID渡しで)生成し、
        // getMapController() で取得した MapController で、表示位置などの設定をする
        MapView mapView = new MapView(this, APP_ID);
        MapController c = mapView.getMapController();
        c.setCenter(new GeoPoint(35632385, 139881695)); // 初期表示の地図を指定
        c.setZoom(3); // 初期表示の縮尺を指定
        mapView.setMapType(mapView.MapTypeSatellite); // 航空写真表示(オプショナル)
        // 6. MapActivity に MapView を設定し、表示させる
        setContentView(mapView);
    }
    // 4. MapActivity.isRouteDisplayed をオーバーライドする
    @Override
    protected boolean isRouteDisplayed() {
        return false;
    }
}

1. SDK 内の「ymap.jar」を、組み込みたいアプリのプロジェクトに追加し、ライブラリーのパスを通す

2. SDK 内の「res/drawable-hdpi」下のpngファイル(6つ)を、組み込みたいアプリのプロジェクトにコピーする

3. 「Yahoo!地図」を表示したいアクティビティを(jp.co.yahoo.android.maps.)MapActivity を継承して作成する

4. MapActivity.isRouteDisplayed をオーバーライドする

5. MapView を(アプリケーションID渡しで)生成し、getMapController() で取得した MapController で、表示位置などの設定をする

6. MapActivity に MapView を設定し、表示させる

7. AndroidManifest.xml に android.permission.INTERNET を追加する

 

実行結果

TDR.png

Web Services by Yahoo! JAPAN

 

あわせて読みたい

market.png

2011年2月2日(現地時間)、Android Market (Web 版) がリニューアルされました。

 

Android Market web store ・・・Android Market (Web版)

 

今回のリニューアルにより、

PC からアクセスした Android Market (Web 版)から

スマートフォンやタブレットなどの Android 端末に Push(OTA)インストールができるようになりました。

 

 

早速、「(=x=)ヒャッハー」 を PC からインストールしてみました。

 

1. 右上の検索ボックスから 「ひゃっはー」 と入力したところ、

ぐぐるさんが 「DID YOU MEAN? ヒャッハー」 というように、あいまい検索結果やフィルタ検索にも対応しています。

market_search.png

 

2. 可愛らしいモグタソアイコンをクリックしてみると、Android 端末版の Android Market のようにアプリケーション情報が表示されます。

内容を確認し、アイコンの横にある 「INSTALL」 ボタンをクリックします。

market_app1.png

 

3. インストール先の Android 端末を選択し、「INSTALL」 をクリックします。

market_install1.png

 

4. すると、自動的に Android 端末側で Android Market からのアプリケーションのダウンロードが開始され、インストールが行われます。

※下図は、まさにクラウドからスマートフォンに、もの凄いスピードで (=X=) が侵略しようとしている決定的瞬間

market_install2.png

 

5. 以上で、インストール完了です。

ちなみに、Android Market サイトの下部にある 「My Market Account」 から、

「ORDERS」 タブで インストール済みのアプリケーションの一覧を閲覧、

「SETTINGS」 タブで 接続先デバイスの一覧の設定をすることもできます。

market_my_orders.png

 

 

これまでは、Web から Android アプリケーションをプロモーションする時には、

Android 端末専用の market プロトコルを使用するか、androlib などのサイトを利用していましたが、

今後は、単純な Web のリンク(http プロトコル)で済むようになったため、

これまで以上に、アプリケーションのプロモーションがし易くなったと思います。

google_cloud_print.png

2011年1月24日(現地時間)、Google Cloud Print (クラウドプリント)の beta 版が公開されました。

早速、Android (Xperia 2.1)から使ってみたところ、Google Docs 上のドキュメントを印刷することができました。

 

公式ブログ

 

利用要件

  • 印刷可能なドキュメントは、Google Docs、GMail のドキュメント
  • 印刷可能なモバイルデバイスは、Android 2.1 以降、iOS 3 以降
  • プリンターに接続可能な PC の OS は、Windows XP / Vista / 7
  • プリンターに接続可能なブラウザーは、Google Chrome 9.0.597.67 beta 以降

 ※上記は本稿の執筆時点のものであり、今後、Mac / Linux などにも対応する予定みたいです

 

事前準備

1. PC とプリンター(要プリンタードライバー)を接続し、オンラインにする。

2. 必要なバージョンの Google Chrome をインストールする。

3. PC から Chrome ブラウザーで「Connect a printer to Google Cloud Print」にアクセスする。

4. Google Chrome のメニュー(閉じるボタン下のスパナアイコン)「オプション」から、「高度な設定」タブを表示し、

 (一番下にある)「Google Cloud Print にログイン」ボタンをクリックし、Google アカウントでログインする。

 

Android 端末から Google Docs 上のドキュメントを印刷する手順

1. Android 端末のブラウザから、Google Docs にアクセスし、印刷したいドキュメントを開く。

2. メニューから「印刷...」をタップする。

3. 印刷に使用するプリンターを選択し、(右下にある)「Print」ボタンをタップする。

step1.png step2.png step3.png

 

動作結果から推測するに、Android 端末側は、あくまでも、Google Docs 上の印刷するドキュメントとプリンターを指定しているだけであって、

印刷データは、PC 上の Chrome ブラウザーがクラウド(Google Docs)からダウンロードし、

ブラウザーのレンダラーを用いて、印刷用のレンダリングを行い、

ブラウザーが動作している PC のプリンタードライバーに対して、印刷をしているだけみたいです。

※つまり、後半は、ブラウザーからクラウド上のデータを印刷したにすぎない

※特筆すべきは、モバイル端末から PC の IP アドレスを指定することなく、Google Cloud Print にログインされている PC に対し、
 印刷するドキュメントとプリンターを指定している点です

※今後、Google Cloud Print に対応したプリンターが登場すると、PC &プリンタードライバーレスで直接印刷できるみたいです

 

あわせて読みたい

Google の URL 短縮 API が(2011年1月10日に)公開されたので、早速、Android から呼び出してみました。

 

公式サイト

 

API 概要

API としては、Labs のステータスですが、短縮 <=> 展開の両方をサポートしています。

短縮は POST、展開は GET メソッドで、どちらもパラメータは、JSON 形式です。

リクエストに API Key を取得・設定しておくと、1日の上限リクエスト回数は、100万回となります。

apikey.png

 

サンプルコード

以下、「http://www.adakoda.com/」を、Google URL 短縮 API を呼び出し、

短縮した結果のURL「http://goo.gl/sGdK」を得るためのサンプルコードです。

 

String apiUri = "https://www.googleapis.com/urlshortener/v1/url";
// 以下の API Key を取得したものに置き換える(省略可)
String apiKey = "";
String postUrl = ""; // POST用URL文字列

// 短縮元URL文字列
String longUrl = "http://www.adakoda.com/";

// パラメーターに日本語を含む場合は下記のようにエスケープしてください
// Uri.Builder tmpUriBuilder = new Uri.Builder();
// tmpUriBuilder.path("http://www.google.co.jp/search");
// tmpUriBuilder.appendQueryParameter("q", Uri.encode("みっくみく"));
// longUrl = Uri.decode(tmpUriBuilder.build().toString());

// POST用URL文字列作成
Uri.Builder uriBuilder = new Uri.Builder();
uriBuilder.path(apiUri);
uriBuilder.appendQueryParameter("key", apiKey); // APIキー推奨
postUrl = Uri.decode(uriBuilder.build().toString());

try {
    // リクエスト作成
    HttpPost httpPost = new HttpPost(postUrl);
    httpPost.setHeader("Content-type", "application/json");
    JSONObject jsonRequest = new JSONObject();
    jsonRequest.put("longUrl", longUrl);
    StringEntity stringEntity = new StringEntity(jsonRequest.toString());
    httpPost.setEntity(stringEntity);
    // リクエスト発行
    DefaultHttpClient defaultHttpClient = new DefaultHttpClient();
    HttpResponse httpResponse = defaultHttpClient.execute(httpPost);
    int statusCode = httpResponse.getStatusLine().getStatusCode();
    if (statusCode == HttpStatus.SC_OK) {
        // 結果の取得
        String entity = EntityUtils.toString(httpResponse.getEntity());
        JSONObject jsonEntity = new JSONObject(entity);
        if (jsonEntity != null) {
            // 短縮URL結果 (このサンプルの場合、「http://goo.gl/sGdK」)
            String shortUrl = jsonEntity.optString("id");
            Log.v("id", shortUrl);
            Toast.makeText(this, shortUrl, Toast.LENGTH_LONG).show();
        }
    }
} catch (IOException e) {
} catch (JSONException e) {
}

 

実行結果

result.png

2009年~2010年末までに国内で発売された Android端末の公式リンク をまとめました(発売日が新しい順)。

 

以下の情報を参照できます。

  • 製品名・型番 (発売日 / キャリア / メーカー)
  • 製品スペック
  • サポート情報(アップデータ)
  • USB ドライバ(※Windowsで必要となるのですが、キャリアのサイトにないため結構見つけにくい・・・)
  • ユーザーズマニュアル

 

IDEOS (発売日2010年12月24日 / b-mobile / Huawei) ※2

※USBドライバはPCと接続してマウントされたCD-ROMにも格納されているそうです ※4

 

Libero SoftBank 003Z (発売日2010年12月24日 / SoftBank / ZTE)

 

SIRIUS α IS06 (発売日:2010年12月23日 / au by KDDI / PANTECH)

 

DELL Streak SoftBank 001DL (発売日2010年12月21日 / SoftBank / DELL)

※公式の USB ドライバ / PC接続系ソフトウェアの情報求む。。。(見つけられませんでしたT_T)
※1: Twitter にて何名かの方に教えていただきました。ありがとうございました。

 

HTC Aria S31HT (発売日2010年12月17日 / イー・モバイル / HTC) ※2

 

GALAPAGOS SoftBank 003SH (発売日2010年12月17日 / SoftBank / SHARP)

 

REGZA Phone T-01C (発売日:2010年12月17日 / NTT docomo / 富士通東芝)

 

LYNX 3D SH-03C (発売日:2010年12月3日 / NTT docomo / SHARP)

 

GALAXY Tab SC-01C (発売日:2010年11月26日 / NTT docomo / SAMSUNG)

 

IS03 (発売日:2010年11月26日 / au by KDDI / SHARP)

 

GALAXY S SC-02B (発売日:2010年10月28日 / NTT docomo / SAMSUNG)

 

HTC Desire HD SoftBank 001HT (発売日:2010年11月12日 / SoftBank / HTC)

 

HTC Desire SoftBank X06HTII (発売日:2010年10月2日 / SoftBank / HTC)

 

LYNX SH-10B (発売日:2010年7月23日 / NTT docomo / SHARP)


IS01 (発売日:2010年6月30日 / au by KDDI / SHARP) ※5

 

HTC Desire SoftBank X06HT (発売日:2010年4月27日 / SoftBank / HTC)

 

Xperia SO-01B (発売日:2010年4月1日 / NTT docomo / Sony Ericsson)

 

HT-03A (発売日:2009年7月10日 / NTT docomo / HTC)

 

※追記1(2011/01/05):Dell 「Drivers & Downloads」リンク追記

※追記2(2011/01/05):HTC Aria(イーモバイル)、IDEOS追記

※追記3(2011/01/05):Vendor ID(VID)、Product ID(PID)を追記

android SDK 標準のUSBドライバの(32bitの場合)[Google.NTx86]セクション、(64bitの場合)[Google.NTamd64]セクションに、
以下の記述を追加しても認識させることができます(XXXXは置換)

%SingleAdbInterface% = USB_Install, USB\VID_XXXX&PID_XXXX
%CompositeAdbInterface% = USB_Install, USB\VID_XXXX&PID_XXXX&MI_01

※追記4(2011/01/05): IDOES USBドライバの情報を追記

※追記5(2011/01/05): IS01追記

※追記6(2011/01/06): Xperia2.1のPID追加

[Android] 2010年未公開記事

| トラックバック(0) |

blog.PNG

いくつかの記事が下書きのままに未公開になってしまいましたので、その一部をトピックのみ報告させていただきます^^;

 

第2回 SHARPハッカソン@東広島に参加しました(2010/12/18-19)

SHARP 工場で開催された「第2回 SHARPハッカソン」に参加させていただきました。

当チームは、SHARP 製端末の歩計計 API を使用し、ダイエット IME である「歩meji」を開発、惜しくも 2 位という結果でしたが、

しかじろうさん、しげむらさん、あかいさん、SHARP の皆様と楽しく開発させていただきました。

交通費・懇親会・宿泊費・景品もろもろすべて準備していただいた SHARP さん、ブリリアントサービスさんに改めまして感謝です。

 

日本 Android の会 金沢支部勉強会に参加しました(2010/10/23, 3/13)

近場の勉強会が少ないということもあって、車で往復8時間かけて金沢まで遠征しました。

きんねこ さんをはじめ、多くの金沢クラスタの方々と楽しい時間を共有させていただきました。ありがとうございました。

 

長野でお蕎麦・温泉(2010/夏)

日本 Android の会の たじてるさん、(セカイカメ○の)わたなべさん、(ミ○のライブ壁紙の)ひょろもさん、○○さんを招き、

大都会の蕎麦と温泉を楽しみました。わざわざ遠方より駆けつけて頂き、ありがとうございました。大変楽しかったです。

 

Android 開発 最新動向レポート2010(2010/5/10)

「Google Android入門 ~携帯電話開発の新技術(技術評論社,2008)」の著者でもある嶋さんより お声をかけて頂き、

日本 Android の会の著名な方と共著で「Android開発 最新動向レポート2010」を執筆させていただきました。

貴重な体験をさせていただき、ありがとうございました。

※2010年とありますが、2010年5月発売(済)で、2010年3月くらいまでの内容となっていますので、ご注意ください

 

モテバッジ(Simeji バッジ2009年冬モデル?)を入手(2010/1/1)

Twitter ドリブン開発(TDD)による wimeji のご褒美?ということで、

Simeji の作者である adamrocker さんから Simeji バッジを頂きました。

(しかも、送料負担でわざわざ自宅宛に送付してくださった。)

ありがとうございました(あれっ、去年の元旦の話だry...)。

 

レビューできなかった雑誌・書籍たち

以前は、こまめにレビュー記事を書いていたのですが、

以下のものは購入したもののレビューが追いつかず、下書きのままになってしまいました^^;

いづれもお勧め良書ですので、書店で見かけたら手にとってみてください。

 

adakoda ブログ

pageview.PNG

サイトの年間のページビュー(2010年のみ)は、約160万PV でした。

しかしながら、書いた記事数は、245(2009年) → 108(2010年)に半減するなど、すっかり更新の頻度が下がってしまいました。

※特に後半は、「Y.A.M の 雑記帳」「Android(アンドロイド)情報-ブリリアントサービス」、他多数の良サイトの勢いに圧倒されてry...

 

2011 年もマイペースで更新しようと思いますので、よろしくお願いいたします^^;

はてな認証(OAuth) API が Hatena Developer Center で公開されていました(2010/12/13)。

 

これにより、「はてなログイン管理」アプリケーションがインストールされていない環境でも、

同APIに対応することで、単独のアプリケーションで「はてな認証」が可能となります。

早速、Android から呼び出してみた感じでは、Twitter などと同様の手順で OAuth を使用することができました。

 

以下、OAuth 認証の部分を独立したアクティビティとして実装しているので、

呼び出し側インテントの値を変更することで、はてな以外のサービスにも利用できます。

oauth-signpost を使用しています

※CONSUMER_KEY、CONSUMER_SECRET、CALLBACK(httpではじめてください)を書き換えてください

hatena_oauth1.png hatena_oauth2.png

hatena_oauth3.png hatena_oauth4.png 

 

サンプルコード

  • 呼び出し側サンプル(OAuthActivity.java 利用例)

private static final int REQUEST_OAUTH = 1;

private static final String REQUEST_TOKEN_ENDPOINT_URL = 
    "https://www.hatena.com/oauth/initiate";
private static final String ACCESS_TOKEN_ENDPOINT_URL = 
    "https://www.hatena.com/oauth/token";
private static final String AUTHORIZATION_WEBSITE_URL = 
    "https://www.hatena.ne.jp/touch/oauth/authorize";
private static final String CONSUMER_KEY = "XXXXXXXXXXXXXXXX";
private static final String CONSUMER_SECRET = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
private static final String CALLBACK = 
    "http://www.adakoda.com/android/hatenaoauthsample/callback";

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Intent intent = new Intent(this, OAuthActivity.class);
    intent.putExtra(OAuthActivity.REQUEST_TOKEN_ENDPOINT_URL, REQUEST_TOKEN_ENDPOINT_URL);
    intent.putExtra(OAuthActivity.ACCESS_TOKEN_ENDPOINT_URL, ACCESS_TOKEN_ENDPOINT_URL);
    intent.putExtra(OAuthActivity.AUTHORIZATION_WEBSITE_URL, AUTHORIZATION_WEBSITE_URL);
    intent.putExtra(OAuthActivity.CONSUMER_KEY, CONSUMER_KEY);
    intent.putExtra(OAuthActivity.CONSUMER_SECRET, CONSUMER_SECRET);
    intent.putExtra(OAuthActivity.CALLBACK, CALLBACK);
    startActivityForResult(intent, REQUEST_OAUTH);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {
    case REQUEST_OAUTH:
        if (resultCode == Activity.RESULT_OK) {
            String token = data.getStringExtra(OAuthActivity.TOKEN);
            String tokenSecret = data.getStringExtra(OAuthActivity.TOKEN_SECRET);
            new AlertDialog.Builder(this)
                .setMessage("[TOKEN]\n" + token + "\n" +
                        "\n[TOKEN SECRET]\n" + tokenSecret)
                .create()
                .show();
        }
        break;
    }
    super.onActivityResult(requestCode, resultCode, data);
}

 

  • AndroidManifest.xml

<activity android:name=".OAuthActivity"
    android:configChanges="orientation|keyboardHidden" />

 

  • 本体コード(OAuthActivity.java)

package com.adakoda.android.hatenaoauthsample;

import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer;
import oauth.signpost.commonshttp.CommonsHttpOAuthProvider;
import oauth.signpost.exception.OAuthCommunicationException;
import oauth.signpost.exception.OAuthExpectationFailedException;
import oauth.signpost.exception.OAuthMessageSignerException;
import oauth.signpost.exception.OAuthNotAuthorizedException;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class OAuthActivity extends Activity {

    public static final String REQUEST_TOKEN_ENDPOINT_URL = "request_token_endpoint_url";
    public static final String ACCESS_TOKEN_ENDPOINT_URL = "access_token_endpoint_url";
    public static final String AUTHORIZATION_WEBSITE_URL = "authorization_website_url";
    public static final String CONSUMER_KEY = "consumer_key";
    public static final String CONSUMER_SECRET = "consumer_secret";
    public static final String CALLBACK = "callback";
    public static final String TOKEN = "token";
    public static final String TOKEN_SECRET = "token_secret";
    private static final String OAUTH_VERIFIER = "oauth_verifier";

    private String mRequestTokenEndpointUrl;
    private String mAccessTokenEndpointUrl;
    private String mAuthorizationWebsiteUrl;
    private String mConsumerKey;
    private String mConsumerSecret;
    private String mCallback;
    private String mOAuthVerifier;
    private CommonsHttpOAuthProvider mOAuthProvider;
    private CommonsHttpOAuthConsumer mOAuthConsumer;

    private WebView mWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_PROGRESS);
        Intent intent = getIntent();
        mRequestTokenEndpointUrl = intent.getStringExtra(REQUEST_TOKEN_ENDPOINT_URL);
        mAccessTokenEndpointUrl = intent.getStringExtra(ACCESS_TOKEN_ENDPOINT_URL);
        mAuthorizationWebsiteUrl = intent.getStringExtra(AUTHORIZATION_WEBSITE_URL);
        mConsumerKey = intent.getStringExtra(CONSUMER_KEY);
        mConsumerSecret = intent.getStringExtra(CONSUMER_SECRET);
        mCallback = intent.getStringExtra(CALLBACK);
        if (((mRequestTokenEndpointUrl != null) && (mRequestTokenEndpointUrl.length() > 0)) && 
             ((mAccessTokenEndpointUrl != null) && (mAccessTokenEndpointUrl.length() > 0)) &&
             ((mAuthorizationWebsiteUrl != null) && (mAuthorizationWebsiteUrl.length() > 0)) &&
             ((mConsumerKey != null) && (mConsumerKey.length() > 0)) &&
             ((mConsumerSecret != null) && (mConsumerSecret.length() > 0)) &&
             ((mCallback != null) && (mCallback.length() > 0))) {
            mWebView = new WebView(this);
            mWebView.clearCache(true);
            mWebView.setWebViewClient(mWebViewClient);
            mWebView.setWebChromeClient(mWebChromeClient);
            WebSettings webSettings = mWebView.getSettings();
            webSettings.setJavaScriptEnabled(true);
            webSettings.setBuiltInZoomControls(true);
            setContentView(mWebView);
            new Thread(mStart).start();
        } else {
            finish();
        }
    }

    private WebViewClient mWebViewClient = new WebViewClient() {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            if ((url != null) && (url.startsWith(mCallback))) {
                mWebView.stopLoading();
                mWebView.setVisibility(View.INVISIBLE);
                if (mOAuthVerifier == null) {
                    Uri uri = Uri.parse(url);
                    mOAuthVerifier = uri.getQueryParameter(OAUTH_VERIFIER);
                    if (mOAuthVerifier != null) {
                        new Thread(mEnd).start();
                    } else {
                        finish();
                    }
                }
            } else {
                super.onPageStarted(view, url, favicon);
            }
        }
    };

    private WebChromeClient mWebChromeClient = new WebChromeClient() {
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            super.onProgressChanged(view, newProgress);
            OAuthActivity.this.setProgress(newProgress * 100);
        }
    };

    private Runnable mStart = new Runnable() {
        @Override
        public void run() {
            mOAuthConsumer = new CommonsHttpOAuthConsumer(mConsumerKey, mConsumerSecret);
            mOAuthProvider = new CommonsHttpOAuthProvider(
                    mRequestTokenEndpointUrl, mAccessTokenEndpointUrl, mAuthorizationWebsiteUrl);
            String url = null;
            try {
                url = mOAuthProvider.retrieveRequestToken(mOAuthConsumer, mCallback);
            } catch (OAuthMessageSignerException e) {
                e.printStackTrace();
            } catch (OAuthNotAuthorizedException e) {
                e.printStackTrace();
            } catch (OAuthExpectationFailedException e) {
                e.printStackTrace();
            } catch (OAuthCommunicationException e) {
                e.printStackTrace();
            }
            if ((url != null) && (url.length() > 0)) {
                mWebView.loadUrl(url);
            } else {
                finish();
            }
        }
    };

    private Runnable mEnd = new Runnable() {
        @Override
        public void run() {
            setResult(RESULT_CANCELED);
            try {
                mOAuthProvider.retrieveAccessToken(mOAuthConsumer, mOAuthVerifier);
                String token = mOAuthConsumer.getToken();
                String tokenSecret = mOAuthConsumer.getTokenSecret();
                Intent intent = new Intent();
                if (((token != null) && (token.length() > 0)) &&
                     ((tokenSecret != null) && (tokenSecret.length() > 0))) {
                    intent.putExtra(OAuthActivity.TOKEN, token);
                    intent.putExtra(OAuthActivity.TOKEN_SECRET, tokenSecret);
                    setResult(RESULT_OK, intent);
                }
            } catch (OAuthMessageSignerException e) {
                e.printStackTrace();
            } catch (OAuthNotAuthorizedException e) {
                e.printStackTrace();
            } catch (OAuthExpectationFailedException e) {
                e.printStackTrace();
            } catch (OAuthCommunicationException e) {
                e.printStackTrace();
            }
            finish();
        }
    };

}

 

あわせてよみたい

ubuntu_android.PNG

Android のソースコードビルド環境を収録した Ubuntu ライブ CD を作成する方法について説明します。

この方法をマスターすると、クリーンな OS をインストール後、いきなり Android のソースコード取得&ビルドできるため、

インストール時にネットワーク環境を用意できない場合や、複数の PC に同じ環境を構築することができるため、大変便利です。

(しかも、OS インストール前のアーカイブイメージのため、持ち運べるほどサイズが小さい。)

 

事前準備

1. 作成したい Ubuntu の iso イメージを入手する

以下のサイトから作成したい Ubuntu のイメージをダウンロードします。

ここでは、「ubuntu-10.10-desktop-amd64.iso」をダウンロードしました。

 

2. ダウンロードした iso イメージをインストールし、Ubuntu を起動する

ここでは、VMware 上にインストール・起動しました。

 

Ubuntu Customization Kit (UCK)のダウンロード

以下のサイトから UCK のインストーラをダウンロードし、インストーラ実行します。

 

Ubuntu Customization Kit (UCK)の起動・カスタマイズイメージ作成

インストール後、UCK を起動するには、[Applications] > [System Tools] > [Ubuntu Customization Kit] をクリックします。

すると、対話式の画面が表示されますので、以下の様に進めてください。

※以下では、[Close] ボタンだけの画面の説明は省略しています

 

1. 「Please choose language packs to install」

インストールする言語パックを選択してください(複数可)。

ここでは、英語(en)、日本語(ja)の2言語をチェックしました。

 

2. 「Please choose languages will be available at boot of live CD」

ブート時に利用できる言語を選択してください(複数可)。

ここでは、英語(en)、日本語(ja)の2言語をチェックしました。

 

3. 「Please choose which language will be selected by default at boot of live CD」

ブート時に使用するデフォルト言語を選択してください。

ここでは、「ja」を選択しました。

 

4. 「Please choose desktop environments which will be present on customized CD」

カスタマイズCDで使用するデスクトップ環境を選択してください。

ここでは、「gnome」を選択しました。

 

5. 「Please choose an ISO image to be used as the basis for your live CD」

カスタマイズのベースとなるライブCDを選択してください。

ここでは、「ubuntu-10.10-desktop-amd64.iso」を選択しました。

 

6. 「Please enter the name for your CD」

カスタマイズしたライブCDの名前を入力してください。

ここでは、「Ubuntu10.10(64bit)」と入力しました。

 

7. 「Do you want to customize the CD manually during building」

カスタマイズCD構築中に手動でパッケージを編集するか選択してください。

ここでは、「yes」を選択しました。

 

8. 「Do you want to delete all windows-related files from the CD?」

Windows に関連するファイルをCDから削除するか選択してください。

ここでは、「no」を選択しました。

 

この後、パッケージの再構築が開始されます(少し時間がかかります)。

 

9. 「Please choose customization action」

パッケージの編集方法を選択してください。

ここでは、「Run console application」を選択しました。

 

ここから、任意のパッケージの追加や削除を行います。

作成したい環境に応じて適宜読み替えてください。

 

9-1. 「ia32-libs」用のリポジトリを追加

「ubuntu-10.10-desktop-amd64.iso」の初期状態では、「ia32-libs」の取得先リポジトリが不足していたのですが、

リポジトリがわからなかったため、起動OSの「/etc/apt/source.list」を開き、

カスタマイズ環境側の「/etc/apt/source.list」に、内容をコピーしました。

※リポジトリが通っている、または明示的に追加すべきリポジトリがわかっていれば、こんなことしなくてもよいです^^;

 

9-2. 「sun-java5-jdk」「sun-java6-jdk」用のリポジトリ追加

# add-apt-repository "deb http://archive.canonical.com/ lucid partner"
# add-apt-repository "deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse"
# add-apt-repository "deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse"

 

9-3. リポジトリの更新

# apt-get update

 

9-4. Android Source ビルドに必要なパッケージの追加

# apt-get install git-core gnupg flex bison gperf build-essential zip curl 
zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev 
ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev

※ブログに掲載する都合上、改行していますが、実際には一行です

 

9-5. 「sun-java5-jdk」「sun-java6-jdk」の追加

# apt-get install sun-java5-jdk
# apt-get install sun-java6-jdk

 

9-6. 「repo」の追加

# cd /usr/local/bin
# curl http://android.git.kernel.org/repo > repo
# chmod a+x repo

ここでは、repo を、パスの通る適当な場所(/usr/local/bin)に配置しました。

 

9-7. その他、必要なパッケージの追加

以上で、Android ソースコードビルドに必要なパッケージが揃いましたが、

emacs(エディタ) など、その他必要と思われるパッケージを追加しておくと便利です。

 

9-8. 「Continute building」を選択して「OK」をクリックし、ビルドの構築を再開させる

 

10. 「Building was successful!」と表示されたら完了

作成したファイルは、「tmp/remaster-new-files/livecd.iso」に作成されます。

 

今回の例では、Windows 関連のファイルや不要なパッケージを削除しなかったため、

カスタマイズしたイメージは CDサイズ(700MB)を超えてしまいましたが、

作成された iso イメージをベースに何度でも再構築できるため、気に入るまで繰り返し作業してみてください。

 

付録

9.1、9.2 で追加した後の(カスタマイズ環境側)「/etc/apt/source.list」の内容は、以下のとおりです。

# deb cdrom:[Ubuntu 10.10 _Maverick Meerkat_ - Release amd64 (20101007)]/ maverick main restricted
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.

deb http://us.archive.ubuntu.com/ubuntu/ maverick main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ maverick main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://us.archive.ubuntu.com/ubuntu/ maverick-updates main restricted
deb-src http://us.archive.ubuntu.com/ubuntu/ maverick-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://us.archive.ubuntu.com/ubuntu/ maverick universe
deb-src http://us.archive.ubuntu.com/ubuntu/ maverick universe
deb http://us.archive.ubuntu.com/ubuntu/ maverick-updates universe
deb-src http://us.archive.ubuntu.com/ubuntu/ maverick-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu 
## team, and may not be under a free licence. Please satisfy yourself as to 
## your rights to use the software. Also, please note that software in 
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://us.archive.ubuntu.com/ubuntu/ maverick multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ maverick multiverse
deb http://us.archive.ubuntu.com/ubuntu/ maverick-updates multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ maverick-updates multiverse

## Uncomment the following two lines to add software from the 'backports'
## repository.
## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
# deb http://us.archive.ubuntu.com/ubuntu/ maverick-backports main restricted universe multiverse
# deb-src http://us.archive.ubuntu.com/ubuntu/ maverick-backports main restricted universe multiverse

## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu maverick partner
# deb-src http://archive.canonical.com/ubuntu maverick partner

## This software is not part of Ubuntu, but is offered by third-party
## developers who want to ship their latest software.
deb http://extras.ubuntu.com/ubuntu maverick main
deb-src http://extras.ubuntu.com/ubuntu maverick main

deb http://security.ubuntu.com/ubuntu maverick-security main restricted
deb-src http://security.ubuntu.com/ubuntu maverick-security main restricted
deb http://security.ubuntu.com/ubuntu maverick-security universe
deb-src http://security.ubuntu.com/ubuntu maverick-security universe
deb http://security.ubuntu.com/ubuntu maverick-security multiverse
deb-src http://security.ubuntu.com/ubuntu maverick-security multiverse
deb http://archive.canonical.com/ lucid partner
deb-src http://archive.canonical.com/ lucid partner
deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse
deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse
deb-src http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse

 

あわせて読みたい


※追記

  • 2010/11/22: 9-6 で chmod が漏れていたのを修正

GALAXY Tab 用のアドオンが公開されていました(Kazzz さんのツイートで気づきました^^)。

このアドオンをインストールすることで、GALAXY Tab 用のエミュレーターを利用することができるため、

GALAXY Tab の特徴である大きな画面サイズ(1024 x 600)やデザインで、アプリケーションの動作を検証することができます。

 

公式解説ページ

 

以下、公式解説ページの日本語語要約です。

 

アドオンインストール手順

1. 「Android SDK and AVD Manager」を起動する。

run_avd.PNG

 

2. 「Available Packages」を選択する。

available_packages.PNG

 

3. 「Add-on Site」をクリック、「http://innovator.samsungmobile.com/android/repository/srepository.xml」を入力し、「OK」をクリックする。

available_packages-2.PNG

add_site.PNG

 

4. 追加された「GALAXY Tab」用のアドオンをチェックした状態で、「Install Selected」をクリックする。

available_packages-3.PNG

 

5. ライセンスを確認後、「Accept All」をクリック、「Install」をクリックする。

install.PNG

 

6. インストールが完了したら、「Close」をクリックする

install2.PNG

 

AVD(エミュレーター)作成手順

1. 「Virtual Device」をクリックし、「New」をクリックする。

avd1.PNG

 

2. 下図のように設定し、「Create AVD」をクリックする(Name や SD カードサイズは任意でOK)。

avd2.PNG

 

3. 作成したAVDを選択し、「Start」をクリック、Launch Options を設定し、「Launch」をクリックすると、エミュレータが起動します。

※画面サイズが大きいため、下図のようにスケールした方がよいです

※エミュレーターの画面の向きは、Ctrl + F11 で回転します

avd3.PNG

launch.png

emulator.PNG

2010年11月18日、Android Market のデベロッパーコンソールの仕様が変更されました。

近いうちに Android Market アプリ(Webサイト?)も更新されるかな?


変更点

  1. 高解像度アイコン(512 x 512)の画像の登録(必須)
  2. Feature Graphic(1024 x 500)の画像の登録(オプション)
  3. プロモーションビデオ用 YouTube URL の登録(オプション)

AndroidMarketDevCon.PNG


追記

以下、Android Market Support からのメール(2010/11/18)の原文です。

※1. 「最近の変更点」、2. 「ドラフトアップロード」、3. 「大きいプロモーション用画像」について記載されています(required が?)。


Hello,

We're writing to inform you about some changes to Android Market that require your attention.

First, we have added support for a recent changes feature, which allows you to add notes about changes specific to the newest version of your application. You are able to submit these from the Developer Console, similar to descriptions.
In the Market app, these notes will appear under the app description as "Recent changes."

Second, there is now a 'draft upload' capability for application updates. This feature enables you to edit your app listing and upload a new version without affecting the version live in Market. Your app listing edits will not change your live listing until you select "Publish."

Finally, we are adding support for larger promotional graphics to showcase your application. In addition to the currently required app screenshot, you will be required to upload one "feature" graphic. Supported promotional assets will now include:
 - A "feature" graphic, landscape aspect ratio, 1024 x 500 (required).
 - A high-res icon, 512 x 512 (required)..  The Android icon design guidelines located at http://developer.android.com/guide/practices/ui_guidelines/icon_design.html apply.
 - 2 screen shots, 320w x 480h, 480w x 854h, or 480w x 800h, increasing to 8 screen shots in the future (1 required).
 - A link for a promotional video hosted on YouTube (optional).

Thanks, and we look forward to continue working with you on Android Market.

Regards,
The Android Market Team

<<前のページへ 345678910111213

2014年3月

            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31