Helpex - Trao đổi & giúp đỡ Đăng nhập
77

Tôi đã điều tra một thời gian và có lẽ đã thấy hầu hết các câu trả lời phổ biến ở đây liên quan đến phụ thuộc aartransitive nhưng bằng cách nào đó tôi vẫn không rõ làm thế nào để làm cho nó hoạt động.

Vì thế:

Tôi có thư viện Android với cấu hình gradle đã cho:

apply plugin: 'android-library'
apply plugin: 'android-maven'

version = "1.0.0"
group = "com.somepackage"

buildscript {
    repositories {
        mavenCentral()
        mavenLocal()
    }

    dependencies {
        classpath 'com.github.dcendents:android-maven-plugin:1.0'
    }
}

android {
    compileSdkVersion 19
    buildToolsVersion '19.0.3'

    defaultConfig {
        minSdkVersion 10
    }
}

repositories {
    maven { url 'http://www.bugsense.com/gradle/' }
}

dependencies {
    provided 'com.google.android.gms:play-services:+'
    provided 'com.android.support:appcompat-v7:+'
    compile 'com.google.code.gson:gson:2.2.4'
    compile 'com.bugsense.trace:bugsense:3.6'
    compile 'commons-net:commons-net:3.3'
}

Sau đó, tôi đang triển khai nó để repo maven địa phương với gradle install. Tệp POM của thư viện được triển khai trông như thế này:

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.sprezzat</groupId>
  <artifactId>app</artifactId>
  <version>1.0.0</version>
  <packaging>aar</packaging>
  <dependencies>
    <dependency>
      <groupId>com.bugsense.trace</groupId>
      <artifactId>bugsense</artifactId>
      <version>3.6</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>commons-net</groupId>
      <artifactId>commons-net</artifactId>
      <version>3.3</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.2.4</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
</project>

Và cuối cùng là cấu hình lớp của ứng dụng Android của tôi bằng cách sử dụng thư viện ở trên như một phụ thuộc:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.9.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
    mavenLocal()
}

android {
    compileSdkVersion 15
    buildToolsVersion "19.0.2"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 18
    }
}

dependencies {
    compile 'com.google.android.gms:play-services:+'
    compile 'com.android.support:appcompat-v7:+'
    compile 'com.somepackage:LIBRARY_NAME:1.0.0@aar'
}

Và sau khi triển khai ứng dụng trên điện thoại, tôi nhận được NoClassDefFoundErrorcác lớp thuộc về phụ thuộc biên dịch của thư viện Android của tôi.

Kiểm tra các phụ thuộc ứng dụng Android của tôi bằng cách sử dụng gradle dependencies:

apk - Classpath packaged with the compiled main classes.
+--- com.google.android.gms:play-services:+ -> 4.3.23
|    \--- com.android.support:support-v4:19.0.1 -> 19.1.0
+--- com.android.support:appcompat-v7:+ -> 19.1.0
|    \--- com.android.support:support-v4:19.1.0
\--- com.somepackage:LIBRARY_NAME:1.0.0

Theo cây trên, tất cả các phụ thuộc bắc cầu không được phát hiện. Vấn đề nằm ở đâu và nên làm thế nào cho đúng?

77 hữu ích 5 bình luận 36k xem chia sẻ
82

Tôi đã giải quyết vấn đề của mình bằng cách đặt transitivethuộc tính cho phụ thuộc aar của mình:

compile ('com.somepackage:LIBRARY_NAME:1.0.0@aar'){
    transitive=true
}
82 hữu ích 5 bình luận chia sẻ
18

bạn không nên sử dụng "@aar", nếu sử dụng "@" trở thành " Ký hiệu chỉ tạo tác ", nếu bạn muốn sử dụng "@" và muốn có sự phụ thuộc chuyển tiếp, bạn nên thêm "transitive = true"

18 hữu ích 1 bình luận chia sẻ
14

Hãy thử điều này nếu bạn đang sử dụng aar cục bộ:

compile(project(:your-library-name)) {
    transitive=true
}
14 hữu ích 5 bình luận chia sẻ
0

Chỉ cần thêm @aar vào cuối phần phụ thuộc là những gì làm việc cho tôi.

dependencies {
    implementation 'org.videolan.vlc:libvlc:3.0.13@aar'
}
0 hữu ích 0 bình luận chia sẻ
0

Đối với tôi giải pháp xuất bản hoàn chỉnh trông như thế này:


apply plugin: 'com.github.dcendents.android-maven'

group = GROUP
version = VERSION

// you could move it to env variable or property
def publishFlavorless = true
def firstTask = null

android.libraryVariants.all { variant ->

    if (variant.name.toLowerCase().contains("debug")) {
        // Workaround for https://github.com/gradle/gradle/issues/1487
        if (publishFlavorless && firstTask == null) {
            def bundleTask = tasks["bundle${variant.name.capitalize()}Aar"]
            firstTask = bundleTask
            artifacts {
                archives(firstTask.archivePath) {
                    builtBy firstTask
                    name = project.name
                }
            }
        }
        return
    }

    def bundleTask = tasks["bundle${variant.name.capitalize()}Aar"]

    artifacts {
        archives(bundleTask.archivePath) {
            classifier variant.flavorName
            builtBy bundleTask
            name = project.name
        }
    }
}

install {
    repositories.mavenInstaller {
        // This generates POM.xml with proper parameters
        pom.project {
            name POM_NAME
            artifactId POM_ARTIFACT_ID
            // For aar it is equal to 'aar' with jar transitive dependencies won't work
            packaging POM_PACKAGING
            description POM_DESCRIPTION
        }
    }
}

Các transitive = truekhối được yêu cầu như cũng ...

0 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ java android gradle android-library aar , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading