gradle 다중 채널 패키지 구축(다중 응용 프로그램 Id, 다중 아이콘, 다중 app 이름)
...
def releaseTime() {
return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC"))
}
android {
compileSdkVersion 25
buildToolsVersion '25.0.2'
defaultConfig {
applicationId "com.edt.edtdoctor"
minSdkVersion 16
targetSdkVersion 23
versionCode 124
versionName "1.2.4"
ndk {
abiFilters "armeabi"/*, "x86"*/
}
buildConfigField("String", "CHAT_DIRECTION", '"1"')
buildConfigField("String", "XF_APPID", '"***"')
buildConfigField("String", "CLIENT_ID", '"doctor"')
buildConfigField("String", "WECHAT_KEY_VALUE", '"***"')
//Enabling multidex support
multiDexEnabled true
}
tasks.whenTaskAdded { task ->
if (task.name.contains("lint")
// instant run , clean
//||task.name.equals("clean")
// aidl
||task.name.contains("Aidl")
//
||task.name.contains("mockableAndroidJar")
||task.name.contains("UnitTest")
||task.name.contains("AndroidTest")
// NDK JNI
//|| task.name.contains("Ndk")
//|| task.name.contains("Jni")
) {
task.enabled = false
}
}
signingConfigs {
release {
try {
storeFile file('./keystore/edt_edtdoctor.jks')
keyAlias 'china'
keyPassword '******'
storePassword '******'
} catch (ex) {
throw new InvalidUserDataException(ex.toString())
}
}
debug {
storeFile file("./keystore/debug.keystore")
}
}
// ( androidManifest.xml)
productFlavors {
huawei {
applicationId "com.edt.***"
buildConfigField("boolean", "IS_DEVELOP", "false")
resValue "string", "app_name", "appName"
buildConfigField("String", "BUGLY_ID", '"***"')
manifestPlaceholders = [JPUSH_APPKEY_VALUE : "***",
EASEMOB_APPKEY_VALUE: "***",
UMENG_APPKEY_VALUE : "***",
UMENG_CHANNEL_VALUE : "huawei",
START_BACKGROUND : "@style/Splash_Theme",
app_icon : "@mipmap/ic_launcher"]
}
develop {
applicationId "com.edt.***"
buildConfigField("boolean", "IS_DEVELOP", "true")
resValue "string", "app_name", "another"
buildConfigField("String", "BUGLY_ID", '"***"')
manifestPlaceholders = [JPUSH_APPKEY_VALUE : "***",
EASEMOB_APPKEY_VALUE: "***",
UMENG_APPKEY_VALUE : "***",
UMENG_CHANNEL_VALUE : "develop",
START_BACKGROUND : "@style/Three_Splash_Theme",
app_icon : "@drawable/icon"]
}
// productFlavors.all { flavor ->
// //UMENG_CHANNEL_VALUE AndroidManifest.xml ,
// flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
// }
}
lintOptions {
tasks.lint.enabled = false
checkReleaseBuilds false
// Or, if you prefer, you can continue to check for errors in release builds,
// but continue the build even when errors are found:
abortOnError false
}
configurations.all {
resolutionStrategy.force 'com.android.support:support-annotations:23.0.1'
}
buildTypes {
debug {
manifestPlaceholders = [JPUSH_APPKEY_VALUE : "***",
EASEMOB_APPKEY_VALUE: "***",
UMENG_APPKEY_VALUE: "***",
START_BACKGROUND : "@style/Splash_Theme",
app_icon: "@mipmap/ic_launcher"]
buildConfigField("String", "BUGLY_ID", '"***"')
signingConfig signingConfigs.release
}
release {//
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
//
applicationVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith('.apk')) {
// apk : _ _ .apk
def fileName = "${variant.productFlavors[0].name}_v${defaultConfig.versionName}_${releaseTime()}.apk"
output.outputFile = new File(outputFile.parent, fileName)
}
}
}
}
}
aaptOptions {
additionalParameters "--no-version-vectors"
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
...
그 중에서 주목해야 할 것은 세 가지 부분:defaultConfig {},buildTypes {},productFlavors {} 이 세 부분은 모두 응용 프로그램 Id, 아이콘과 appname를 설정할 수 있지만 우선순위가 다르다.우선 순위는 다음과 같습니다.
buildTypes > productFlavors > defaultConfig
AndroidManifest를 설정합니다.xml의 속성은 manfestPlaceholders를 통해 설정할 수 있으며, 서로 다른 장면의 상수는buildConfigField를 통해 설정할 수 있으며, 자원의 인용은resValue를 통해 설정할 수 있다.
1. 다른 app 아이콘을 설정합니다.
1. 안드로이드 매니페스트에서.xml에서 icon의 속성 값을 ${app icon} (으)로 수정
".core.global.UserApplication"
android:allowBackup="true"
android:icon="${app_icon}"
android:label="@string/app_name"
android:largeHeap="true"
android:supportsRtl="true"
android:theme="@style/AppTheme">
......
</application>
2. 앱에서.gradle 파일 아래 "${app icon}"의 appicon의 값을 설정합니다.아래와 같다
manifestPlaceholders = [app_icon: "@mipmap/ic_launcher"]
주의: 일반적인 속성이면defaultConfig에서 설정할 수 있습니다.서로 다른 속성은 제품Flavors나buildTypes(debug 또는release 설정)를 통해 설정합니다.3. 컴파일링이 오타라면 다음과 같은 문장을 추가할 수 있다.
lintOptions {
checkReleaseBuilds false
// Or, if you prefer, you can continue to check for errors in release builds,
// but continue the build even when errors are found:
abortOnError false
}
2. 서로 다른 앱 이름 설정
1. strings에 주석을 달다.xml의 appname의 자원
<resources>
<string name="ToastError"> , string>
<string name="sava_success"> string>
resources>
2. 앱에서.gradle 파일에서 app 설정name의 자원
resValue "string", "app_name", "app "
3. 서로 다른 응용 프로그램 Id 수정
1. 안드로이드 매니페스트에서.xml에서 수정된 패키지의 이름은 ${applicationId}입니다. 아래와 같습니다.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.edt.edtdoctor">
<permission
android:name="${applicationId}.permission.JPUSH_MESSAGE"
android:protectionLevel="signature"/>
<uses-permission android:name="${applicationId}.permission.JPUSH_MESSAGE"/>
<application
android:name=".core.global.UserApplication"
android:allowBackup="true"
android:icon="${app_icon}"
android:label="@string/app_name"
android:largeHeap="true"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".section.entry.controller.activity.StartActivity"
android:theme="${START_BACKGROUND}">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
intent-filter>
activity>
<meta-data
android:name="${applicationId}.GlideModule"
android:value="GlideModule"/>
<meta-data
android:name="UMENG_APPKEY"
android:value="${UMENG_APPKEY_VALUE}"/>
<meta-data
android:name="UMENG_CHANNEL"
android:value="${UMENG_CHANNEL_VALUE}"/>
<meta-data
android:name="DOMAIN_PACKAGE_NAME"
android:value="${applicationId}"/>
<meta-data
android:name="EASEMOB_APPKEY"
android:value="${EASEMOB_APPKEY_VALUE}"/>
<meta-data
android:name="JPUSH_CHANNEL"
android:value="developer-default"/>
<meta-data
android:name="JPUSH_APPKEY"
android:value="${JPUSH_APPKEY_VALUE}"/>
application>
2. 앱에서.gradle 파일에서 서로 다른 채널에 따라 제품Flavors에서 설정하면 다음과 같다.
productFlavors {
huawei {
applicationId "com.edt.***"
}
develop {
applicationId "com.edt.***"
}
4. 기타 제3자 appkey의 설정, 참고 appicon의 설정 방식만 있으면 됩니다.
위의 설정을 완료한 후 Build > Generate Signed APK를 통해 서명을 선택한 후 다른 채널을 선택하여 포장할 수 있습니다.debug 상태에서 테스트를 진행하려면, 관련 코드를 buildTypes의 debug {}에 복사하면 됩니다.
주:위에 잘못된 곳이 있으면 고쳐 주십시오.
참고 자료:
Gradle 다중 채널 패키지(동적 설정 App 이름, 응용 아이콘, 상수 교체, 패키지 이름 변경, 채널 변경) 안드로이드--Gradle 소감, 변수, 다중 채널, 일부 구덩이는Gradle을 사용하여 여러 개의 서로 다른 응용 프로그램 Id 패키지를 구축한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Groupie의 ViewHolder를 사용해 보았습니다.Groupie는 Android의 recycler-view를 쉽게 사용할 수있는 라이브러리이지만 groupie-databinding은 deprecated되었습니다. 이번에는 권장되는 (Poi) groupie-viewb...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.