2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Android][Kotlin]Androidの設定値について

Posted at

指定したターゲット(パッケージ名や利用するサービスの設定)で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 と MNC mcc310 mcc310-mnc004 モバイル カントリー コード(MCC)とモバイル ネットワーク コード(MNC)
言語と地域 en en-rUS b+en+US ISO 639-1言語コード BCP 47言語タグ
レイアウトの方向 ldrtl ldltr ldrtlは右から左。ldltrは左から右。
smallestWidth swdp 使用可能な画面領域の最小寸法で指定。
使用可能な幅 wdp 使用可能な最小の画面幅をdp単位で指定。
使用可能な高さ hdp 使用可能な最小の画面の高さをdp単位で指定。
画面サイズ small normal large xlarge
画面アスペクト long notlong
円形の画面 round notround
広色域 widecg nowidecg
HDR highdr 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クラスのメンバーを設定することで、ソースコードで参照する値を切り替えられる。

【関連情報】
集まれKotlin好き!Kotlin愛好会 vol.20

Cocoa.swift

Cocoa勉強会 関東

Cocoa練習帳

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?