注意:本篇文章是本人閱讀相關(guān)文章的總結(jié)锉试,方便以后查閱扛禽,所有內(nèi)容非原創(chuàng),侵權(quán)刪艘儒。
本篇文章內(nèi)容來自于
1.Android第一行代碼 郭霖
2.相對應(yīng)的知識塊的最下方會給出原來的帖子的鏈接
目錄
- 最外層目錄下的build.gradle文件
- app目錄下的build.gradle文件
--2.1 Android Studio3.0中dependencies依賴由compile變?yōu)閕mplementation/api的區(qū)別
--2.2 versionCode和versionName
項(xiàng)目中有兩個(gè)build.gradle文件赞赖。
一個(gè)在最外層目錄下甜害,一個(gè)在app目錄下。兩個(gè)文件對構(gòu)建AS項(xiàng)目都起到了至關(guān)重要的作用卑硫。
1. 最外層目錄下的build.gradle文件
通常情況不用修改這個(gè)文件中的內(nèi)容徒恋。除非添加一些全局的項(xiàng)目構(gòu)建的配置
buildscript { //構(gòu)建腳本
//兩處repositories都有jcenter()
//jcenter是一個(gè)代碼托管倉庫,很多Android開源項(xiàng)目都會選擇將代碼托管到j(luò)center上欢伏。
//進(jìn)行了這行聲明后入挣,我們就可以在項(xiàng)目中輕松引用任何jcenter上的開源項(xiàng)目了。
repositories { //倉庫
google()
jcenter()
}
dependencies { //依賴
//使用classpath聲明了一個(gè)Gradle插件硝拧。
//為什么要聲明這個(gè)插件呢径筏?因?yàn)镚radle并不是專門為構(gòu)建Android項(xiàng)目而開發(fā)的。java C++等多個(gè)項(xiàng)目都可以使用Gradle來創(chuàng)建障陶。
//如果我們想用他來構(gòu)建項(xiàng)目滋恬,則必須聲明這個(gè)插件
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'
//應(yīng)用了一個(gè)插件
//兩種值可以選 com.android.application(表示這是一個(gè)應(yīng)用程序模塊) 和 com.android.library(表示這是一個(gè)庫模塊)
//應(yīng)用程序模塊和庫模塊最大的區(qū)別:前者可以直接運(yùn)行,后者只能作為代碼庫依附于別的應(yīng)用程序模塊來運(yùn)行抱究。
android { //android閉包 可以用來配置項(xiàng)目構(gòu)建的各種屬性
compileSdkVersion 26 //指定項(xiàng)目的編譯版本 24就是使用Android 7.0系統(tǒng)的SDK編譯
buildToolsVersion "26.0.2" //指定項(xiàng)目構(gòu)建工具的版本 有更新版本系統(tǒng)會自動(dòng)提示恢氯?
defaultConfig { //可以對項(xiàng)目的更多細(xì)節(jié)進(jìn)行配置
applicationId "com.example.apple.systemdemo1" //指定項(xiàng)目的包名(創(chuàng)建時(shí)設(shè)置,后期修改則在這里修改)
minSdkVersion 15 //指定項(xiàng)目最低兼容的Android系統(tǒng)版本媳维,15表示最低兼容到Android4.0系統(tǒng)
targetSdkVersion 26 //targetSdkVersion表示你在該目標(biāo)版本上已經(jīng)做過了充分的測試酿雪。系統(tǒng)將會為你的應(yīng)用程序啟用一些最新的功能和特性。
//比如Android6.0系統(tǒng)引入了運(yùn)行時(shí)權(quán)限這個(gè)功能侄刽,將targetSdkVersion指定成23或者更高,那么系統(tǒng)會啟動(dòng)運(yùn)行時(shí)權(quán)限朋凉。
//但如果你將targetSdkVersion指定成22 那么說明你的程序最高只在Android5.1系統(tǒng)上做過充分的測試州丹。Android6.0系統(tǒng)中引入的新功能自然不會啟用。
versionCode 1 //用于指定項(xiàng)目版本號
versionName "1.0" //用于指定項(xiàng)目的版本名
//versionCode和versionName在生成安裝文件時(shí)特別重要
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
//buildTypes閉包用于指定生成安裝文件的相關(guān)配置
//通常只會有2個(gè)子閉包,一個(gè)是debug 一個(gè)是release
//debug包用于指定生成測試版安裝文件的配置 release閉包用于指定生成正式版安裝文件的配置
//debug包可以忽略不寫墓毒。
//通過AS直接運(yùn)行項(xiàng)目生成的都是測試文件
buildTypes {
release {
minifyEnabled false //用于指定是否對項(xiàng)目的代碼進(jìn)行混淆 true表示混淆 false表示不混淆
//proguardFiles用于指定混淆時(shí)使用的規(guī)則文件
//這里指定了2個(gè) proguard-android.txt是AndroidSDK目錄下的tools/proguard的吓揪,里面是所有項(xiàng)目通用的混淆規(guī)則
//proguard-rules.pro是當(dāng)前項(xiàng)目根目錄下的,里面可以編寫當(dāng)前項(xiàng)目特有的混淆規(guī)則
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
//dependencies閉包可以指定當(dāng)前項(xiàng)目所有的依賴關(guān)系
//通常AS項(xiàng)目有三種依賴方式:本地依賴+庫依賴+遠(yuǎn)程依賴
//本地依賴可以對本地的jar包或者目錄添加依賴關(guān)系
//庫依賴可以對項(xiàng)目中的庫模塊添加依賴關(guān)系
//遠(yuǎn)程依賴則可以對jcenter庫上的開源項(xiàng)目添加依賴關(guān)系
dependencies {
//本地依賴聲明 表示將libs目錄下的所有.jar后綴的文件都添加到項(xiàng)目的構(gòu)建路徑中
implementation fileTree(dir: 'libs', include: ['*.jar'])
//遠(yuǎn)程依賴 com.android.support是域名(用于和其他公司的庫作區(qū)分) appcompat-v7是組名稱(用于和同一個(gè)公司中不同的庫作區(qū)分) 26.1.0是版本號(用于對同一個(gè)庫中不同的版本作區(qū)分)
//加上遠(yuǎn)程依賴的聲明后:Gradle會在構(gòu)建項(xiàng)目時(shí)先檢查以下本地是否已經(jīng)有這個(gè)庫的緩存所计,沒有則自動(dòng)聯(lián)網(wǎng)下載柠辞,然后添加到項(xiàng)目的構(gòu)建目錄中。
implementation 'com.android.support:appcompat-v7:26.1.0'
//庫依賴 compile project +要依賴的庫的名稱 比如一個(gè)庫模塊叫helper 則為compile project(':helper')
//testImplementation是用于聲明測試用例庫的
testImplementation 'junit:junit:4.12'
}
2.1 Android Studio3.0中dependencies依賴由compile變?yōu)閕mplementation/api的區(qū)別
//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 指令被標(biāo)注為過時(shí)方法叭首,而新增了兩個(gè)依賴指令,一個(gè)是implementation和api踪栋,這兩個(gè)都可以進(jìn)行依賴添加
推薦:依賴首先應(yīng)該設(shè)置為implementation的焙格,如果沒有錯(cuò),那就用implementation夷都,如果有錯(cuò)眷唉,那么使用api指令,這樣會使編譯速度增快囤官。
api和implements的區(qū)別:
api 完全等同于compile指令
implementation 將該依賴隱藏在內(nèi)部冬阳,而不對外部公開。則對該項(xiàng)目有依賴的項(xiàng)目將無法訪問到使用該命令編譯的依賴中的任何程序党饮。好處是編譯速度會加快摩泪。
比如:A用implements依賴gson庫,B又依賴A劫谅,此時(shí)B無法直接使用gson庫见坑。
來自/具體參考:Android Studio3.0中dependencies依賴由compile變?yōu)閕mplementation的區(qū)別
2.2 versionCode和versionName
versionCode 1 //用于指定項(xiàng)目版本號
versionName "1.0" //用于指定項(xiàng)目的版本名
VersionCode只能輸入整形,
VersionName輸入隨意捏检,可為"1.6.0"荞驴,也可以為"兩只老虎,兩只老虎"贯城。
Google為APK定義了兩個(gè)關(guān)于版本屬性:VersionCode和VersionName熊楼,他們有不同的用途。
VersionCode:對消費(fèi)者不可見能犯,僅用于應(yīng)用市場鲫骗、程序內(nèi)部識別版本,判斷新舊等用途踩晶。
VersionName:展示給消費(fèi)者执泰,消費(fèi)者會通過它認(rèn)知自己安裝的版本
重要結(jié)論:
1.不同版本的VersionCode一定要不一樣,否則應(yīng)用市場不會讓你通過審核渡蜻。目測术吝,各種應(yīng)用市場都是通過VersionCode來判斷是否提醒用戶更新的计济。
2.VersionName一般取成方便理解的標(biāo)識。1.2.0明顯比1.1.1的版本要新排苍。而我們普通人也習(xí)慣了這種記錄版本的方式沦寂。
命名規(guī)則:
VersionName-------
常見軟件版本號的形式是major.minor.maintenance.build
major是主版本號,一般在軟件有重大升級時(shí)增長
minor是次版本號淘衙,一般在軟件有新功能時(shí)增長
maintenance是維護(hù)版本传藏,一般在軟件有主要的問題修復(fù)后增長
build構(gòu)建版本(測試版本一般會用到)
正式版本:major.minor.maintenance----1.0.0
測試版本:major.minor.maintenance.build----1.0.0.5
VersionCode-------
我公司以5位數(shù)的 int 來表示 (每次升級版本時(shí),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到底有什么區(qū)別
Android APP VersionCode和VersionName命名規(guī)則VersionName的命名規(guī)則