Android Automated Training - 채널 패키지 구성

5819 단어
개술
앞의 글(미국 그룹 안드로이드 자동화 여행-채널 패키지 생성)은 안드로이드에서 몇 가지 채널 패키지 생성 방식을 소개하여 포장이 느린 문제를 기본적으로 해결하였다.
그러나 채널이 갈수록 많아지면서 서로 다른 채널이 응용에 대한 요구도 모두 같지 않다.예를 들어 어떤 채널은 미단 클라이언트의 응용 이름 을 요구하고 어떤 채널은 응용 이름 을 요구한다.또한 일부 채널은 제3자 통계 도구(예를 들어 flurry)를 사용할 수 없도록 요구한다.한 마디로 하면 매번 포장할 때마다 이런 경로에 대해 적당한 배합을 해야 한다.
이전의 방법은 모든 적합한 채널에 Git 지점을 만들고 발판할 때 상응하는 지점으로 전환하며 주 지점의 코드를 통합하는 것이다.적당한 경로가 적으면 이런 방식은 받아들일 수 있다. 지점이 많으면 개발자에게는 악몽이다.다행히도 Gradle flavor가 생기면서 모든 것이 간단해졌다.본고는 독자가Gradle을 사용한 적이 있다고 가정하고 건의를 이해하지 못하면 관련 문서를 먼저 읽는다.
Flavor
먼저 build.gradle 파일의 코드를 살펴보십시오.
android {
    ....

    productFlavors {
        flavor1 {
            minSdkVersion 14
        }
    }
}

상례에서flavor:flavor1를 정의했고 응용minSdkVersion을 14로 지정했다(물론 더 많은 속성을 설정할 수 있으며 관련 문서를 참고할 수 있다).이와 동시에Gradle은 이 flavor에 대응하는 sourceSet, 기본 위치는 src/<flavorName> 디렉터리이고 이 예에 대응하는 것은 src/flavor1이다.
다음에 해야 할 일은 구체적인 수요에 따라 build.gradle 파일에 flavor를 설정하고 필요한 코드와 자원 파일을 추가하는 것이다.flavor1의 경우 gradle assembleFlavor1 명령을 실행하면 필요한 어댑터를 생성할 수 있습니다.다음은 주로 미국 단체구매 안드로이드 클라이언트의 적당한 사례를 소개한다.
케이스
다른 패키지 이름 사용
미국 단체구매 안드로이드 클라이언트는 두 가지 버전이 있는데 그것이 바로 휴대전화 버전(com.meituan.group)과hd 버전(com.meituan.group.hd이다. 두 버전은 서로 다른 코드를 사용했다.현재hd판에 대응하는 코드는 더 이상 유지보수되지 않기 때문에 휴대전화 버전의 코드를 직접 사용할 수 있기를 희망합니다.이 문제를 해결하는 방법은 여러 가지가 있지만 flavor를 사용하는 것은 비교적 간단하다. 예는 다음과 같다.
productFlavors {
    hd {
        applicationId "com.meituan.group.hd"
    }
}

위의 코드는 hd라는 flavor를 추가하고 응용 프로그램의 패키지 이름을 com.meituan.group.hd로 지정하여 gradle assembleHd 명령을 실행하면hd 어댑터를 생성할 수 있습니다.
자동 업데이트 여부를 조정합니다.
미국 단체구매 안드로이드 클라이언트는 시작할 때 기본적으로 클라이언트가 업데이트가 있는지 확인하고 업데이트가 있으면 다운로드를 알린다.그러나 일부 채널과 응용 시장에서는 이러한 기본 행위를 허용하지 않기 때문에 이런 채널을 어울릴 때 자동 업데이트 기능을 금지해야 한다.
해결책은 자동 업데이트 기능이 켜졌는지 여부를 결정하기 위해 설정 필드를 제공하는 것입니다.flavor를 사용하면 이런 문제를 완벽하게 해결할 수 있다.
Gradle은 generateSources 단계에서 flavor에 BuildConfig.java 파일을 생성합니다.BuildConfig클래스는 기본적으로 일부 상수 필드를 제공했다. 예를 들어 응용된 버전 이름(VERSION_NAME, 응용된 패키지 이름(PACKAGE_NAME 등이다.더 강력한 것은 개발자가 사용자 정의 필드를 추가할 수 있다는 것이다.다음 예제에서는 시장의 자동 업데이트 기능이 기본적으로 금지되어 있다고 가정합니다.
android {
    defaultConfig {
        buildConfigField "boolean", "AUTO_UPDATES", "true"
    }

    productFlavors {
        wandoujia {
            buildConfigField "boolean", "AUTO_UPDATES", "false"
        }        
    }

}

위의 코드는 wandoujia클래스에서 BuildConfig블로 상수를 생성하고 기본값은 AUTO_UPDATES이며 trueflavor를 사용할 때 이 값은 wandoujia로 설정됩니다.다음은 코드false 상수를 사용하여 자동 업데이트 기능이 켜졌는지 여부를 판단할 수 있습니다.마지막으로 AUTO_UPDATES 명령을 실행하면 기본적으로 자동 업그레이드 기능을 열지 않는 채널 패키지를 생성할 수 있습니다. 간단하지 않습니까?
다른 애플리케이션 이름 사용
가장 흔히 볼 수 있는 어댑터는 응용 프로그램을 수정하는 자원이다.예를 들어 미국 단체구매 안드로이드 클라이언트의 응용 이름은 gradle assembleWandoujia이지만 일부 채널은 응용 이름을 로 수정해야 한다.그리고 클라이언트는 일부 응용 프로그램 배달 시장과 자주 합작하기 때문에 응용 프로그램의 시작 인터페이스에 제3자 시장의 로고를 추가해야 한다. 이와 같은 적합한 형식도 많다.Gradle은 응용 프로그램을 구축할 때 flavor 소속 의 동명 자원을 우선적으로 사용한다.따라서 해결 방향은 flavordataSet에 같은 이름의 문자열 자원을 추가하여 기본 자원을 덮어쓰는 것이다.다음은 적합dataSet 채널의 응용 이름wandoujia을 예로 들어 소개한다.
먼저 구성 파일에 다음과 같은 flavor를 추가합니다.
android {
    productFlavors {
        wandoujia { 
        }
    }
}

위의 설정은 기본값build.gradle 디렉터리src/wandoujiaflavorwandoujia입니다.
다음에 dataSet 디렉터리에 src 디렉터리를 만들고 다음과 같은 응용 프로그램 이름 문자열 자원(wandoujia을 추가합니다.
<resources>
    <string name="app_name">    </string>
</resources>

기본 응용 프로그램 이름 문자열 자원은 다음과 같습니다 (src/wandoujia/res/values/appname.xml:
<resources>
    <string name="app_name">  </string>
</resources>

마지막으로 src/main/res/values/strings.xml 명령을 실행하면 gradle assembleWandoujia라는 응용 프로그램을 생성할 수 있습니다.
타사 SDK 사용
일부 채널에서는 클라이언트가 타사 SDK를 내장하여 특정 요구 사항을 충족하도록 요구합니다.예를 들어 360 앱 시장에서 미국 단체구매 안드로이드 클라이언트의 모듈은 그들이 제공한 SDK를 사용하도록 요구한다.문제는 특정 채널에만 SDK를 추가하고 다른 채널에는 SDK를 도입하지 않는 방법이다.flavor를 사용하면 이 문제를 잘 해결할 수 있다. 다음은 flavor 도입qihu360SDK를 예로 들어 설명한다.
android {
    productFlavors {
        qihu360 {
        }
    }
}
...
dependencies {
    provided 'com.qihoo360.union.sdk:union:1.0'
    qihu360Compile 'com.qihoo360.union.sdk:union:1.0'
}

상례에 com.qihoo360.union.sdk:union:1.0 라는 flavor를 추가했고, 컴파일링과 실행 시 의존 qihu360 을 지정했습니다.다른 채널은 구축할 때만 이 SDK에 의존하고 포장할 때 추가하지 않는다.
다음은 코드에서 반사 기술을 사용하여 응용 프로그램이 이 SDK를 추가했는지 판단하고 360 SDK가 제공하는 com.qihoo360.union.sdk:union:1.0를 표시할지 여부를 결정해야 한다.부분 코드는 다음과 같습니다.
class MyActivity extends Activity {
    private boolean useQihuSdk;

    @override
    public void onCreate(Bundle savedInstanceState) {
        try {
            Class.forName("com.qihoo360.union.sdk.UnionManager");
            useQihuSdk = true;
        } catch (ClassNotFoundException ignored) {

        }
    }
}

마지막으로 명령을 실행하면 360gradle assembleQihu360 모듈을 포함하는 채널 패키지를 생성할 수 있다.
총결산
어울리는 것은dirty 작업인데 특히 어울리는 경로가 비교적 많을 때이다.위에서는Gradle flavor를 사용하여 어댑터를 하는 몇 가지 예를 소개하여 번잡한 어댑터 작업을 기본적으로 해결하였다.
참고 자료
http://www.gradle.org/
Product flavors

좋은 웹페이지 즐겨찾기