自定義Android Studio工程模板

??每次創(chuàng)建新的Android Studio工程時(shí),都需要手動(dòng)修改一些工程的配置,比如刪除不必要的依賴(lài)、刪掉Activity中不必要的代碼
配置私有maven庫(kù)的地址、增加公用的依賴(lài)庫(kù)、修改.gitingore、關(guān)閉lint的嚴(yán)格檢查、配置APK的輸出路徑等等;項(xiàng)目比較少還好,如果項(xiàng)目比較多,并且還不斷有新人加入時(shí),就可以考慮修改Android Studio默認(rèn)的project和module模板,避免做無(wú)用功和口口相傳。

工程模板路徑

??Android Studio的工程模板在安裝目錄的“\plugins\android\lib\templates\gradle-projects”文件夾下,這里面包含了導(dǎo)入工程模板、新建工程模板、新建module模板等。

gradle_project_template

提醒

??修改前一定要備份,避免修改模板后導(dǎo)致新建project和module異常的情況(親身經(jīng)歷,出現(xiàn)這樣的情況你會(huì)很煩躁的);

模板文件說(shuō)明

NewAndroidProject模板

NewAndroidProject

NewAndroidModule模板

NewAndroidModule

修改Android Studio工程模板

??對(duì)工程模板中的每個(gè)文件和文件夾有一定的了解后,就可以按照自己的意愿修改模板中的內(nèi)容了,如何修改得根據(jù)自己的需求而定,舉個(gè)栗子,修改module的build.gradle模板(Android Studio\plugins\android\lib\templates\gradle-projects\NewAndroidModule\root\build.gradle.ftl),通常我們不需要依賴(lài)單元測(cè)試,去掉對(duì)單元測(cè)試的依賴(lài),屏蔽lint的嚴(yán)格檢查、并配置好APK的輸出路徑:

<#if !(perModuleRepositories??) || perModuleRepositories>
buildscript {
    repositories {
        jcenter()
<#if mavenUrl != "mavenCentral">
        maven {
            url '${mavenUrl}'
        }
</#if>
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:${gradlePluginVersion}'
    }
}
</#if>
<#if isLibraryProject?? && isLibraryProject>
apply plugin: 'com.android.library'
<#else>
apply plugin: 'com.android.application'
</#if>
<#if !(perModuleRepositories??) || perModuleRepositories>

repositories {
        jcenter()
<#if mavenUrl != "mavenCentral">
        maven {
            url '${mavenUrl}'
        }
</#if>
}
</#if>

android {
    compileSdkVersion <#if buildApiString?matches("^\\d+$")>${buildApiString}<#else>'${buildApiString}'</#if>
    buildToolsVersion "${buildToolsVersion}"

    defaultConfig {
    <#if isLibraryProject?? && isLibraryProject>
    <#else>
    applicationId "${packageName}"
    </#if>
        minSdkVersion <#if minApi?matches("^\\d+$")>${minApi}<#else>'${minApi}'</#if>
        targetSdkVersion <#if targetApiString?matches("^\\d+$")>${targetApiString}<#else>'${targetApiString}'</#if>
        versionCode 1
        versionName "1.0"
    }
<#if javaVersion?? && (javaVersion != "1.6" && buildApi lt 21 || javaVersion != "1.7")>

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_${javaVersion?replace('.','_','i')}
        targetCompatibility JavaVersion.VERSION_${javaVersion?replace('.','_','i')}
    }
</#if>
<#if enableProGuard>
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
</#if>

    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']
        }
    }
    
    // 屏蔽lint的嚴(yán)格檢查
    lintOptions {
        abortOnError false
    }
}

dependencies {
    <#if dependencyList?? >
    <#list dependencyList as dependency>
    compile '${dependency}'
    </#list>
    </#if>
    // 在這里刪掉對(duì)單元測(cè)試的依賴(lài),如果需要依賴(lài)公用控件,直接在這里添加
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

repositories {
    flatDir() {
        dirs 'libs'
    }
}

// 刪掉沒(méi)有簽名的APK文件,同時(shí)在這里也可以配置APK文件的輸出路徑
android.applicationVariants.all { variant ->
  variant.assemble.doLast {
    variant.outputs.each { output ->
        println "aligned " + output.outputFile
        println "unaligned " + output.packageApplication.outputFile

        File unaligned = output.packageApplication.outputFile;
        File aligned = output.outputFile
        if (!unaligned.getName().equalsIgnoreCase(aligned.getName())) {
            println "deleting " + unaligned.getName()
            unaligned.delete()
        }
    }
  }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容