簡體   English   中英

使用Gradle組裝時如何更改Android應用程序包名稱?

[英]How to change the Android app package name when assembling with Gradle?

是否可以使用 Gradle 更改 Android 應用程序的包名稱?

我需要編譯同一個應用程序的兩個副本,有一個唯一的包名(所以我可以向市場發布兩次)。

作為在 Ethan's answer 中使用產品風味的更簡單替代方法,您還可以自定義構建類型

如何在這些方法之間進行選擇:

  • 如果您需要不同的包名稱才能在設備上安裝調試發布apk,請使用下面的構建類型方法,正如Gradle 插件文檔所同意的那樣 在這種情況下,口味是一種矯枉過正。 (我認為默認情況下所有項目都應該這樣做,因為它會讓生活更輕松,尤其是您發布到商店並正在開發新功能之后。)
  • 產品風味有許多有效用途,典型的例子是具有免費和付費版本的應用程序。 在這種情況下,請查看Ethan 的回答並閱讀文檔: 配置 Gradle 構建Gradle 插件用戶指南

(您也可以將這兩種方法結合起來,這會導致每個構建變體都具有不同的包名稱。)

構建類型配置

對於調試構建類型和所有其他非發布類型,定義將添加到默認包名稱的applicationIdSuffix (在Android Gradle 插件版本 0.11之前,此設置稱為packageNameSuffix 。)

android {
    buildTypes {
        debug {
            applicationIdSuffix '.debug'
            versionNameSuffix '-DEBUG'
        }

        beta {
            applicationIdSuffix '.beta'
            versionNameSuffix '-BETA'

            // NB: If you want to use the default debug key for a (non-debug) 
            // build type, you need to specify it:
            signingConfig signingConfigs.debug 
        }

        release {
            // signingConfig signingConfigs.release
            // runProguard true
            // ...
        }

    }
}

上面, debugrelease是默認構建類型,它們的某些方面是配置的,而beta是完全自定義的構建類型。 要構建不同的類型,請像往常一樣使用assembleDebugassembleBeta等。

同樣,您可以使用versionNameSuffix來覆蓋 AndroidManifest 中的默認版本名稱(我覺得這非常有用!)。 例如“0.8”→“0.8-BETA”,如上配置。

資源:

我自己到目前為止,我一直在使用productFlavors來實現這個確切目的,但似乎構建類型自定義可能更接近我的需求,而且它使構建配置更簡單。

更新(2016 年) :從那以后,我在所有項目中都使用了這種方法,我認為這絕對是要走的路。 我也將它包含在 Futurice 的Android 最佳實踐指南中。

你可以這樣

android {
    ...

    defaultConfig {
        minSdkVersion 8
        versionCode 10
    }

    flavorDimensions "flavor1", "flavor2"

    productFlavors {
        flavor1 {
            applicationId "com.example.flavor1"
            versionCode 20
        }

        flavor2 {
            applicationId "com.example.flavor2"
            minSdkVersion 14
        }
    }
}

如果您想進行一次性構建,您還可以更改android.defaultConfig.applicationId字段。

取自: http : //tools.android.com/tech-docs/new-build-system/user-guide#TOC-Product-Flavor-Configuration

使用 1.0.0+ 的 gradle 插件版本,您必須使用遷移指南中所述的applicationId

ProductFlavors 中的重命名屬性

包名 => 應用程序 ID

因此,在您的 build.gradle 中,您現在將使用:

productFlavors {
   flavor1 {
      applicationId "com.example.flavor1"
   }

   flavor2 {
      applicationId "com.example.flavor2"
   } 
}

從 Ethan 的回答來看,flavorGroups 和 packageName 都不再可用。 以下作品截至 2015 年 3 月。

android {
...

defaultConfig {
    minSdkVersion 8
    versionCode 10
}

flavorDimensions "flavor"

productFlavors {
    flavor1 {
        flavorDimension "flavor"
        applicationId "com.example.flavor1"
        versionCode 20
    }

    flavor2 {
        flavorDimension "flavor"
        applicationId "com.example.flavor2"
        minSdkVersion 14
    }
}
}

我不想使用 Flavors,所以我找到了一種使用 buildTypes 的方法。 我通過如下更改我的app/build.gradle文件來做到這一點:

defaultConfig {
        applicationId "com" // See buildTypes.type.applicationIdSuffix
        ...
    }

    ...

    buildTypes {
        debug {
            applicationIdSuffix ".domain.name.debug"
            ...
        }
        releaseStaging {
            applicationIdSuffix ".compagny.staging"
            ...
        }
        release {
            applicationIdSuffix ".domain.name"
            ...
        }
    }

這允許我在我的設備上有 3 個彼此相鄰的應用程序。

我希望這對其他人有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM