Android Studio 1.0 та помилка "Бібліотечні проекти не можуть встановити applicationId"


109

Після оновлення Android Studio до 1.0 я бачу цю помилку:

Помилка: бібліотечні проекти не можуть встановити applicationId. У налаштуваннях за замовчуванням applicationId встановлено на "com.super.app".

Я оновив плагін Gradle, як було запропоновано, але не зрозумів, як це виправити.

Відповіді:


208

На основі цієї інформації :

ApplicationId у бібліотечних проектах

Ви не можете використовувати applicationId для налаштування пакету бібліотечного проекту. Ім'я пакета має бути зафіксовано в бібліотечних проектах (і вказано як макет пакету в маніфесті). Плагін Gradle раніше не застосовував це обмеження.

Видалення змінної applicationId з build.gradleфайлу бібліотеки повинно вирішити проблему.


Спасибі, ви ведете мене в потрібному напрямку. Я додав відповідь, яка пояснює проблему "аромату" у мене.
Серафима

1
@Joel: я перетворив модуль у бібліотеку, але я не в змозі знайти ApplicationId для видалення. ApplicationId не є dr у файлі build.gradle. ви можете сказати мені, де я можу знайти в Android studio 1.0.1
kumar

Хоча це посилання може відповісти на питання, краще включити сюди суттєві частини відповіді та надати посилання для довідки. Відповіді лише на посилання можуть стати недійсними, якщо пов’язана сторінка зміниться
Nerdroid

62

Дякую Джоелю за його правильну відповідь: мені потрібно видалити лише 1 рядок із .gradleфайлу:

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

стає

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

і мій AndroidManifest.xml

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

Це правильне рішення, якщо вам не потрібно перейменовувати назву пакета свого додатка. Щоб перейменувати його, потрібно використовувати "ароматизатори":

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

Дуже погано два відповіді неможливо перевірити, оскільки ви включили приклад, який повинен мати Джоел.
Androidcoder

1
Якщо я видалю рядок applicationID, чи можу я публікувати в ньому магазин Play? (Я маю на увазі оновлення), оскільки для google play не буде ідентифікатора програми.
gurkan stack

1
@gurkanstack якщо ви видалите рядок у файлі Gradle, простір імен, визначений у AndroidManifest.xml "пакет", буде використовуватися для публікації.
Серафима

1

Просто обкладіть, що це допомагає комусь:

Коли я імпортував проект затемнення в студію Android, у мене з’явилася помилка:

"Помилка: ідентифікатор програми та тестовий додаток не можуть бути однаковими"

Дивно, але я заглянув у build.gradle і виявив два заповнювачі, одного для програми та іншого для тестаплікації.

Я видалив testApplicationId з того, що пропонується в цій публікації, і це допомогло мені вирішити проблему.

Примітка. Це пояснення не пов’язане з помилками, розміщеними в цьому запитанні, але може допомогти тому, хто отримує подібну помилку.


0

Ви не можете визначити applicationId для своєї lib. Але якщо ви хочете використовувати ідентифікатор у вашому файлі збірки, який дасть вам назву вашого бібліотечного пакета, ви можете визначити змінну для модуля, а потім використовувати необхідне значення.

наприклад: build.gradle бібліотеки

apply plugin: 'com.android.library'

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

Крім того, ви можете використовувати наведене нижче значення за потреби у вашому файлі збірки у lib.

android {
compileSdkVersion 28

defaultConfig {
    minSdkVersion 21
    targetSdkVersion 28
    versionCode 1
    versionName "$libraryVersion"
    resValue "string", "Library", libraryGroupId"
 }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.