AS入門(一)
刪除Module
方法一:右鍵所要刪除的module --> Open module Settings (或f12)--> 選中要刪除的module-->點左上角紅色橫線。
方法二:開啟project下的settings.gradle,刪除自己要移除的module對應的名字,在同步gradle(AS上面會彈出一橫條,後面有選項)
經過上述兩個方法後,再在Module列表中選中要刪除的module,會發現有delete選項。注意:此時的delete是直接連硬碟中的檔案也一起刪除,上面的兩個方法只是將選中的Module從module列表中移除,並不會刪除它們在硬碟中的檔案
新增module
如果要將project下的某個應用新增成module,可以按刪除module中的方法二,將該應用名寫在setting.gradle檔案中。
新增library module
在adt中可以為某個project新增lib project。同樣,在as中可以為某個module新增它所依賴的module。
建立library module
同新建普通的module一樣,只不過第一步中要選擇下圖黃框中的選項。如下:
建立後,可以發現project下的module列表為:
對比其中的普通modult和lib module可發現,兩者的圖片不一樣。普通的module是一個手機,而lib module卻像是一個柱狀圖。
關聯lib module
開啟project structure(選中相應的module,按f12,或者右鍵->open module settings)。然後按下圖進行操作:
第一步:選中要新增lib module的module,點選右邊選項卡中的dependencies,再點選最右邊的綠色十字, 最後在下拉框中根據實際情況選擇要新增的lib(因為這裡是新增lib module,所以直接選擇最後一個。在彈出的對話方塊中選中自己要新增的lib module,點選ok即可)。
第四步中,第一個選項是用來關聯一些非libs目錄下的檔案,它裡面有一些已經寫好的常用lib module,如:gson,nine old androids,或者一些support包等。第二個選項用來關係當前module中libs目錄下的jar包。
刪除關聯的lib module
大致同關聯時一樣,只不過在第3步的綠十字下面有個紅色減號。在2下面的列表中選中要刪除的,然後點選減號即可。
通過修改build.gradle操作
當然上面的刪除和關聯可以通過直接修改相應的module的build.gradle進行。具體見下面的"module下的gradle"。
通過project structure操作和通過修改build.gradle操作效果是一樣的,只不過前者是圖形化介面,後者是通過程式設計實現而已。
project下gradle說明
在預設情況下gradle在C:\Users\使用者名稱\.gradle\wrapper\dists目錄下。如果想配置gradle,可以下載好gradle壓縮包,解壓到某一資料夾,然後File->Settings(或者用快捷鍵ctrl+alt+s),然後搜尋gradle,再進行配置。
module下的gradle
示例為:
apply plugin: 'com.android.application'
android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
defaultConfig {
minSdkVersion 8
targetSdkVersion 19
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile project(":lib")//Module dependency
compile 'com.android.support:appcompat-v7:19.0.1'// Remote binary dependency
compile fileTree(dir: 'libs', include: ['*.jar'])// Local binary dependency
}
其中defaultConfig為module提供一些核心的配置,並且會被動態地新增到清單檔案中。同時,defaultConfig中的配置會覆蓋掉清單檔案中相同的配置。如:想更改versionCode,只修改清單檔案中是沒有用的(預設時清單檔案也沒有該配置),必須修改defaultConfig中的versionCode的值才行。buildTypes:控制元件怎樣編譯和打包自己的app應用。在預設時,編譯系統中有兩種編譯型別:debug和release。平時用adt進行打包時都會指定一個簽名檔案,此時生成的就是release版本。在用adt進行打包時,經常會混淆程式碼。而minifyEnabled控制打包時對程式碼是否進行混淆,proguardFiles是混淆的配置檔案。這裡同adt中類似。
作用於混淆的檔案一共有兩個,proguard-android.txt和proguard-rules.pro。前者是在sdk中,定義了一些基本的混淆規則,如果想對當前的module進行別的混淆操作,就應用配置在後一個檔案中。每一個module下都會有一個該檔案。
dependencies:宣告該module的依賴jar包或者lib module。compile project(":**")指所要依賴的lib module,其中**指lib module的名稱。如上面所演示的,如果關聯了lib module後,這句話就變成
compile project(":mylibrary")
如果刪除這句話,就相當於刪除了該module對mylibrary的依賴。compile 'com.android.support:appcompat-v7:19.0.1'該方法是用來關聯遠端支援庫的(不懂啥意思),在上面通過介面關聯lib module時,如果在最後一步選擇了第一項,那麼gradle中就會出現跟此句類似的語句。猜測:是用來關聯非本地libs目錄下的庫,比如support之類。此處還是通過關聯lib module中介面化進行操作較好。
compile fileTree:本地libs下的庫。寫法固定。這句話就是告訴編譯系統,將<moduleName>/libs目錄下的jar包需要被打包進apk中。
project下的gradle
一個Project下有一個gradle資料夾,settings.gradle和build.gradle。
settings.gradle:用於配置該project下的module。
build.gradle:它裡面的classpath值指的是<as目錄安裝>\gradle\m2repository\com\android\tools\build\gradle中的值。如:該目錄下有1.1.0資料夾,那麼這裡的值便是com.android.tools.build:gradle:1.1.0,也就是最後一個冒號後的值與其中的某一個資料夾對應。
上傳到svn
將studio專案上傳到svn上,一般要忽略掉下面的內容檔案和資料夾
.gradle
.idea
build
local.properties
.gitignore
*.iml
忽略原則1. 檢查Project目錄和Module目錄,其他目錄下不檢查
2. 必須保留原始碼目錄,Android原始碼目錄有src libs
3. 除了.gradle忽略,其他所有名字包含gradle字樣的目錄和檔案全部保留
4. 其他全部可以忽略
引用.so檔案
將c/c++編譯生成的包含.so資料夾armeabi,x86,armeabi-v7a等資料夾複製到libs目錄下。同時在該module的build.gradle下新增 sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
這句話是放在android{}下的。as關聯原始碼
mac
有時候開啟所有的方法,全部是throw new RuntimeException("Stub");。解決辦法為:開啟/Library/Preference/AndroidStudioxxx/options/jdk.table.xml檔案。在該檔案的所有<sourcePath>下新增上
<root type="simple" url="file://$USER_HOME$/android/sdk/source/android-xx" />
<sourcePath>
<root type="composite">
<root type="simple" url="jar:///Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/src.zip!/" />
<root type="simple" url="jar:///Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/javafx-src.zip!/" />
<root type="simple" url="file://$USER_HOME$/android/sdk/source/android-22" />
</root>
</sourcePath>
window
在window下,與mac下的操作類似,只不過jdk.table.xml檔案所在的位置為:系統盤:\Users\使用者名稱\.AndroidStudio***\config\optionsmac下gradle位置
Applications/Android Studio(雙擊,顯示包內容)/Contents/gradle/m2repository/com/android/tools/build/gradle,該資料夾下會有一些gradle版本,選擇一個最新版的,將project/build.gralde中的classpath最後的數字改成最新版即可。
/Applications/Android Studio.app/Contents/gradle資料夾下,還有一個gradle-**的目錄(記其中的*為A)。再開啟自己的project下的gradle/wrapper下的gradle.properties,將其中的distributionUrl屬性值中的gradle-**-all.zip(記其中的*為B),並將B改成A即可。
編譯報OOM
將gradle升級到2.0.0,studio也升級到2.0時,編譯原來的專案報OOM錯誤。解決辦法為,在module的build.gradle的android{}下加入:
dexOptions {
incremental true
javaMaxHeapSize "2g"
}