日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android配置build.gradle解锁更高逼格玩法(多版本共存、分服务器打包等)

發(fā)布時間:2025/4/16 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android配置build.gradle解锁更高逼格玩法(多版本共存、分服务器打包等) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

背景

在日常的AndroidAPP開發(fā)過程中,常常需要在同一設(shè)備上安裝同一APP的多個版本。如在沒有測試設(shè)備的情況下需要使用到個人設(shè)備進行測試,而該設(shè)備已安裝正式版本且有大量緩存數(shù)據(jù)。applicationId作為Android對APP的唯一識別,同一applicationId僅能在一個設(shè)備上出現(xiàn)一次,這時就需要對APP進行多版本共存處理。

分析

Android在對于APP安裝時,會首先校驗applicationId是否已在設(shè)備上存在。

  • 若不存在則直接安裝;
  • 若已存在且VersionCode>=當(dāng)前APP版本,則會提示覆蓋安裝;
  • 若已存在且VersionCode<當(dāng)前APP版本,則會提示安裝失敗。 同一項目在同一設(shè)備上運行多個版本時,需對applicationId進行處理,在AndroidStudio和Gradle未出現(xiàn)時,在eclipse下的常規(guī)操作是新建分支,通過改項目包名實現(xiàn),此方法改動很大,每個類的package都要去改動。如今有了Gradle,采用Groovy語言,可以更簡便地去配置項目。
  • Gradle是一個基于Apache Ant和Apache Maven概念的項目自動化構(gòu)建開源工具。它使用一種基于Groovy的特定領(lǐng)域語言(DSL)來聲明項目設(shè)置,拋棄了基于XML的各種繁瑣配置。--來自百度百科

    我只抓住了一點,“拋棄了基于XML的各種繁瑣配置”

    代碼

    1.建版本 首先,我們需要在APP的build.gradle中,buildTypes下建版本。

    buildTypes {release {...}debug {debuggable true...}dev {...}...} 復(fù)制代碼

    這里的版本,可以建無數(shù)多個,但debug下一定要寫

    debuggable true 復(fù)制代碼

    這樣AndroidStudio才能區(qū)分RunApp操作時調(diào)試的是哪一個版本。寫完之后,在Build-->Generate Signed APK中,BuildType就能去選擇對應(yīng)的版本了。

    2.改Id applicationIdSuffix可以很輕松地執(zhí)行類似修改包名稱的操作,原理是在defaultConfig的applicationId后面拼接內(nèi)容。例如在debug版本下:

    buildTypes {...debug {applicationIdSuffix ".debug"debuggable true...}...} } 復(fù)制代碼

    同理,若需要存在N個版本,則在建立N個版本后,添加applicationIdSuffix屬性即可。如:

    buildTypes {...debug {applicationIdSuffix ".debug"debuggable true...}dev {applicationIdSuffix ".dev"...}...dev_n {applicationIdSuffix ".dev_n"...}...} } 復(fù)制代碼

    做完以上兩步,如果沒有配置provider的話,多版本已經(jīng)可以共存。但Android7.0以后,如果要使用一些權(quán)限的話,provider是必須的。

    3.provider provider也是唯一的。這時候強大的Groovy再次登場。

    buildTypes {release {manifestPlaceholders = [PROVIDER: "${defaultConfig.applicationId}.fileprovider"]}debug {applicationIdSuffix ".debug"manifestPlaceholders = [PROVIDER: "${defaultConfig.applicationId}.debug.fileprovider"]debuggable true} } 復(fù)制代碼

    注:${defaultConfig.applicationId}就是我們在defaultConfig中配置的,

    同時,需要在manifest中替換authorities

    <providerandroid:name="android.support.v4.content.FileProvider"android:authorities="${PROVIDER}"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/filepaths" /> </provider> 復(fù)制代碼

    4.APP名 我感覺。。。你可能還需要在設(shè)備上區(qū)分版本

    buildTypes {release {manifestPlaceholders = [APP_NAME: "HelloWorld", PROVIDER: "${defaultConfig.applicationId}.fileprovider"]}debug {applicationIdSuffix ".debug"manifestPlaceholders = [APP_NAME: "HelloWorld測試版", PROVIDER: "${defaultConfig.applicationId}.debug.fileprovider"]debuggable true}dev {manifestPlaceholders = [APP_NAME: "HelloWorld開發(fā)版", PROVIDER: "${defaultConfig.applicationId}.dev.fileprovider"]}... } 復(fù)制代碼

    同時替換manifest中,application標(biāo)簽下的android:lable

    <applicationandroid:name=".application.MyApplication"android:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="${APP_NAME}"android:supportsRtl="true"android:theme="@style/AppTheme"tools:replace="android:icon,android:label,android:theme">... <application/> 復(fù)制代碼

    注:tools:replace這個屬性最好加上,我之前沒加,編譯不通過。

    綜上所述,如果想替換manifest中的任何配置,則需在manifestPlaceholders中,以key-value形式編寫字段,同時在manifest中以

    ${key-name} 復(fù)制代碼

    的形式調(diào)用就ok了,同理我們還能夠替換icon和其他例如阿里云推送的key等等。

    5.服務(wù)器地址 嗯,是的,這個也是可以替換的。原理是替換BuildConfig中對應(yīng)字段。 BuildConfig路徑

    app\build\generated\source\buildConfig\PACKAGE_NAME\android\buildType

    //正式環(huán)境 def SERVER_URL_RELEASE = "\"http://release.com/\"" //開發(fā)環(huán)境 def SERVER_URL_DEBUG = "\"http://debug.com/\""buildTypes {release {buildConfigField "String", "SERVER_URL", "${SERVER_URL_RELEASE}"...}debug {applicationIdSuffix ".debug"buildConfigField "String", "SERVER_URL", "${SERVER_URL_DEBUG}"debuggable true...}... } 復(fù)制代碼

    首先定義服務(wù)器地址String,并在對應(yīng)的位置指明

    "字段類型","要替換的字段名","字段"

    在常量文件(通常習(xí)慣性為Constants.java)中

    public static final String SERVER_URL = BuildConfig.SERVER_URL; 復(fù)制代碼

    只要字段名和字段類型能夠?qū)?yīng),替換這些都是可以實現(xiàn)的。

    6.APK自動命名 我們希望在打包時自動命名格式,例如:xxx_v1.2.3.apk,可在android目錄下寫上

    android.applicationVariants.all { variant ->variant.outputs.all {outputFileName = "xxx_v${defaultConfig.versionName}.apk"} } 復(fù)制代碼

    不僅如此,build.gradle文件還有其他玩法供大家解鎖,希望能集思廣益、不吝分享。

    轉(zhuǎn)載于:https://juejin.im/post/5c887b3c6fb9a049e82c613c

    總結(jié)

    以上是生活随笔為你收集整理的Android配置build.gradle解锁更高逼格玩法(多版本共存、分服务器打包等)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。