rc4android
⑴ android studio的gradle里的東西怎麼用
Gradle是可鬧遲以用於Android開發的新一代的 Build System, 也是 Android Studio默認的build工具。
Gradle腳本是基於一種JVM語言 -- Groovy,再加上DSL(領域特定語言)組成的。
因為Groovy是JVM語言,所以可以使用大部分的java語言庫。所謂DSL就是專門針對Android開發的插件,比如標准Gradle之外的一些新的方法(Method)、閉包(Closure)等。
由於Gradle的語法足夠簡潔,而且可以使用液芹李大部分的java包,當之無愧地成為新一代 Build System。
使用Android Studio新建一個工程後,默認會生成兩個build.gralde文件,一個位於工程根目錄,一個位於app目錄下。還有另外一個文件 --settings.gradle。
根目錄下的腳本文件是針對mole的全局配置,它的作用閾所包含的所有 mole 是通過settings.gradle來配置。
app文件夾就是一個mole,如果在當前工程中添加了一個新的mole -- lib,就需要在settings.gralde文件中包含這個新的mole。
gradle腳本的基本結構
用我現在的工程舉例來說,根目錄的build.gradle的內容如下所示:
// Top-level build file where you can add configuration options common to all sub-projects/moles.
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:1.0.0-rc4'
// NOTE: Do not place your application dependencies here; they belong
// in the indivial mole build.gradle files
}
}
allprojects {
repositories {
jcenter()
maven {
url 'http://mvnrepo.xxx.com/mvn/repository'
}
}
}
classpath 'com.android.tools.build:gradle:1.0.0-rc4'就是Android特有的插件,maven倉庫位於通過方法jCenter() 獲取,這也是默認的maven倉庫。當然也可以首鬧添加額外的maven倉庫地址,例如以上文件中的
maven {
url 'http://mvnrepo.xxx.com/mvn/repository'
}
然後是 settings.gradle 文件:
include ':app'
app就是項目包含的一個mole,如果有多個mole,可以在為 include 方法添加多個參數。
最後是app/build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.1"
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
defaultConfig {
applicationId "your.application.id"
minSdkVersion 14
targetSdkVersion 21
versionCode 2
versionName "2.0.0"
}
signingConfigs {
release {
storeFile file('release.keystore')
storePassword "yourstorepassword"
keyAlias "yourkeyalias"
keyPassword "yourkeypassword"
}
debug {
storeFile file('debug.keystore')
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
debug {
signingConfig signingConfigs.debug
}
}
proctFlavors {
inner {
applicationId "your.application.inner.id"
versionName "2.0.0"
}
market {
}
}
}
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
// 通用
compile name: 'volley', ext: 'aar'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3'
compile 'com.alibaba:fastjson:latest.integration'
// 項目相關(已刪除)
}
Groovy 的基本語法
方法調用
apply plugin: 'com.android.application'
以上語句中的apply是一個方法,給它傳遞了一個參數plugin,plugin 的值是'com.android.application'。
如果有多個參數,則以逗號隔開,例如
compile name: 'volley', ext: 'aar'
閉包
Groovy中花括弧包含的部分成為一個閉包(Closure)。例如下面的代碼
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
compileOptions 是一個 Method, 它的參數是一個閉包,這個閉包內依次執行了兩個方法 -- sourceCompatibility 和targetCompatibility, 參數都是JavaVersion.VERSION17。
閉包也可以嵌套包含
repositories {
flatDir {
dirs 'libs'
}
}
常見使用方法
包依賴(aar)
使用aar時可以分為兩種情況
① aar位於本地目錄
首先在 android 的參數閉包中添加調用方法 repositories
repositories {
flatDir {
dirs 'libs'
}
}
然後在 dependencies 的參數閉包中添加
compile name: 'volley', ext: 'aar'
② aar位於遠程倉庫
這里以maven為例,當然也可以使用其他類型的倉庫,例如 Ivy。
只需要在jar包引用方式後面添加一個@aar就可以了
compile 'com.alibaba:fastjson:latest.integration@aar'
包依賴(jar)
compile group: 'com.alibaba', mole: 'fastjson', version: 'latest.integration'
可以簡寫成
compile 'com.alibaba:fastjson:latest.integration'
latest.integration可以替換成具體的版本號,這里是獲取伺服器上的最新版本。
去掉重復依賴
compile 'com.alibaba.fastjson.latest.integration' {
exclude mole: 'annotations', group: 'com.google.android'
}
使用 Java7
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
proctFlavors
針對不同的APP分發渠道,我們可以定義不同的 proct flavor。也可以定義內部版本和外部版本,內部版本中包含了一些調試代碼,這些代碼在發布時並不會被編譯進最後的APP中。而且可以分別為內部版本和外部版本指定不同的ApplicationId,這樣在同一個設備上可以同時安裝兩個版本以方便調試。
命令行執行Gradle腳本
在Android工程根目錄下會自動生成一個shell腳本 - gradlew,執行之前記得加上x屬性 - chomod +x gradlew
gradle腳本中包含了很多 task,可以通過task名來指定需要執行的task。
./gradlew build./gradlew assemble./gradlew assembleInnderDebug
總結
不得不說,Gradle實在太好用了!雖然 Gradle 可以與 Ant 或 maven 配合使用,但是其簡潔和功能性遠遠超過其他兩個。我現在開發的項目普遍使用的是 maven,不知道什麼原因,使用Gradle時經常會遇到一些無法獲取遠程依賴包的問題,最簡單的解決辦法就是把依賴包下載的本地。
⑵ 安卓http和https的區別
HTTPS()安全超文本傳輸協議它是一個安全通信通道,它基於HTTP開發,用於在客戶計算機和伺服器之間交換信息。它使用安全套接字層(SSL)進行信息交換,簡單來說它是HTTP的安全版。它是由Netscape開發並內置於其瀏覽器中,用於對數據進行壓縮和解壓操作,並返回網路上傳送回的結果。HTTPS實際上應用了Netscape的安全全套接字層(SSL)作為HTTP應用層的子層。(HTTPS使用埠443,而不是象HTTP那樣使用埠80來和TCP/IP進行通信。)SSL使用40位關鍵字作為RC4流加密演算法,這對於商業信息的加密是合適的。HTTPS和SSL支持使用X.509數字認證,如果需要的話用戶可以確認發送者是誰。HTTPS和HTTP的區別:https協議需要到ca申請證書,一般免費證書很少,需要交費。http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議http和https使用的是完全不同的連接方式用的埠也不一樣,前者是80,後者是443。http的連接很簡單,是無狀態的HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網路協議要比http協議安全HTTPS解決的問題:1.信任主機的問題.採用https的server必須從CA申請一個用於證明伺服器用途類型的證書.改證書只有用於對應的server的時候,客戶度才信任次主機.所以目前所有的銀行系統網站,關鍵部分應用都是https的.客戶通過信任該證書,從而信任了該主機.其實這樣做效率很低,但是銀行更側重安全.這一點對我們沒有任何意義,我們的server,採用的證書不管自己issue還是從公眾的地方issue,客戶端都是自己人,所以我們也就肯定信任該server.2.通訊過程中的數據的泄密和被竄改1.一般意義上的https,就是server有一個證書.a)主要目的是保證server就是他聲稱的server.這個跟第一點一樣.b)服務端和客戶端之間的所有通訊,都是加密的.i.具體講,是客戶端產生一個對稱的密鑰,通過server的證書來交換密鑰.一般意義上的握手過程.ii.加下來所有的信息往來就都是加密的.第三方即使截獲,也沒有任何意義.因為他沒有密鑰.當然竄改也就沒有什麼意義了.2.少許對客戶端有要求的情況下,會要求客戶端也必須有一個證書.a)這里客戶端證書,其實就類似表示個人信息的時候,除了用戶名/密碼,還有一個CA認證過的身份.應為個人證書一般來說上別人無法模擬的,所有這樣能夠更深的確認自己的身份.b)目前少數個人銀行的專業版是這種做法,具體證書可能是拿U盤作為一個備份的載體.HTTPS一定是繁瑣的.a)本來簡單的http協議,一個get一個response.由於https要還密鑰和確認加密演算法的需要.單握手就需要6/7個往返.i.任何應用中,過多的roundtrip肯定影響性能.b)接下來才是具體的http協議,每一次響應或者請求,都要求客戶端和服務端對會話的內容做加密/解密.i.盡管對稱加密/解密效率比較高,可是仍然要消耗過多的CPU,為此有專門的SSL晶元.如果CPU信能比較低的話,肯定會降低性能,從而不能serve的請求.ii.加密後數據量的影響.所以,才會出現那麼多的安全認證提示