注意:本篇文章是本人阅读相关文章的总结,方便以后查阅,所有内容非原创,侵权删。
本篇文章内容来自于
1.Android第一行代码 郭霖
2.相对应的知识块的最下方会给出原来的帖子的链接
目录
- 最外层目录下的build.gradle文件
- app目录下的build.gradle文件
--2.1 Android Studio3.0中dependencies依赖由compile变为implementation/api的区别
--2.2 versionCode和versionName
项目中有两个build.gradle文件。
一个在最外层目录下,一个在app目录下。两个文件对构建AS项目都起到了至关重要的作用。
1. 最外层目录下的build.gradle文件
通常情况不用修改这个文件中的内容。除非添加一些全局的项目构建的配置
buildscript { //构建脚本
//两处repositories都有jcenter()
//jcenter是一个代码托管仓库,很多Android开源项目都会选择将代码托管到jcenter上。
//进行了这行声明后,我们就可以在项目中轻松引用任何jcenter上的开源项目了。
repositories { //仓库
google()
jcenter()
}
dependencies { //依赖
//使用classpath声明了一个Gradle插件。
//为什么要声明这个插件呢?因为Gradle并不是专门为构建Android项目而开发的。java C++等多个项目都可以使用Gradle来创建。
//如果我们想用他来构建项目,则必须声明这个插件
classpath 'com.android.tools.build:gradle:3.0.1'
}
}
allprojects {
repositories { //仓库
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
2. app目录下的build.gradle文件
apply plugin: 'com.android.application'
//应用了一个插件
//两种值可以选 com.android.application(表示这是一个应用程序模块) 和 com.android.library(表示这是一个库模块)
//应用程序模块和库模块最大的区别:前者可以直接运行,后者只能作为代码库依附于别的应用程序模块来运行。
android { //android闭包 可以用来配置项目构建的各种属性
compileSdkVersion 26 //指定项目的编译版本 24就是使用Android 7.0系统的SDK编译
buildToolsVersion "26.0.2" //指定项目构建工具的版本 有更新版本系统会自动提示?
defaultConfig { //可以对项目的更多细节进行配置
applicationId "com.example.apple.systemdemo1" //指定项目的包名(创建时设置,后期修改则在这里修改)
minSdkVersion 15 //指定项目最低兼容的Android系统版本,15表示最低兼容到Android4.0系统
targetSdkVersion 26 //targetSdkVersion表示你在该目标版本上已经做过了充分的测试。系统将会为你的应用程序启用一些最新的功能和特性。
//比如Android6.0系统引入了运行时权限这个功能,将targetSdkVersion指定成23或者更高,那么系统会启动运行时权限。
//但如果你将targetSdkVersion指定成22 那么说明你的程序最高只在Android5.1系统上做过充分的测试。Android6.0系统中引入的新功能自然不会启用。
versionCode 1 //用于指定项目版本号
versionName "1.0" //用于指定项目的版本名
//versionCode和versionName在生成安装文件时特别重要
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
//buildTypes闭包用于指定生成安装文件的相关配置
//通常只会有2个子闭包,一个是debug 一个是release
//debug包用于指定生成测试版安装文件的配置 release闭包用于指定生成正式版安装文件的配置
//debug包可以忽略不写。
//通过AS直接运行项目生成的都是测试文件
buildTypes {
release {
minifyEnabled false //用于指定是否对项目的代码进行混淆 true表示混淆 false表示不混淆
//proguardFiles用于指定混淆时使用的规则文件
//这里指定了2个 proguard-android.txt是AndroidSDK目录下的tools/proguard的,里面是所有项目通用的混淆规则
//proguard-rules.pro是当前项目根目录下的,里面可以编写当前项目特有的混淆规则
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
//dependencies闭包可以指定当前项目所有的依赖关系
//通常AS项目有三种依赖方式:本地依赖+库依赖+远程依赖
//本地依赖可以对本地的jar包或者目录添加依赖关系
//库依赖可以对项目中的库模块添加依赖关系
//远程依赖则可以对jcenter库上的开源项目添加依赖关系
dependencies {
//本地依赖声明 表示将libs目录下的所有.jar后缀的文件都添加到项目的构建路径中
implementation fileTree(dir: 'libs', include: ['*.jar'])
//远程依赖 com.android.support是域名(用于和其他公司的库作区分) appcompat-v7是组名称(用于和同一个公司中不同的库作区分) 26.1.0是版本号(用于对同一个库中不同的版本作区分)
//加上远程依赖的声明后:Gradle会在构建项目时先检查以下本地是否已经有这个库的缓存,没有则自动联网下载,然后添加到项目的构建目录中。
implementation 'com.android.support:appcompat-v7:26.1.0'
//库依赖 compile project +要依赖的库的名称 比如一个库模块叫helper 则为compile project(':helper')
//testImplementation是用于声明测试用例库的
testImplementation 'junit:junit:4.12'
}
2.1 Android Studio3.0中dependencies依赖由compile变为implementation/api的区别
//3.0之前
compile fileTree(dir: 'libs', include: ['*.jar'])
//3.0之后
implementation fileTree(dir: 'libs', include: ['*.jar'])
或
api fileTree(dir: 'libs', include: ['*.jar'])
在3.0版本中,compile 指令被标注为过时方法,而新增了两个依赖指令,一个是implementation和api,这两个都可以进行依赖添加
推荐:依赖首先应该设置为implementation的,如果没有错,那就用implementation,如果有错,那么使用api指令,这样会使编译速度增快。
api和implements的区别:
api 完全等同于compile指令
implementation 将该依赖隐藏在内部,而不对外部公开。则对该项目有依赖的项目将无法访问到使用该命令编译的依赖中的任何程序。好处是编译速度会加快。
比如:A用implements依赖gson库,B又依赖A,此时B无法直接使用gson库。
来自/具体参考:Android Studio3.0中dependencies依赖由compile变为implementation的区别
2.2 versionCode和versionName
versionCode 1 //用于指定项目版本号
versionName "1.0" //用于指定项目的版本名
VersionCode只能输入整形,
VersionName输入随意,可为"1.6.0",也可以为"两只老虎,两只老虎"。
Google为APK定义了两个关于版本属性:VersionCode和VersionName,他们有不同的用途。
VersionCode:对消费者不可见,仅用于应用市场、程序内部识别版本,判断新旧等用途。
VersionName:展示给消费者,消费者会通过它认知自己安装的版本
重要结论:
1.不同版本的VersionCode一定要不一样,否则应用市场不会让你通过审核。目测,各种应用市场都是通过VersionCode来判断是否提醒用户更新的。
2.VersionName一般取成方便理解的标识。1.2.0明显比1.1.1的版本要新。而我们普通人也习惯了这种记录版本的方式。
命名规则:
VersionName-------
常见软件版本号的形式是major.minor.maintenance.build
major是主版本号,一般在软件有重大升级时增长
minor是次版本号,一般在软件有新功能时增长
maintenance是维护版本,一般在软件有主要的问题修复后增长
build构建版本(测试版本一般会用到)
正式版本:major.minor.maintenance----1.0.0
测试版本:major.minor.maintenance.build----1.0.0.5
VersionCode-------
我公司以5位数的 int 来表示 (每次升级版本时,versioncode的值都要比以前的值要大)
正式版本:major.minor.maintenance----1.0.0(versioncode:10000)
测试版本:major.minor.maintenance.build----1.0.0.5(versioncode:10005)
从manifest读取versionName的代码
PackageManager pm = context.getPackageManager();
PackageInfo pi;
String versionName = "";
try {
pi = pm.getPackageInfo(context.getPackageName(), 0);
versionName = pi.versionName;
} catch (NameNotFoundException e) {
e.printStackTrace();
}
具体参考/来自
android中的VersionCode和VersionName到底有什么区别
Android APP VersionCode和VersionName命名规则VersionName的命名规则