android studio生成具有依赖关系的aar

android studio生成具有依赖关系的aar,android,gradle,android-studio,Android,Gradle,Android Studio,我有一个引用另一个jar文件(B.jar)的库项目(a),但在生成aar文件后,jar文件(B.jar)没有绑定到输出aar文件中,当使用这个aar文件时,我得到了一个NoClassDefFoundError 有没有办法让gradle捆绑输出aar文件中的所有依赖类? 这是我的身材。格雷德尔: apply plugin: 'com.android.library' repositories { mavenCentral() } android { buildTypes {

我有一个引用另一个jar文件(B.jar)的库项目(a),但在生成aar文件后,jar文件(B.jar)没有绑定到输出aar文件中,当使用这个aar文件时,我得到了一个
NoClassDefFoundError

有没有办法让gradle捆绑输出aar文件中的所有依赖类? 这是我的身材。格雷德尔:

apply plugin: 'com.android.library'

repositories {
    mavenCentral()
}

android {

    buildTypes {
        release {
            runProguard true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile project(':common')
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

你试图做的是不可能的——至少在你上面描述的方式中是不可能的

有没有一种方法可以让gradle捆绑应用程序中的所有依赖类 输出aar文件

是的,有一种方法可以做到这一点,我以前遇到过这个问题。但这将是一个很长的故事,请容忍我

背景 当您在build.gradle中指定一个依赖项时,您告诉gradle从Maven存储库下载一个工件(AAR/JAR)。所以Gradle需要两件事:

  • Maven存储库位置
  • 依赖本身
  • 您可以在顶级
    build.gradle

    repositories {
        jcenter()
        google()
    }
    
    dependencies {
        compile 'com.example:mylibrary:1.0.1'
    }
    
    并指定对项目级
    build.gradle

    repositories {
        jcenter()
        google()
    }
    
    dependencies {
        compile 'com.example:mylibrary:1.0.1'
    }
    
    Gradle/Maven如何知道
    mylibrary
    需要其他依赖项?从你的依赖

    POM示例 让我们以Square的OkHttp为例,您可以在mvnrepository.com中找到此工件

    OkHttp有一个POM文件。您可以单击该链接来显示完整的XML,我只向您展示了有趣的部分,即依赖项块

    <project>
       <modelVersion>4.0.0</modelVersion>
       <parent>...</parent>
       <artifactId>okhttp</artifactId>
       <name>OkHttp</name>
       <dependencies>
          <dependency>
             <groupId>com.squareup.okio</groupId>
             <artifactId>okio</artifactId>
          </dependency>
          <dependency>
             <groupId>com.google.android</groupId>
             <artifactId>android</artifactId>
             <scope>provided</scope>
          </dependency>
          <dependency>
             <groupId>com.google.code.findbugs</groupId>
             <artifactId>jsr305</artifactId>
             <scope>provided</scope>
          </dependency>
       </dependencies>
       <build>...</build>
    </project>
    
    如果您不想手动执行第2步和第3步,您可以猜到,“有一个gradle插件用于此!”。插件是,归功于:wupdigital使这些过程更容易

    现在,您可以使用gradle命令发布库:

    gradle yourlibrary:assembleRelease yourlibrary:publishMavenReleaseAarPublicationToMavenRepository
    
    如何共享您的库项目 下次你的队友要你的图书馆时,你可以给他们两样东西:

  • 包含库及其依赖项的Maven存储库
  • 您的库组、工件和版本名
  • 就这样!无需将您的依赖关系提供给您的同行


    Cheers库是在调试模式还是发布模式下构建的?在后面,您运行ProGuard,这可以解释为什么在使用该库时会出现
    NoClassDefFoundError
    。@user2713030调试和发布都是一样的,只是没有打包依赖项jar类。我想没有办法,但您可能比我知道得更多……是否可以添加本地依赖项(我的libs文件夹中的一个文件)用我的。啊?我的意思是,没有将文件上传到Maven或其他存储库。。。