Android Automated Training - 채널 패키지 구성
앞의 글(미국 그룹 안드로이드 자동화 여행-채널 패키지 생성)은 안드로이드에서 몇 가지 채널 패키지 생성 방식을 소개하여 포장이 느린 문제를 기본적으로 해결하였다.
그러나 채널이 갈수록 많아지면서 서로 다른 채널이 응용에 대한 요구도 모두 같지 않다.예를 들어 어떤 채널은 미단 클라이언트의 응용 이름
을 요구하고 어떤 채널은 응용 이름
을 요구한다.또한 일부 채널은 제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
이며 true
flavor를 사용할 때 이 값은 wandoujia
로 설정됩니다.다음은 코드false
상수를 사용하여 자동 업데이트 기능이 켜졌는지 여부를 판단할 수 있습니다.마지막으로 AUTO_UPDATES
명령을 실행하면 기본적으로 자동 업그레이드 기능을 열지 않는 채널 패키지를 생성할 수 있습니다. 간단하지 않습니까?다른 애플리케이션 이름 사용
가장 흔히 볼 수 있는 어댑터는 응용 프로그램을 수정하는 자원이다.예를 들어 미국 단체구매 안드로이드 클라이언트의 응용 이름은
gradle assembleWandoujia
이지만 일부 채널은 응용 이름을
로 수정해야 한다.그리고 클라이언트는 일부 응용 프로그램 배달 시장과 자주 합작하기 때문에 응용 프로그램의 시작 인터페이스에 제3자 시장의 로고를 추가해야 한다. 이와 같은 적합한 형식도 많다.Gradle은 응용 프로그램을 구축할 때 flavor 소속
의 동명 자원을 우선적으로 사용한다.따라서 해결 방향은 flavordataSet
에 같은 이름의 문자열 자원을 추가하여 기본 자원을 덮어쓰는 것이다.다음은 적합dataSet
채널의 응용 이름wandoujia
을 예로 들어 소개한다.먼저
구성 파일에 다음과 같은 flavor를 추가합니다.android {
productFlavors {
wandoujia {
}
}
}
위의 설정은 기본값
build.gradle
디렉터리src/wandoujia
flavorwandoujia
입니다.다음에
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 도입qihu360
SDK를 예로 들어 설명한다.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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.