annuaire
- grammaire gradle
- projet détaillé de déploiement
grammaire gradle
Environnement de développement studio Android 3.4.1
5.1.1 version gradle
Qu'est-ce que gradle
Gradle par écrit Android Studio
Écrivez les fichiers suivants dans le projet principal de gradle du module:
Vous entrez les informations suivantes dans le journal de la console:
gradle unifié code de configuration multi-modules
exercice gradle
Préparation: Créer un projet d'application, ce qui rend le projet contient des modules d'applications et modules bibliothèque.
Exigences: unifie les différents modules sont en configuration commune la création d' un nouveau fichier gradle.
étapes:
Dans le répertoire racine du projet, le nouveau fichier de configuration nommé config.gradle, et dans le répertoire racine du projet, l'introduction du profil.
test:
propriétés Declare en config.gradle le nom d'utilisateur. Et le module gradle lirary utilisations attribut nom d'utilisateur, compiler le projet, voir les informations du journal de sortie.
config.gradle文件内容如下:
//添加多个自定义属性,可以使用ext代码块
ext{
username = "zfc"
}
lirarymodule下的build.gradle内容如下:
...
println "${username}"
rootProject.ext.username = 1234
println "${rootProject.ext.username}"
...
Compilez le projet se présente comme suit:
Extraction configuration unifiée
//声明变量
isRelease = true
//打印变量的值
print isRelease
//定义字典
androidId=[
compileSdkVersion:29,
buildToolsVersion:"29.0.2",
applicationId:"com.canjun.components",
minSdkVersion:22,
targetSdkVersion:29,
versionCode:1,
versionName:"1.0"
]
appId = [
"app":"com.canjun.components",
"order":"com.canjun.components.order",
"personal":"com.canjun.components.personal"
]
url = [
debug: "https://10.1.1.1/debug/rest",
release: "https://10.1.1.1/release/rest",
]
supportLirary = "28.0.1"
dependencies = [
appcompat:'androidx.appcompat:appcompat:1.1.0',
constraintlayout:'androidx.constraintlayout:constraintlayout:1.1.3'
]
Utilisation de la configuration unifiée config.gradle
apply plugin: 'com.android.application'
def androidId = rootProject.ext.androidId
def appId = rootProject.ext.appId
def support = rootProject.ext.dependencies
android {
compileSdkVersion androidId.compileSdkVersion
buildToolsVersion androidId.buildToolsVersion
defaultConfig {
applicationId appId.app
minSdkVersion androidId.minSdkVersion
targetSdkVersion androidId.targetSdkVersion
versionCode androidId.versionCode
versionName androidId.versionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
...
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
// implementation 'androidx.appcompat:appcompat:1.1.0'
// implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
// HashMap<String,String> map = new HashMap<>()
support.each{ k,v-> implementation v}
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
jeu d'attributs constant à la buildconfig de classe
buildConfigFiled("String","debug","\"${url.debug}\"")
apply plugin: 'com.android.application'
...
def url = rootProject.ext.url
...
android {
...
buildTypes {
debug{ buildConfigField("String","debug","\"${url.debug}\"")
}
release {
buildConfigField("String","debug","\"${url.release}\"")
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
Résultats: champ de débogage généré dans le module principal répertoire buildconfig (App)
Andrews configuration projet commun gradle
android{
defaultConfig{
...
...
//开启分包
multiDexEnable true
//设置分包配置
multiDexKeepFile file('multidex-config.txt')
//使用svg生成指定纬度的png图片
vectorDrawbles.generatedDensities('xhdpi','xxhdpi')
//使用v7包兼容(5.0以上版本)
vectorDrawbles.useSupportLibrary = true
//只保留指定和默认资源
resConfig("zh-rCN")
//ndk 默认保留架构
ndk{
abiFilters("armeabi","armeabi-v7a")
}
//设置源集属性
sourceSets{
main{
if(!isRelease){
manifest.srcFile ['src/main/AndroidManifest.xml']
java.srcDirs ['src/main/java']
res.srcDirs ['src/main/res']
resources.srcDirs ['src/main/resources']
aidl.srcDirs ['src/main/aidl']
assets.srcDirs ['src/main/assets']
}else{
mainfest.srcFile 'src/main/AndroidManifest.xml'
}
}
}
}
//signingConfigs 的定义一定要放在buildTypes的前面
signingConfigs{
debug{
storeFile file('xxx/xxxx/.android/debug.keystore')
storePassword 'android'
keyAlias 'androiddebugkey'
keyPassword 'android'
}
release{
// 签名证书文件
storeFile file('D:/NetEase/netease.jks')
// 签名证书的类型
storeType "netease"
// 签名证书文件的密码
storePassword "net163"
// 签名证书中密钥别名
keyAlias "netease"
// 签名证书中该密钥的密码
keyPassword "net163"
// 是否开启V2打包
v2SigningEnabled true
}
}
buildTypes{
debug{
signingConfig.debug
}
release{
signingConfig.release
...
}
}
}
//对adb配置
adbOptions{
//操作超时时间为5秒
timeOutInMs = 5 * 1000_0
//adb install选项配置i
installOptions '-r','-s'
}
// 对 dx 操作的配置,接受一个 DexOptions 类型的闭包,配置由 DexOptions 提供
dexOptions {
// 配置执行 dx 命令是为其分配的最大堆内存
javaMaxHeapSize "4g"
// 配置是否预执行 dex Libraries 工程,开启后会提高增量构建速度,不过会影响 clean 构建的速度,默认 true
preDexLibraries = false
// 配置是否开启 jumbo 模式,代码方法是超过 65535 需要强制开启才能构建成功
jumboMode true
// 配置 Gradle 运行 dx 命令时使用的线程数量
threadCount 8
// 配置multidex参数
additionalParameters = [
'--multi-dex', // 多dex分包
'--set-max-idx-number=50000', // 每个包内方法数上限
// '--main-dex-list=' + '/multidex-config.txt', // 打包到主classes.dex的文件列表
'--minimal-main-dex'
]
}
// 执行 gradle lint 命令即可运行 lint 检查,默认生成的报告在 outputs/lint-results.html 中
lintOptions {
// 遇到 lint 检查错误会终止构建,一般设置为 false
abortOnError false
// 将警告当作错误来处理(老版本:warningAsErros)
warningsAsErrors false
// 检查新 API
check 'NewApi'
}
projet détaillé de déploiement
Composants d'importance
différence PhoneModule et Android Libray
PhoneModule存在的配置:
apply plugin: 'com.android.application'
applicationId "com.canjun.components"
AndroidLibrary存在的配置:
apply plugin: 'com.android.library'
applicationId "com.canjun.components"(x)
L'intégration et le composant
L'intégration est un projet, seul un module principal, d'autres modules pour Lirary, ces bibliothèques ne fonctionnera pas seul. Ils doivent fonctionner ensemble et devenir une application du module maître
des moyens projet qu 'un composant du module respectif peuvent être exécutées séparément.
Intégrée pour la production, l'assemblage et de test pour le développement d'un multi-étages, les caractéristiques de très découplés en faveur du développement et de test.
Les composants de la configuration du projet
-
modifier la configuration du module principal gradle
apply plugin: 'com.android.application' def androidId = rootProject.ext.androidId def appId = rootProject.ext.appId def url = rootProject.ext.url def support = rootProject.ext.dependencies def isRelease = rootProject.ext.isRelease android { compileSdkVersion androidId.compileSdkVersion buildToolsVersion androidId.buildToolsVersion defaultConfig { applicationId appId.app minSdkVersion androidId.minSdkVersion targetSdkVersion androidId.targetSdkVersion versionCode androidId.versionCode versionName androidId.versionName testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" buildConfigField("boolean","isRelease",String.valueOf(isRelease)) // multiDexEnable true } buildTypes { debug{ buildConfigField("String","debug","\"${url.debug}\"") } release { buildConfigField("String","debug","\"${url.release}\"") minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) ... support.each{ k,v-> implementation v} implementation project(":common") //主模块不能依赖主模块 if(isRelease){ implementation project(":order") implementation project(":personal") } ... }
-
modification de configuration du module bibliothèque gradle
// 要点一 if(isRelease){ apply plugin: 'com.android.library' }else { apply plugin: 'com.android.application' } def androidId = rootProject.ext.androidId def appId = rootProject.ext.appId def support = rootProject.ext.dependencies android { compileSdkVersion androidId.compileSdkVersion buildToolsVersion androidId.buildToolsVersion defaultConfig { minSdkVersion androidId.minSdkVersion // 要点二 if(!isRelease){ applicationId appId.order } targetSdkVersion androidId.targetSdkVersion versionCode androidId.versionCode versionName androidId.versionName testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles 'consumer-rules.pro' } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) support.each{ k,v -> implementation v} implementation project(":common") testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test.ext:junit:1.1.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' }
3. Effet spectacle
effets centralisés montrent:
effets composants montrent:
assemblage temporaire du développement de code, lorsque l'emballage centralisé dynamiquement isolé
Depuis le développement du composant, écrire un code de moduel localisé de la réponse, mais le code, mais ne gère pas, la valeur par défaut sera emballé dans le module principal. Comme indiqué ci-dessous:
Par conséquent nécessiter un traitement spécial à:
- Configuration gradle, l'isolement de code
- Le code de localisation est stockée en fonction de la configuration gradle
3. Vérifier