Android Studio 開發使用總結
阿新 • • 發佈:2019-01-27
apply plugin: 'com.android.application' //獲取local.properties的內容 Properties properties = new Properties() properties.load(project.rootProject.file('local.properties').newDataInputStream()) android { compileSdkVersion 19 buildToolsVersion "25.0.2" // 使用簽名檔案進行簽名的兩種方式 //第一種:使用gradle直接簽名打包,配置keystore簽名 signingConfigs { release { keyAlias '1.0' keyPassword 'huyu' storeFile file('E:/Studio_備份/xx/xx上傳/xx.keystore') storePassword 'huyu' // v2SigningEnabled false //禁用V2簽名模式,V2簽名模式僅在7.0以上可以安裝,減少APP安裝過程時間和更多的保護機制 // 或者使用面板簽名的時候,勾選V1,V2可以相容各個版本 } debug { keyAlias 'androiddebugkey' keyPassword 'android' storeFile file('E:/Studio_備份/debug-keystore/huyu-debug.keystore') storePassword 'android' } } //第二種:為了保護簽名檔案,把它放在local.properties中並在版本庫中排除,不把這些資訊寫入到版本庫中(注意,此種方式簽名檔案中不能有中文) // signingConfigs { // config { // keyAlias properties.getProperty("keystroe_keyAlias") // keyPassword properties.getProperty("keystroe_keyPassword") // storeFile file(properties.getProperty("keystroe_storeFile")) // storePassword properties.getProperty("keystroe_storePassword") // } // } defaultConfig { applicationId "com.huyu.test" minSdkVersion 15 targetSdkVersion 19 versionCode 20170505 versionName "2.04.170505" // dex突破65535的限制 // 第一步: // multiDexEnabled true // 第二步: 在dependencies 新增依賴 // compile 'com.android.support:multidex:1.0.0' // 第三步: // Application繼承一下MultiDexApplication即可。 } //遮蔽lint的嚴格檢查 lintOptions { abortOnError false disable 'MissingTranslation' // 防止在釋出的時候出現因MissingTranslation導致Build Failed! // checkReleaseBuilds false // 為了解決多個manifest中相同activity重複註冊的問題(主要是用在多渠道配置不同的manifest檔案) } //配置編譯的jdk版本 // compileOptions { // sourceCompatibility JavaVersion.VERSION_1_7 // targetCompatibility JavaVersion.VERSION_1_7 // } /** 報 Duplicate files copied in APK META-INF/DEPENDENCIES File 1: xxx.jar File 2: xxx.jar 貌似說兩個包裡面的檔案重複了*/ // packagingOptions { // exclude 'META-INF/DEPENDENCIES' // exclude 'META-INF/NOTICE' // exclude 'META-INF/LICENSE' // exclude 'META-INF/LICENSE.txt' // exclude 'META-INF/NOTICE.txt' // } //打包配置debug模式下,使用正式版簽名,此操作主要為了方便除錯微信,新浪等第三方登入授權 buildTypes { release { minifyEnabled true shrinkResources true //2.2版本該功能無法使用(必須和 minifyEnabled true 一起使用) proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' signingConfig signingConfigs.release } debug { zipAlignEnabled false //預設是true, 只有顯示配置為true時,才會生成unaligned.apk minifyEnabled false //不啟用混淆 shrinkResources false //預設是false, true為刪除無用資源 signingConfig signingConfigs.debug //不配置簽名項,會生成無簽名的apk // 動態在 BuildConfig.java 新增欄位,在Java程式碼中呼叫 BuildConfig.FLAG_LOG // buildConfigField "boolean", "FLAG_LOG", "true" // buildConfigField "String", "API_HOST", "\"http://api.huyu.com\"" // 字串變數 } } // 引用了 aar 資源1:需要加上下面這句;2.需要在 dependences 中加上 compile (name:'aar檔名', ext:'aar') repositories { flatDir { dirs 'libs' } } // sourceSets { // baidu { // // 設定不同的 AndroidManifest 檔案 // // 一定要寫相對路徑,將原始manifest中的內容copy到為每個包單獨配置的manifest中去, // // 1.刪除 AndroidManifest_baidu.xml 中配置包名的程式碼,因為已經在gradle.build中配置過了,不能重複配置 // // 2.在AndroidManifest_baidu.xml 中 application 標籤下新增 tools:replace="android:label,android:icon"(具體可以參考報錯資訊) // manifest.srcFile 'src/baidu/AndroidManifest_baidu.xml' // java.srcDirs = ['src/baidu/java'] // res.srcDirs = ['src/baidu/res'] // assets.srcDirs = ['src/baidu/assets'] // } // } //配置多版本的apk, 需要在終端執行 gradlew assembleRelease 將生成不同渠道的release版apk //不同的Flavor若需要對應不同的資原始檔或者程式碼或者AndroidManifest.xml檔案,均可以在src下簡歷對應flavor的資料夾,再覆蓋資源即可。 //注意:覆蓋資源的路徑要與main下面路徑一致 productFlavors{ baidu { applicationId "com.huyu.baidu" //替換包名 // 動態在 BuildConfig.java 新增欄位, 引用: BuildConfig.isGooglePlay buildConfigField "boolean", "isGooglePlay", "false" buildConfigField "String", "XIAOMI_APPID", '"你自己的key"' buildConfigField "String", "XIAOMI_APPKEY", '"你自己的key"' // 替換配置檔案中的 ${app_name} 等佔位符(${applicationId} 除外) manifestPlaceholders = [ // app_icon: "@mipmap/ic_launcher", app_name : "@string/app_name", JPUSH_APPKEY : "你自己的key", XIAOMI_APPID : "你自己的key", XIAOMI_APPKEY : "你自己的key" ] // resValue 動態在res/value/目錄下根據第一個引數如 strings.xml 新增欄位,所以新增前不能存在同名欄位 // bools.xml 新增欄位,所以新增前不能存在同名欄位 // 在java程式碼中獲取這裡的配置屬性: context.getResources().getString(R.string.isGooglePlayVersion); // resValue("string" , "app_name","xx") // resValue("bool" , "isGooglePlay", 'false') } google { applicationId "com.huyu.gplay" buildConfigField "boolean", "isGooglePlay", "true" buildConfigField "String", "XIAOMI_APPID", '"你自己的key"' buildConfigField "String", "XIAOMI_APPKEY", '"你自己的key"' manifestPlaceholders = [ app_name : "@string/app_name_gplay", JPUSH_APPKEY : "你自己的key", XIAOMI_APPID : "你自己的key", XIAOMI_APPKEY : "你自己的key" ] } } //這裡修改apk檔名 android.applicationVariants.all { variant -> variant.outputs.each { output -> def outputFile = output.outputFile if (outputFile != null && outputFile.name.endsWith('.apk')) { def fileName = "huyu_${variant.productFlavors[0].name}" + "_V${defaultConfig.versionName}" + "_${releaseTime() }.apk" output.outputFile = new File(outputFile.parent, fileName) } } } /**一般大多數是出現在圖片上,.jpg修改成了.png就會出現這個問題*/ aaptOptions { cruncherEnabled = false useNewCruncher = false } } // 定義一個打包時間 def releaseTime() { return new Date().format("yyyy-MM-dd", TimeZone.getTimeZone("UTC")) } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile(name: 'BDUpdateSDK', ext: 'aar') } 在專案根目錄的 local.properties 中 新增如下資訊(可以隱藏keystrore資訊) #對應自己實際的證書路徑和名字,在這裡由於簽名檔案是放在app目錄下,因為沒有寫絕對路徑。 keystroe_storeFile=E\:/Studio/keystore/huyu.keystore keystroe_storePassword=huyu keystroe_keyAlias=1.0 keystroe_keyPassword=huyu