Jak zmienić nazwę pakietu aplikacji na Androida podczas składania za pomocą Gradle?

Czy można zmienić nazwę pakietu aplikacji na Androida za pomocą Gradle?

Muszę skompilować dwie kopie tej samej aplikacji, mając unikalną nazwę pakietu (aby móc opublikować na rynku dwa razy).

Author: Jonik, 2013-08-28

5 answers

Można tak coś takiego

android {
    ...

    defaultConfig {
        minSdkVersion 8
        versionCode 10
    }

    flavorDimensions "flavor1", "flavor2"

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

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

Możesz również zmienić pole android.defaultConfig.applicationId, jeśli chcesz wykonać jednorazowe buildy.

Wzięte z: http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Product-Flavor-Configuration

 57
Author: Ethan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-02 08:36:11

Jako prostsza alternatywa dla stosowania smaków produktów podobnie jak w odpowiedzi Ethana , możesz również dostosować typy budowania.

Jak wybrać pomiędzy podejściami:

  • jeśli potrzebujesz różnych nazw pakietów, aby mieć zarówno debug jak i release APK zainstalowane na urządzeniu, użyj poniższego podejścia build type, Jak Gradle plugin docs agree. W tym przypadku smaki są przesadą. (Chyba wszystkie projekty powinny to robić domyślnie, ponieważ ułatwi to życie szczególnie po , które opublikowałeś w sklepie i rozwijasz nowe funkcje.)
  • istnieją ważne zastosowania dla smaków produktów , typowym przykładem jest aplikacja z darmowymi i płatnymi wersjami. W takim przypadku sprawdź odpowiedź Ethana i przeczytaj także dokumentację: Konfigurowanie kompilacji Gradle i Podręcznik Użytkownika wtyczki Gradle.

(przypuszczam, że można również połącz te dwa podejścia, co spowoduje, że każdy wariant kompilacji będzie miał odrębną nazwę pakietu, ale nie testowałem tego.)

Konfiguracja typu budowy

Dla typu debug build oraz wszystkich innych typów Nie-release, zdefiniuj applicationIdSuffix, które zostaną dodane do domyślnej nazwy pakietu. (Przed Android Gradle Plugin Wersja 0.11 to ustawienie było znane jako 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
            // ...
        }

    }
}

Powyżej, debug i release są domyślnymi typami budowania, których niektóre aspekty są skonfigurowane, podczas gdy beta jest całkowicie niestandardowym typem budowania. Aby zbudować różne typy, użyj assembleDebug, assembleBeta, itd, jak zwykle.

Podobnie, możesz użyć versionNameSuffix aby nadpisać domyślną nazwę wersji z AndroidManifest (co uważam za bardzo przydatne!). Np." 0.8 " → "0.8-BETA", jak skonfigurowano powyżej.

Zasoby:

Sam używałem productFlavors do tej pory w tym właśnie celu, ale wydaje się, że dostosowywanie typu build może być bliższe moim potrzebom, plus utrzymuje konfigurację kompilacji prostszą.

Update (2016) : od tego czasu używałem tego podejścia we wszystkich moich projektach i myślę, że zdecydowanie jest to droga do zrobienia. Znalazłem go również w Android Best Practices guide by Futurice.

 68
Author: Jonik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:18

Z wtyczką gradle w wersji 1.0.0+ musisz użyć applicationId zgodnie z instrukcją migracji

Nazwa właściwości w ProductFlavors

Nazwa pakietu = > applicationId

Tak w Twojej budowie.gradle, którego teraz używasz:

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

   flavor2 {
      applicationId "com.example.flavor2"
   } 
}
 10
Author: Amio.io,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55

Z odpowiedzi Ethana wynika, że zarówno flavorgroup, jak i packageName nie są już dostępne. Poniżej działa od marca 2015 roku.

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
    }
}
}
 9
Author: sivag1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-06 03:01:05

Nie chciałem używać smaków, więc znalazłem sposób, aby to zrobić z buildTypes. Zrobiłem to zmieniając mój plik app/build.gradle w następujący sposób:

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

    ...

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

To pozwala mi mieć 3 aplikacje obok siebie na moich urządzeniach.

Mam nadzieję, że to pomoże innym.
 1
Author: Francois Nadeau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-02-19 18:25:41