Android Studio 1.0 và lỗi “Các dự án thư viện không thể đặt applicationId”


109

Sau khi cập nhật Android Studio lên 1.0, tôi thấy lỗi này:

Lỗi: Các dự án thư viện không thể đặt applicationId. applicationId được đặt thành 'com.super.app' trong cấu hình mặc định.

Tôi đã cập nhật plugin Gradle như được đề xuất nhưng tôi không hiểu cách khắc phục điều này.

Câu trả lời:


208

Dựa trên thông tin này :

ApplicationId trong Dự án Thư viện

Bạn không thể sử dụng applicationId để tùy chỉnh gói của một dự án thư viện. Tên gói phải được cố định trong các dự án thư viện (và được chỉ định là packageName trong tệp kê khai). Plugin Gradle đã không thực thi hạn chế này trước đó.

Xóa biến applicationId khỏi build.gradletệp của thư viện sẽ giải quyết được sự cố.


Cảm ơn, bạn đã đưa tôi đến đúng hướng. Tôi đã thêm một câu trả lời giải thích vấn đề "hương vị" mà tôi gặp phải.
Seraphim's

1
@Joel: Tôi đã chuyển đổi mô-đun thành một thư viện, nhưng tôi không thể tìm thấy ApplicationId để xóa. ApplicationId không phải là dr trong tệp build.gradle. bạn có thể cho tôi biết tôi có thể tìm thấy nơi tôi có thể tìm thấy trong Android studio 1.0.1 không
kumar

Mặc dù liên kết này có thể trả lời câu hỏi, nhưng tốt hơn hết bạn nên đưa các phần thiết yếu của câu trả lời vào đây và cung cấp liên kết để tham khảo. Chỉ liên kết câu trả lời có thể trở thành không hợp lệ nếu trang liên kết thay đổi
Nerdroid

62

Cảm ơn Joel vì câu trả lời chính xác của anh ấy: Tôi chỉ cần xóa 1 dòng khỏi .gradletệp te :

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

trở thành

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

và AndroidManifest.xml của tôi

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

Đây là giải pháp phù hợp nếu bạn không cần đổi tên gói ứng dụng của mình. Để đổi tên nó, bạn cần sử dụng "mùi vị":

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

Quá tệ là không thể kiểm tra hai câu trả lời vì bạn đã bao gồm một ví dụ mà Joel nên có.
Androidcoder

1
Nếu tôi xóa dòng applicationID, Tôi có thể xuất bản trong cửa hàng Play của nó không? (Ý tôi là cập nhật) Vì sẽ không có id ứng dụng cho google play.
gurkan stack

1
@gurkanstack nếu bạn xóa dòng trong tệp Gradle, không gian tên được xác định trong AndroidManifest.xml "gói" sẽ được sử dụng cho bản sao.
Seraphim's

1

Chỉ cần nó giúp một số người:

Khi tôi nhập một dự án nhật thực vào android studio, tôi gặp lỗi ::

"Lỗi: Id ứng dụng và ứng dụng thử nghiệm không được giống nhau"

Mặc dù lạ, nhưng tôi đã xem xét build.gradle và tìm thấy hai trình giữ chỗ, một cho ứng dụng và một cho ứng dụng thử nghiệm.

Tôi đã xóa testApplicationId khỏi đó như được đề xuất trong bài đăng này và điều này đã giúp tôi giải quyết vấn đề.

Lưu ý: Lời giải thích này không liên quan đến các lỗi được đăng trong câu hỏi này, nhưng có thể giúp ích cho ai đó đang gặp lỗi tương tự.


0

Bạn không thể xác định applicationId cho lib của mình. Nhưng trong trường hợp bạn muốn sử dụng mã định danh trong tệp xây dựng của mình, mã này sẽ cung cấp cho bạn, tên gói thư viện của bạn, bạn có thể xác định một biến cho mô-đun và sau đó sử dụng giá trị theo yêu cầu.

ví dụ: Library's build.gradle

apply plugin: 'com.android.library'

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

Ngoài ra, bạn có thể sử dụng giá trị bên dưới nếu cần trong chính tệp xây dựng của bạn trong lib.

android {
compileSdkVersion 28

defaultConfig {
    minSdkVersion 21
    targetSdkVersion 28
    versionCode 1
    versionName "$libraryVersion"
    resValue "string", "Library", libraryGroupId"
 }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.