Android용 반응 네이티브 애플리케이션을 위한 환경 기반 apk 만들기

Android 기기는 관련 패키지 이름으로 각 애플리케이션을 식별하며 일반적으로 애플리케이션의 단일 인스턴스만 한 번에 설치하도록 허용합니다.
따라서 장치에 패키지 이름com.org.weatherapp으로 설치된 응용 프로그램이 있는 경우 한 번에 설치되는 유일한 인스턴스가 되며 동일한 패키지 이름을 가진 응용 프로그램은 기존 설치를 업데이트합니다.

따라서 팀이 애플리케이션의 여러 복사본을 설치할 수 있도록 허용해야 한다면 어떻게 해야 할까요?

테스터가 자신의 장치에 프로덕션 릴리스를 설치하고 개발 환경에서 새로운 기능을 테스트해야 하는 경우와 같이 프로덕션 복사본을 제거하여 일시적으로만 사용할 개발 apk를 설치해야 한다면 끔찍할 것입니다.

현실에서 일어나는 일 같지 않습니까?

네 말이 맞아, 그렇지 않아.

react-native에서 서로 다른 환경에 대해 서로 다른 apk를 만드는 방법을 보여드리겠습니다. 그러면 모든 기기에 동시에 설치할 수 있습니다!
뿐만 아니라 다른 응용 프로그램 실행기 아이콘도 사용할 예정이므로 다른 복사본을 쉽게 구분할 수 있습니다.

애플리케이션의 각 사본에 다른 패키지 이름을 사용하여 시작합니다.

com.org.weatherapp.test // For test environment
com.org.weatherapp.dev  // For dev environement
com.org.weatherapp // For production environment


세 가지 다른 패키지 이름을 사용하고 있지만 필요에 따라 여러 환경에서 작동합니다. 모든 사본에는 고유한 패키지 이름이 있어야 하며, 그렇지 않으면 기존 설치를 덮어씁니다.

1. 각 환경에 대한 자산 생성



Android Studio를 열고 왼쪽 메뉴를 Android 로 변경하고 자산 폴더를 마우스 오른쪽 버튼으로 클릭한 다음 New -> Image Asset 를 클릭합니다.
원하는 이름과 기타 속성을 구성하고 Finish를 클릭합니다.

각 환경에 대해 반복하고 적절하게 이름을 지정합니다.

ic_test_launcher.png // For test environment
ic_dev_launcher.png  // For dev environement
ic_launcher.png // For production environment


Android Studio는 자산의 모든 변형을 생성하고 이를 mipmap 및 드로어블 폴더에 넣습니다.

2. 환경에 따라 다른 아이콘 사용



이제 각 환경에서 다른 실행기 아이콘을 사용하도록 응용 프로그램에 지시해야 합니다.
android/app/src/main/AndroidManifest.xml를 열고 다음 줄을 변경합니다.

    <application
        android:name=".MainApplication"
        android:allowBackup="false"
        android:label="@string/app_name"
---     android:icon="@mipmap/ic_launcher"
---     android:roundIcon="@mipmap/ic_launcher_round"
+++     android:icon="${appIcon}"
+++     android:roundIcon="${appIconRound}"
        android:theme="@style/AppTheme">
        ...
        ...
    </application>


앱 런처 아이콘에 자리 표시자를 사용합니다. 다음 단계에서 정의하겠습니다.

3. 다양한 애플리케이션 특징 정의



우리는 다양한 애플리케이션 특징을 정의해야 합니다.android/app/build.gradle를 열고 다음 줄을 추가합니다.

    android {
        ...
        defaultConfig {
            ...
        }
        flavorDimensions "version"
        productFlavors {
            test {
                applicationIdSuffix ".test"
                manifestPlaceholders = [
                    appIcon: "@mipmap/ic_test_launcher",
                    appIconRound: "@mipmap/ic_test_launcher_round"
                ]
            }
            dev {
                applicationIdSuffix ".dev"
                manifestPlaceholders = [
                    appIcon: "@mipmap/ic_dev_launcher",
                    appIconRound: "@mipmap/ic_dev_launcher_round"
                ]
            }
            production {
                manifestPlaceholders = [
                    appIcon: "@mipmap/ic_launcher",
                    appIconRound: "@mipmap/ic_launcher_round"
                ]
            }
        }
    }


그래서 우리는 여기서 무엇을 했습니까?
  • 애플리케이션, 테스트, 개발 및 프로덕션에 대해 세 가지 제품 유형을 정의했습니다.
  • applicationIdSuffix는 응용 프로그램 ID에 패키지 이름을 추가하는 데 사용되는 속성입니다. 따라서 test apk의 패키지 이름은 com.org.weatherapp.test이고 dev apk의 패키지 이름은 com.org.weatherapp.dev입니다. 아무 것도 추가하고 싶지 않기 때문에 프로덕션용으로 applicationIdSuffix를 정의하지 않았습니다.
  • manifestPlaceholder는 앞서 AndroidManifest.xml에서 정의한 변수로, 매니페스트 파일의 자리 표시자를 대체하는 데 사용됩니다. 이렇게 하면 환경마다 다른 아이콘을 사용할 수 있습니다.

  • 4. 빌드 스크립트 업데이트



    다양한 맛의 APK를 만드는 데 사용할 빌드 스크립트를 업데이트해야 합니다.
    package.json를 열고 다음 줄을 추가합니다.

    "scripts": {
        "bundle": "react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest",
        "android": "react-native run-android --variant testDebug --appId com.org.weatherapp.test",
        "dev-apk": "yarn bundle && cd android && ./gradlew assembledevDebug",
        "prod-apk": "yarn bundle && cd android && ./gradlew assembleproductionDebug"
    }
    


  • bundle은 index.bundle 파일을 만드는 데 사용되는 명령입니다.
  • 응용 프로그램의 testDebug 변형을 사용하도록 Android 스크립트를 업데이트합니다.
  • dev-apk 스크립트를 사용하여 응용 프로그램의 devDebug 변형을 사용합니다.
  • 프로덕션과 동일합니다. 물론 프로덕션 빌드는 디버그 대신 릴리스 변형이 되지만 이 튜토리얼의 범위를 벗어나는 다른 프로세스입니다.

  • 그게 다야!
    이제 모든 기기에 애플리케이션의 모든 기능을 동시에 설치할 수 있습니다.

    이 가이드가 도움이 되셨다면 좋아요를 남겨주세요. 질문이나 의견이 있으시면 아래에 남겨주세요. 감사합니다 👍

    좋은 웹페이지 즐겨찾기