제품 Flavor에서 다른 소스를 사용하여 응용 프로그램 만들기

15150 단어 build.gradleAndroid

구성 변수


Android는 변형된 다양한 버전의 어플리케이션을 만드는 기능이 있습니다.
환경의 전환 방법은 다음과 같은 두 가지가 있다
  • BuildType: 생산용(release), 개발용(debug) 등에 따라 환경 구분
  • ProfuctFlavor: 비용, 수취 비용 등 공통된 출처를 바탕으로 아종 제작
  • 기본적으로 제품 Flavor는 설정되지 않고 BuildType만 설정되어 있습니다.

    제품 Flavor 설정 방법


    AndroidStudio의 GUI에서 진행하는 방법과gradle에서 설정하는 두 가지가 있습니다.
    다음은gradle 파일을 편집하는 형식으로 수정합니다
    app/build.gradle
    android {
        compileSdkVersion 29
        buildToolsVersion "29.0.0"
        defaultConfig {
            applicationId "com.example.test01"
            minSdkVersion 26
            targetSdkVersion 29
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }
        // ここから以下を追加
        flavorDimensions 'mode'
        productFlavors {
            blue {
                dimension = 'mode'
            }
            freen {
                dimension = 'mode'
            }
        }
      // ここまで
    }
    
    
    제품 Flavor는 FlavorDimension에 속해야 합니다.상기에서 다음과 같은 형식으로 구성되다
    mode (dimension)
    ┝ blue
    ┝ green
    이렇게 설정하면 기본값에서 원본 집합은 다음과 같습니다
    // 一部抜粋
    ------------------------------------------------------------
    Project :app
    ------------------------------------------------------------
    
    blueDebug
    ---------
    Compile configuration: blueDebugCompile
    build.gradle name: android.sourceSets.blueDebug
    Java sources: [app/src/blueDebug/java]
    Manifest file: app/src/blueDebug/AndroidManifest.xml
    Android resources: [app/src/blueDebug/res]
    Assets: [app/src/blueDebug/assets]
    AIDL sources: [app/src/blueDebug/aidl]
    RenderScript sources: [app/src/blueDebug/rs]
    JNI sources: [app/src/blueDebug/jni]
    JNI libraries: [app/src/blueDebug/jniLibs]
    Java-style resources: [app/src/blueDebug/resources]
    
    blue
    ----
    Compile configuration: blueCompile
    build.gradle name: android.sourceSets.blue
    Java sources: [app/src/blue/java]
    Manifest file: app/src/blue/AndroidManifest.xml
    Android resources: [app/src/blue/res]
    Assets: [app/src/blue/assets]
    AIDL sources: [app/src/blue/aidl]
    RenderScript sources: [app/src/blue/rs]
    JNI sources: [app/src/blue/jni]
    JNI libraries: [app/src/blue/jniLibs]
    Java-style resources: [app/src/blue/resources]
    
    green
    -----
    Compile configuration: greenCompile
    build.gradle name: android.sourceSets.green
    Java sources: [app/src/green/java]
    Manifest file: app/src/green/AndroidManifest.xml
    Android resources: [app/src/green/res]
    Assets: [app/src/green/assets]
    AIDL sources: [app/src/green/aidl]
    RenderScript sources: [app/src/green/rs]
    JNI sources: [app/src/green/jni]
    JNI libraries: [app/src/green/jniLibs]
    Java-style resources: [app/src/green/resources]
    
    debug
    -----
    Compile configuration: debugCompile
    build.gradle name: android.sourceSets.debug
    Java sources: [app/src/debug/java]
    Manifest file: app/src/debug/AndroidManifest.xml
    Android resources: [app/src/debug/res]
    Assets: [app/src/debug/assets]
    AIDL sources: [app/src/debug/aidl]
    RenderScript sources: [app/src/debug/rs]
    JNI sources: [app/src/debug/jni]
    JNI libraries: [app/src/debug/jniLibs]
    Java-style resources: [app/src/debug/resources]
    
    main
    ----
    Compile configuration: compile
    build.gradle name: android.sourceSets.main
    Java sources: [app/src/main/java]
    Manifest file: app/src/main/AndroidManifest.xml
    Android resources: [app/src/main/res]
    Assets: [app/src/main/assets]
    AIDL sources: [app/src/main/aidl]
    RenderScript sources: [app/src/main/rs]
    JNI sources: [app/src/main/jni]
    JNI libraries: [app/src/main/jniLibs]
    Java-style resources: [app/src/main/resources]
    
    
  • main: 공동 사용 소스
  • blue, green: Flavor 지정 시 우선 참조되는 소스
  • 소스 세트 우선 순위 사용


    소스 세트는 다음 순서로 참조됩니다.
  • buildType, ProductFlavor 일치
  • buildType 일치
  • 제품 Flavor 일치
  • 기타 (main 소스 세트 참조)
  • 견본


    다음은 블루 맛, 그린 맛 두 가지 원본 전환을 진행합니다

    카탈로그 개요

  • main에서 각 향기에 사용되는 원천을 기술
  • 전환용 MainActivity 및 MainActivity
  • 를 지정하려면 blue에 Manifest 파일을 설정합니다.

    제품 Flavor 설정


    build.gradle
    android {
        compileSdkVersion 29
        buildToolsVersion "29.0.0"
        defaultConfig {
            applicationId "com.example.test01"
            minSdkVersion 26
            targetSdkVersion 29
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }
        flavorDimensions 'mode'
        productFlavors {
            blue {
                dimension = 'mode'
                applicationIdSuffix ".blue"
            }
            green {
                dimension = 'mode'
                applicationIdSuffix ".green"
            }
        }
    }
    

    주 소스 세트


    com.example.test01.MainActivity
    package com.example.test01
    
    class MainActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            setFragment()
        }
    
        private fun setFragment() {
            val transaction = supportFragmentManager.beginTransaction()
            val fragment = GreenFragment()
            transaction.replace(R.id.fragment_base, fragment)
            transaction.commit()
        }
    }
    
    
    AndroidManifest.xml
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
              package="com.example.test01">
    
        <application
                android:allowBackup="true"
                android:icon="@mipmap/ic_launcher"
                android:label="@string/app_name"
                android:roundIcon="@mipmap/ic_launcher_round"
                android:supportsRtl="true"
                android:theme="@style/AppTheme">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN"/>
    
                    <category android:name="android.intent.category.LAUNCHER"/>
                </intent-filter>
            </activity>
        </application>
    </manifest>
    

    블루 라이트 그룹


    com.example.com.blue.MainActivity
    package com.example.test01.blue
    
    class MainActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            setFragment()
        }
    
        private fun setFragment() {
            val transaction = supportFragmentManager.beginTransaction()
            val fragment = BlueFragment()
            transaction.replace(R.id.fragment_base, fragment)
            transaction.commit()
        }
    }
    
    
    
    AndroidManifest.xml
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
              package="com.example.test01">
    
        <application
                android:allowBackup="true"
                android:icon="@mipmap/ic_launcher"
                android:label="@string/app_name"
                android:roundIcon="@mipmap/ic_launcher_round"
                android:supportsRtl="true"
                android:theme="@style/AppTheme">
    
            <!- ↓のnameが変わった->
            <activity android:name=".blue.MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN"/>
    
                    <category android:name="android.intent.category.LAUNCHER"/>
                </intent-filter>
            </activity>
        </application>
    </manifest>
    
    

    결과


    blueDebug



    greenDebug

  • 그린이 따로 설정되어 있지 않기 때문에main 원본 집합을 직접 참조합니다

  • 좋은 웹페이지 즐겨찾기