2012年5月20日日曜日

Google Play ストアの言語を切り替える方法

アプリ紹介文多言語対応確認用メモ。

https://play.google.com/store/apps/details?id=<パッケージ名>&hl=<言語コード?>

<言語コード?>の部分にアルファベット2文字のコードを入れると言語が切り替わる
例えば
ja(日本語)
en(英語)
fr(フランス語)

ただそれだけですが、忘れっぽいのでメモる...

2012年5月3日木曜日

デバッグビルドとリリースビルドで処理を変える方法(2)

デバッグビルドとリリースビルドで処理を変える方法その2です。
以前に書いた方法は以下から。

デバッグビルドとリリースビルドで処理を変える方法
http://neta-abc.blogspot.jp/2012/02/blog-post.html

ADT 17(らしい)から/genの下にBuildConfig.javaが自動生成されるようになっています。

BuildConfig.java
/** Automatically generated file. DO NOT MODIFY */
package com.example.builconfigtest;

public final class BuildConfig {
    public final static boolean DEBUG = true;
}

このBuildConfig.DEBUGはリリースビルド時(Export Signed Application Package...)に自動でfalseになってくれる仕組みだそうです。

なので、これを利用してデバッグビルドとリリースビルドで処理を切り替えることが出来ます。

BuildConfigTestActivity.java
public class BuildConfigTestActivity extends Activity {

    private final String TAG = getClass().getSimpleName();

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

        if (BuildConfig.DEBUG) {
            Log.e(TAG, "BuildConfig.DEBUG = true");
        } else {
            Log.e(TAG, "BuildConfig.DEBUG = false");
        }
    }
}

上記のコードでデバッグビルド/リリースビルド時にログが切り替わることを確認しています。

因みにWindows環境(のみ?)ではBuildConfig.DEBUGがリリースビルド時にfalseにならないバグがあるようです。
私の環境(Windows 7 64bit/Indigo/ADT 18)でも発生しています。
>Eclipseの[Project] -> [Build Automatically]を外すと回避できました。

Issue 27940: BuildConfig.DEBUG is "true" for exported application package
http://code.google.com/p/android/issues/detail?id=27940

2012年4月29日日曜日

Android 2.1以上でGridLayoutを使う

準備
1. Support Packageをアップデートする。(2012/4/29現在の最新は revision 8)
2. <android-sdk install path>\extras\android\support\v7\にあるライブラリプロジェクト”gridlayout”をワークスペースにインポートする。
3. GridLayoutを使いたいプロジェクトに上記のライブラリを追加する。
   [プロジェクトを右クリック] - [Properties] - [Android] - [Library] - [Add]

使用方法
<GridLayout>の代わりに<android.support.v7.widget.GridLayout>と記述する。
因みに、<Space>も使えるようになる。
<Space>の代わりに<android.support.v7.widget.Space>と記述する。
使い方の詳細は
<android-sdk install path>\extras\android\support\v7\gridlayout\README.txt
を参照。

2012年4月21日土曜日

ボタンにアイコンを表示する

レイアウトファイルで指定する方法
drawableLeft
drawableRight
drawableTop
drawableBottom
でアイコンの位置と画像を指定。

drawablePadding
でアイコンと文字の間隔を指定。
<?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:gravity="center"
    android:orientation="vertical" >
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:drawableLeft="@drawable/ic_launcher"
        android:drawablePadding="10dp"
        android:text="drawableLeft" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:drawableRight="@drawable/ic_launcher"
        android:drawablePadding="10dp"
        android:text="drawableRight" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:drawableTop="@drawable/ic_launcher"
        android:drawablePadding="10dp"
        android:text="drawableTop" />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:drawableBottom="@drawable/ic_launcher"
        android:drawablePadding="10dp"
        android:text="drawableBottom" />
</LinearLayout>
コードから指定する方法
setCompoundDrawablesWithIntrinsicBounds()
でアイコンの位置と画像を指定。
引数はリソースID または Drawableで指定。

setCompoundDrawablePadding()
でアイコンと文字の間隔を指定。
単位はpx。たぶん。。
        Button button = (Button) findViewById(R.id.Button);

        int left = R.drawable.ic_launcher;
        int top = 0;
        int right = 0;
        int bottom = 0;

        // Drawable left = getResources().getDrawable(R.drawable.ic_launcher);
        // Drawable top = null;
        // Drawable right = null;
        // Drawable bottom = null;

        button.setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom);
        button.setCompoundDrawablePadding(10);

2012年3月24日土曜日

Android開発環境(再)構築メモ for Windows 7(64bit)

Android SDK r17とADT 17が公開されたので導入したら
下記のExceptionが出るようになる
「Exception while initializing java tooling」

Eclipse再インストール ※ついでなので3.6(32bit)->3.7(64bit)にバージョンアップ

3.7(64bit)起動せず ※Eclipse 64bit動かすにはJDK 64bitが必要?
「Failed to load the JNI shared library "C:\Program Files(x86)\Java\jdk1.6.0_24\jre\bin\client\jvm.dll"」

諦めて3.7(32bit)に

起動するも症状変わらず...
「Exception while initializing java tooling」

調べてみたところworkspaceが壊れてる?模様
http://www.myeclipseide.com/PNphpBB2-viewtopic-t-21638.html
既存のworkspaceをリネームしてバックアップした後
新しくworkspaceを作り直したところ復旧

バックアップしたworkspaceからプロジェクトをインポート

@Overrideアノテーションでエラー出る

調べる

解決
Window->Preferences->Java->Compiler->JDK Compliance->Compiler compliance level
1.5->1.6に変更
※参考にしたページ

Java関連の日記 - Firespeed
「@Overrideのエラーを解決してみた」


次回の再構築時にもハマりそうなので、忘れないようにメモる。


因みにEclipseの設定は下記の通り。
・Android開発向けEclipse設定メモ
http://neta-abc.blogspot.jp/2011/09/eclipse.html
・Eclipse Java ; { の入力
http://neta-abc.blogspot.jp/2011/10/eclipse-java.html

2012年2月25日土曜日

ADT 17 Preview メモ

ADT 17 Previewをインストールしてみた。
ダウンロードと変更点の詳細は↓から。

以下、気になった変更点。
Network Statistics

使い方
DDMSパースペクティブを開く
[Window]-[Show View]-[Other]を開き[Android]-[Network Statistics]を選択
Devicesから測定したいパッケージ名を選択してNetwork Statisticsの[Start]ボタンを押下

Totalは灰色、タグを設定した処理の通信量は色分けして表示される。
タグの設定方法は下記。
TrafficStats.setThreadStatsTag(0xF00D);
try {
// make network request using HttpClient.execute()
} finally {
TrafficStats.clearThreadStatsTag();
}

Proguard
設定ファイル名が変わった?
proguard.cfg → proguard-project.txt
設定ファイルが分割された?
<android-sdk-path>\tools\proguard\proguard-android.txt
Proguardの設定ファイルを読みこなせないので詳しいことはわかりません...

Lint
いろいろ変わったらしい...

Export Screenshot from the Layout Editor
Layout Editorから右クリック-[Export Screenshot...]でLayout Editor上画面レイアウトのスクリーンショットが保存できる。

Androidアプリのデフォルトアイコン
ic_launcher.pngが↓に変わった。

/res/drawable-xhdpi
新規Androidプロジェクトの作成時に生成されるようになった。

以上。

2012年2月8日水曜日

デバッグビルドとリリースビルドで処理を変える方法

2012/05/15追記
↓その2書きました。こちらの方がシンプルです。
デバッグビルドとリリースビルドで処理を変える方法(2)
http://neta-abc.blogspot.jp/2012/05/2.html

コード
MainActivity.java
public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        if (DebugUtil.isDebuggable(getApplicationContext())) {
            Log.e(getClass().getSimpleName(), "Debug Build");
        } else {
            Log.e(getClass().getSimpleName(), "Release Build");
        }
    }
}
DebugUtil.java
public class DebugUtil {
    public static boolean isDebuggable(Context context) {
        PackageManager manager = context.getPackageManager();
        ApplicationInfo info = null;
        try {
            info = manager.getApplicationInfo(context.getPackageName(), 0);
        } catch (NameNotFoundException e) {
            return false;
        }
        if ((info.flags & ApplicationInfo.FLAG_DEBUGGABLE) == ApplicationInfo.FLAG_DEBUGGABLE) {
            return true;
        }
        return false;
    }
}

AndroidManifest.xmlのapplicationタグ内でandroid:debuggableをtrue/falseしてデバッグビルドとリリースビルドを切り替えると思っていましたが、Eclipseから実行した場合は自動でandroid:debuggable="true"となるようです。

上記コードで以下を確認しました。
・Eclipseから実行した場合
  Debug Buildのログが表示される。
・Export Signed Application Packageで作成したAPKファイルをインストールして実行した場合
  Release Buildのログが表示される。

参考にしたサイト
Tech Racho
「Androidでリリース時にデバッグログをオフにする方法」
http://techracho.bpsinc.jp/bps/2010_06_28/1946
Y.A.Mの雑記帳
「Android SDK Tools, Reviison 8」
General notes: "true debug build をサポート。..."の部分
http://y-anz-m.blogspot.com/2010/12/androidsdk-tools-reviison-8.html