トップ «前の日記(2020-01-13) 最新 次の日記(2020-03-01)» 編集

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|

2020-02-24 [Android][Kotlin]Androidの設定値について

指定したターゲット(パッケージ名や利用するサービスの設定)でAndroidアプリケーションをビルドする方法は複数ある。初期のものであったり、それを改善したものであったり。最新の方法だと利点が多いので選択できればいいのだが、歴史が長いソースコードだと、様々な理由から方法を変更できなかったり。

何がベストなのかは状況によって異なるが、まずは知らないことには話にならないということで調べてた方法を列挙してみる。

_ androidコマンド

最新のAndroid SDKのツールではなくなったコマンド。オプションで指定したAndroidアプリケーションの雛形となるソース一式を生成されるので、例えば、異なるパッケージ名のソースを生成する場合に使っていた。

$ android create project \
    --name プロジェクト名 \
    --target ターゲットID \
    --path プロジェクトを生成するファイル・パス \
    --package パッケージ名 \
    --activity デフォルト・アクティビティ名

_ 代替リソース

条件毎に用意したディレクトリにリソースを置いて切り替える方法。

以下は高密度画面(hdpi)とそれ以外の画面の端末でアイコン画像を切り替える例だ。

res/drawable/icon.png
res/drawable-hdpi/icon.png

hdpiは設定修飾子と呼ばれる識別子だが、どんな設定修飾子があるのか表にしてみる。

設定修飾子の値説明
MCC と MNCmcc310 mcc310-mnc004モバイル カントリー コード(MCC)とモバイル ネットワーク コード(MNC)
言語と地域en en-rUS b+en+USISO 639-1言語コード BCP 47言語タグ
レイアウトの方向ldrtl ldltrldrtlは右から左。ldltrは左から右。
smallestWidthswdp使用可能な画面領域の最小寸法で指定。
使用可能な幅wdp使用可能な最小の画面幅をdp単位で指定。
使用可能な高さhdp使用可能な最小の画面の高さをdp単位で指定。
画面サイズsmall normal large xlarge
画面アスペクトlong notlong
円形の画面round notround
広色域widecg nowidecg
HDRhighdr lowdrハイ ダイナミック レンジ
画面の向きport land
UI モードcar desk ...端末をホルダーに装着したり、取り外す場合
ナイトモードnight notnight
画面ピクセル密度ldpi xxxhdpi ...画面ピクセル密度(dpi)
タッチスクリーン タイプnotouch finger
テキスト入力方法nokeys qwerty 12key
ナビゲーション キーnavexposed navhidden
ナビゲーション方法nonav dpad trackball wheel
プラットフォーム Ver.v3 v4 v7 ...API レベル

_ ローカライズ

設定修飾子を使った代替リソースを利用する方法。例を挙げる。

res/values/strings.xml
res/drawable/
res/values-en/strings.xml
res/values-ja/strings.xml
res/drawable-ja/

文字列リソースを英語と日本語で切り替えるのと、画像を日本語とそれ以外で切り替える例となっている。

_ ビルド バリアント

ビルド・バリアントは、ビルドタイプとプロダクト フレーバーを組み合わせたも。build.gradleの例だ。

android {
    defaultConfig {
    }
 
    signingConfigs {
        release {}
    }
 
    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
        debug {}
        staging {}
    }
 
    flavorDimensions "api", "mode"
    productFlavors {
        demo {
            dimension "mode"
        }
        full {
            dimension "mode"
        }
 
        minApi24 {
            dimension "api"
        }
        minApi23 {
            dimension "api"
        }
        minApi21s {
            dimension "api"
        }
    }
 
    variantFilter { variant ->
        def names = variant.flavors*.name
        if (names.contains("minApi21") && names.contains("demo")) {
            setIgnore(true)
        }
    }
}

ビルド バリアントの形式は、<product-flavor><Build-Type>となる。

例えば、minApi24DemoDebugは、minApi24とdemoとdebugの組み合わせという意味。この場合、apkはapp-minApi24-demo-debug.apkとなる。

ビルド・バリアントに対応したJavaソースのパスは、例えば src/demoMinApi24/java/ となる。

ソースセットの優先順位の例だ。

  • src/demoDebug/
  • src/debug/
  • src/demo/
  • src/main/

_ gradle.properties

build.gradleに渡すパラメータを設定できる。

gradle.propertiesの例。

DEMO_STRING="demo string"
DEMO_NUM_DEMO=1234
DEMO_NUM_FULL=5678
DEMO_BOOLEAN=true

build.gradleの例。

android {
    defaultConfig {
        // resの値を追加(AndroidManifest.xml で参照)
        resValue 'string', 'DEMO_STRING', "${DEMO_STRING}"
 
        // BuildConfigクラスのメンバーを追加(Kotlinコードで参照)
        buildConfigField 'boolean', 'DEMO_BOOLEAN', "${DEMO_BOOLEAN}"
    }
    productFlavors {
        demo {
            // BuildConfigクラスのメンバーを追加(Kotlinコードで参照)
            buildConfigField 'long', 'DEMO_NUM', "${DEMO_NUM_DEMO}"
        }
        full {
            // BuildConfigクラスのメンバーを追加(Kotlinコードで参照)
            buildConfigField 'long', 'DEMO_NUM', "${DEMO_NUM_FULL}"
        }
}

リソースの値を設定することでAndroidManifest.xmlで使い値を切り替えたり、BuildConfigクラスのメンバーを設定することで、ソースコードで参照する値を切り替えられる。


トップ «前の日記(2020-01-13) 最新 次の日記(2020-03-01)» 編集