1. 程式人生 > >AS入門(一)

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" />

其中url指向的是自己的原始碼路徑。如:
        <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\options

mac下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"
    }