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'')
}