Android Studio 1.0 i błąd „Projekty biblioteki nie mogą ustawić applicationId”


109

Po aktualizacji Android Studio do 1.0 widzę ten błąd:

Błąd: projekty biblioteki nie mogą ustawić applicationId. applicationId ma wartość „com.super.app” w domyślnej konfiguracji.

Zaktualizowałem wtyczkę Gradle zgodnie z sugestią, ale nie rozumiałem, jak to naprawić.

Odpowiedzi:


208

Na podstawie tych informacji :

ApplicationId w projektach bibliotecznych

Nie można użyć elementu applicationId, aby dostosować pakiet projektu biblioteki. Nazwa pakietu musi zostać ustalona w projektach bibliotek (i określona jako nazwa_pakietu w manifeście). Wtyczka Gradle nie wymusiła wcześniej tego ograniczenia.

Usunięcie zmiennej applicationId z build.gradlepliku biblioteki powinno rozwiązać problem.


Dzięki, kierujesz mnie we właściwym kierunku. Dodałem odpowiedź, która wyjaśnia mój problem ze „smakiem”.
Seraphim's

1
@Joel: Przekształciłem moduł w bibliotekę, ale nie mogę znaleźć ApplicationId do usunięcia. ApplicationId nie jest dr w pliku build.gradle. czy możesz mi powiedzieć, gdzie mogę znaleźć w Android Studio 1.0.1
kumar

Chociaż ten link może odpowiedzieć na pytanie, lepiej jest zawrzeć tutaj zasadnicze części odpowiedzi i podać link do odniesienia. Odpowiedzi zawierające tylko łącze mogą stać się nieważne, jeśli połączona strona ulegnie zmianie
Nerdroid

62

Dzięki Joelowi za poprawną odpowiedź: muszę usunąć tylko 1 linię z .gradlepliku te :

defaultConfig {
        applicationId "com.super.app"   <---- remove this line
        minSdkVersion 15
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }

staje się

defaultConfig {
        minSdkVersion 15
        targetSdkVersion 19
        versionCode 1
        versionName "1.0"
    }

i mój plik AndroidManifest.xml

 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="com.super.app">
...

To właściwe rozwiązanie, jeśli nie musisz zmieniać nazwy pakietu aplikacji. Aby zmienić jego nazwę, musisz użyć „smaków”:

android {
   ...
   productFlavors {
       flavor1 {
           applicationId 'com.super.superapp'
       }
   }

Szkoda, że ​​dwóch odpowiedzi nie można sprawdzić, ponieważ podałeś przykład, który powinien mieć Joel.
Androidcoder,

1
Jeśli usunę linię applicationID, czy mogę opublikować w niej Sklep Play? (Mam na myśli aktualizację) Ponieważ nie będzie identyfikatora aplikacji dla Google Play.
gurkan stack

1
@gurkanstack Jeśli usuniesz linię w pliku Gradle, przestrzeń nazw zdefiniowana w „pakiecie” AndroidManifest.xml będzie używana do publikacji.
Seraphim's

1

Niech to komuś pomoże:

Kiedy zaimportowałem projekt Eclipse do Android Studio, otrzymałem błąd:

„Błąd: identyfikator aplikacji i aplikacji testowej nie mogą być takie same”

Dziwne, ale zajrzałem do pliku build.gradle i znalazłem dwa symbole zastępcze, jeden dla aplikacji, a drugi dla testapplication.

Usunąłem testApplicationId z tego, jak sugerowano w tym poście, i to pomogło mi rozwiązać problem.

Uwaga: to wyjaśnienie nie jest związane z błędami opublikowanymi w tym pytaniu, ale może pomóc komuś, kto napotyka podobny błąd.


0

Nie możesz zdefiniować applicationId dla swojej biblioteki. Jeśli jednak chcesz użyć identyfikatora w pliku kompilacji, który da ci nazwę pakietu biblioteki, możesz zdefiniować zmienną dla modułu, a następnie użyć wartości zgodnie z wymaganiami.

np .: biblioteka build.gradle

apply plugin: 'com.android.library'

def libraryGroupId = 'com.google.example'
def libraryArtifactId = project.getName()
def libraryVersion = '1.1'

Możesz również użyć poniższej wartości w razie potrzeby w samym pliku kompilacji w lib.

android {
compileSdkVersion 28

defaultConfig {
    minSdkVersion 21
    targetSdkVersion 28
    versionCode 1
    versionName "$libraryVersion"
    resValue "string", "Library", libraryGroupId"
 }
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.