BuildConfig就是根据build.gradle配置自动生成的
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "com.km.skin";
public static final String BUILD_TYPE = "debug";
public static final String FLAVOR = "";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "1.0";
}
1.root工程下新建extra文件夹 2.将一个module拖进extra文件夹 3.在setting.gradle中将原有的:moduleName改为:extra:moduleName,同步一下, clean ,rebuild
https://github.com/guiying712/AndroidModulePattern
https://github.com/TommyLemon/Android-ZBLibrary
https://github.com/yangguangfu520/BeijingNews_1020
https://flyouting.gitbooks.io/gradle-plugin-user-guide-cn/content/configuring_the_structure.html https://www.jianshu.com/p/cc98a6b4f52e https://www.w3cschool.cn/gradle/ms7n1hu2.html https://docs.gradle.org/3.3/userguide/build_lifecycle.html https://www.jianshu.com/p/8250a5d2e109 https://www.jianshu.com/p/342e0a06116b https://www.jianshu.com/search?q=gradle&page=1&type=note https://developer.android.com/studio/build/index.html#build-process https://developer.android.com/studio/build/build-variants.html
compile被废弃了,而是改成了这两个: //当api接口发生变化时,需要重新编译本module以及所有使用本module的module api:同compile作用一样,即认为本module将会泄露其依赖的module的内容。 //implementation 只编译一个module, 不会改动本module对外暴露的接口 implementation:本module不会通过自身的接口向外部暴露其依赖module的内容。 由此,我们可以明确的告诉gradle去重新编译一个module,若是这个使用的module 的接口发生变化的话。 2.x (3.0+) compileOnly(provided) 只在编译时有效,不会参与打包 apk(runtimeOnly) 只在生成apk的时候参与打包,编译时不会参与,很少用。 testCompile(testImplementation) testCompile 只在单元测试代码的编译以及最终打包测试apk时有效。 debugCompile(debugImplementation) debugCompile 只在debug模式的编译和最终的debug apk打包时有效 releaseCompile(releaseImplementation) Release compile 仅仅针对Release 模式的编译和最终的Release apk打包。
目前最新的8.8.1在studio 3.0上是有问题的,可以降低点版本使用
examples : https://github.com/JetBrains/kotlin-examples/tree/master/gradle
-
using Kotlin, replace annotationProcessor with kapt.
-
classpath 'com.jakewharton:butterknife-gradle-plugin:8.5.1' apply plugin: 'kotlin-kapt' apply plugin: 'com.jakewharton.butterknife' implementation (deps.butterknife){ exclude group: 'com.android.support', module: 'support-compat' } //annotationProcessor deps.butterknife_compiler kapt deps.butterknife_compiler
建一个统一的版本管理versions.gradle
apply from: 'versions.gradle'
先建一个正常的项目,直接建libmodule会有很多问题
在gradle.properties添加了一行代码 isLibaray = false
然后我们在组件的build.gradle文件中读出这行代码:
if (isModule.toBoolean()) {
apply plugin: 'com.android.application'
} else {
apply plugin: 'com.android.library'
}
if(!isLibaray.toBoolean()){
applicationId "com.example.modulepermission"
}
sourceSets {
main {
if (isModule.toBoolean()) {
manifest.srcFile 'src/main/debug/AndroidManifest.xml'
} else {
manifest.srcFile 'src/main/release/AndroidManifest.xml'
//release模式下排除debug文件夹中的所有Java文件
java {
exclude 'debug/**'
}
}
}
}
view database qrcode skin https
download imageload pay share
modulecommon
gradlew :sample:dependencies查看库的依赖树
https://www.jianshu.com/p/a492bf61c0e6
\--- com.jakewharton:butterknife:8.8.1
+--- com.jakewharton:butterknife-annotations:8.8.1
| \--- com.android.support:support-annotations:25.3.0 -> 26.
+--- com.android.support:support-annotations:25.3.0 -> 26.1.0
\--- com.android.support:support-compat:25.3.0 -> 26.1.0 (*)
V4 和 V7 的顶级依赖是 -> 25.1.1
依赖报告中可以看到有些依赖标注了 *号,表示这个依赖被忽略了,
这是因为其他顶级依赖中也依赖了这个传递的依赖,
Gradle 会自动分析下载最合适的依赖。有些依赖形如22.2.1 ->23.1.1
是由于默认会优先版本高的依赖.这个时候你想使用版本低的依赖的话
需要排除掉高的依赖。因此这里需要排除Fresco里面的supportV4依赖。
implementation (deps.butterknife){
exclude group: 'com.android.support', module: 'support-compat'
}
annotationProcessor deps.butterknife_compiler
强制使用某个版本
dependencies {
configurations.all {
resolutionStrategy.eachDependency {
DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
if (!requested.name.startsWith("multidex")) {
details.useVersion ‘25.1.0’
}
}
}
}
}
https://www.jianshu.com/p/d9a823e94fb7
https://blog.csdn.net/yuzhiqiang_1993/article/details/80676170 buildTypes { release { // 这里设置并不生效, 是否需要混淆是跟着主工程的配置来 //minifyEnabled true consumerProguardFiles 'proguard-rules.pro' }
debug {
// 这里设置并不生效, 是否需要混淆是跟着主工程的配置来 //minifyEnabled false consumerProguardFiles 'proguard-rules.pro' } }
proguard优化配置 //proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
https://github.com/material-components/material-components-android