1. 程式人生 > >Android Studio 開發使用總結

Android Studio 開發使用總結

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