1. 程式人生 > >Android一套程式碼打不同的包工程配置詳解_上-gradle基本知識介紹

Android一套程式碼打不同的包工程配置詳解_上-gradle基本知識介紹

有這樣一個場景:一個專案正在開發,後來領導說有另外一個專案跟當前專案很像,只要在上面改些東西就可以了,然後你一聽立刻把程式碼複製一份在上面改,改完以後領導又說要加一些功能,兩個專案都要加,累死累活做完以後領導又說,後面可能還會有第三個專案,只需要在上面改點東西就可以了, 並且後面加功能這三個專案都要,是不是很崩潰?這該怎麼辦?有沒有一種簡單的方法只需要配置一下就可以了? 答案是有的,請看:

一、gradle配置要求

	ownCompile project(path: '':carddesk_module'', configuration: ''ownRelease'')
	voresCompile project(path: '':carddesk_module'', configuration: ''voresRelease'')

      當我們使用compile來引用包,或者如上使用它的變種來引用包的時候,gradle會有一些版本限制,否則就會報錯:

(1)首先找到gradle/wrapper/gradle-wrapper.properties,雙擊開啟,替換gradle版本為:  distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip

(2)開啟根目錄下的build.gradle檔案,把沒有翻牆的話把google()註釋掉,否則會報錯,把classpath的3.2.0版本換成2.3.3版本 如下:

buildscript {
    
    repositories {
//        google()
        jcenter()
    }
    dependencies {
//        classpath ''com.android.tools.build:gradle:3.2.0''
        classpath ''com.android.tools.build:gradle:2.3.3''

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
//        google()
        jcenter()
    }
}

(3)gradle高版本建立的工程不需要顯示的指定buildToolsVersion "25.0.3",現在我們把它降低了, 所以要手動把它加上,否則會報沒有指定buildToolsVersion的錯誤。

二、配置工程簽名檔案

1、建立簽名檔案,然後把簽名檔案放到工程中的app目錄下:

2、然後在android {}下面新增如下程式碼,注意順序,指令碼程式碼從上至下執行,如果signingConfigs和buildTypes寫反了則buildTypes裡面debug中的sigingConfigs.release中的release就找不到了,新增好以後同步gradle

signingConfigs {
    release {
        keyAlias ''dongjie''         // key別名
        keyPassword ''dongjie''      // 別名密碼
        storeFile file(''proj_aos_key.jks'')         // 簽名檔案路徑
        storePassword ''dongjie''                   // 簽名檔案密碼
    }
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile(''proguard-android.txt''), ''proguard-rules.pro''
        debuggable true
        signingConfig signingConfigs.release
    }
    debug {
        signingConfig signingConfigs.release
    }
}

如下圖在工程中Signing裡面就可以看見配置資訊了

3、上面實現以後,我們就可以來回切換debug和release了 

如果工程中有分享微信的功能,那這時候執行安裝的就是簽名過得,不必刻意去簽名來測試分享微信功能。 

但是注意一個問題,debug和release來回切的時候有可能release會報錯,這樣設定一下就好了:

三、multiDexEnable true 和 平臺支援

1、隨著公司業務不斷的變多, 工程中的程式碼會越來越多,到一定程度的時候執行程式碼直接崩潰, 查原因發現是某個類找不到。在android5.0之前,每一個android應用中只會含有一個dex檔案,但是因為Android系統本身的BUG,使得這個dex的方法數量被限制在65535之內,這就是著名的”64K(641024)事件。 如何解決呢? 請看下圖,只需要加一行程式碼就可以了突破64k限制了, 由於篇幅原因,這裡只給解決方案

 

2、經常會碰到這樣一種情況,我們每次引用的第三方庫裡面的so包含很多個平臺,armeabi、x86、mips、armeabi-v7a等,這樣打包後發現體積特別大,有沒有一種辦法能讓包小一點呢? 請看上圖, 有一種方式可以設定我們支援的平臺,其他的會直接被忽略, 這樣就減小了包的體積,大多數手機現在是arm架構,模擬器是x86架構,所以只需要支援這兩個就可以了。

四、一些設定

1、lintOptions

lintOptions {
    checkReleaseBuilds false     // true 如果有崩潰停止構建, false不停止
    abortOnError false           // true錯誤發生停止gradle構建, false錯誤發生不停止gradle構建
}

將上面兩個選項設定為false, 這兩個選項作用是在打包的時候不會因為一些莫名其妙的問題中斷gradle,導致包打不出來。

如果想檢視更多的lintOptions配置,請看:https://blog.csdn.net/berber78/article/details/60766091

2、dex方法超過64k限制和gradle編譯oom問題解決:

dexOptions {
    javaMaxHeapSize "4g"
    jumboMode = true
}

3、引用aar檔案

android {
    repositories {
        flatDir {    // 指定aar路徑
            dirs ''libs''
        }
    }
}

dependencies {
    compile(name: ''lyx-library-1.0.3'', ext: ''aar'')
}