Android Gradle在flavors libs文件夹中包含所有内容(编译fileTree整个libs文件夹)编辑:为so文件设置每个flavor的sourcedir

Android Gradle在flavors libs文件夹中包含所有内容(编译fileTree整个libs文件夹)编辑:为so文件设置每个flavor的sourcedir,android,gradle,build-process,Android,Gradle,Build Process,所以我想在一个flavors文件结构中包含所有文件和子目录。我在这里要做的是在libs文件夹中包括所有jar和so文件,但我还想包括目录 我尝试了includeinclude['*'],但没有成功。我也环顾四周寻找了一会儿答案,但没有找到答案。正确的方法是什么 dependencies { //format for including lib files for all flavors compile fileTree(dir: 'libs', include: ['*.jar'

所以我想在一个flavors文件结构中包含所有文件和子目录。我在这里要做的是在libs文件夹中包括所有jar和so文件,但我还想包括目录

我尝试了include
include['*']
,但没有成功。我也环顾四周寻找了一会儿答案,但没有找到答案。正确的方法是什么

dependencies {
    //format for including lib files for all flavors
    compile fileTree(dir: 'libs', include: ['*.jar'])
    //format for including all jars and so's in pdf flavor
    //pdfCompile fileTree(dir: 'libs', include: ['*.jar'])
    pdfCompile fileTree(dir: 'src/pdf/libs', include: ['*.jar','*.so'])
}
运行应用程序时,以下异常告诉我并非所有.so文件都包含在内

java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.company.appname-1/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libPDFNetC-v7a.so"
编辑:下面是我的文件结构。仅供参考:src是我的模块的子模块,是libs的兄弟。
你是指不同的味道还是不同的模块

每个模块应该只有1个libs文件夹。味道是模块的一部分,它们通常位于myModule/src/flavourName中。因为每个模块有1个build.gradle,所以所有的风格都共享这个模块的libs目录

我想您应该包括所有模块的libs文件夹。通常,这是通过在模块目录级别创建一个文件夹来完成的,将所有共享库放在其中,然后在每个模块的build.gradle文件中引用它。有点难看,但很管用

编辑:@Theyouthis,你能补充一下你目前的目录结构吗。通常,在口味方面,我见过这样的结构:

module1/
      libs/
      src/
         flavour1/
         flavour2/
         flavour3/
      build.gradle

因此,在这样的结构中,您将把所有库放在libs/中,然后它们将共享给您所有的口味。

我想我可以通过切换搜索条件找到解决方案,但对于那些犯同样错误的人,我将展示我是如何解决这个问题的

看起来真正的问题是gradle在使用FlavorCompileFileTree方法时只能处理flavors指定的libs文件夹中的jar文件

您可以通过在android下的SourceSet中指定
flavor.jniLibs.srcDir
来克服这一问题。对于下面的文件结构(在我拒绝展示的模块中),您可以像这样分离一个libs文件

  apply plugin: 'com.android.library'

    android {
        compileSdkVersion 21

        buildToolsVersion "21.1.2"
        publishNonDefault true
        defaultConfig {
            minSdkVersion 16
            targetSdkVersion 21
        }
        //product flavors merge their respective folders in src with main
        productFlavors{
            pdf{}
            nopdf{}
        }
        buildTypes {
            release{
                minifyEnabled false
                //proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                 }
            debug{ minifyEnabled false }
        }
    sourceSets{
        pdf.jniLibs.srcDirs = ['src/pdf/libs']
    }
    }
    dependencies {
        //format for including lib jar files for all flavors
        compile fileTree(dir: 'libs', include: ['*.jar'])
        //libs jar files for specific flavor
        pdfCompile fileTree(dir: 'src/pdf/libs', include: ['*.jar'])
    }


我真的是指口味。编辑了我的答案,请看回复。出于许可的原因,一个口味不能包含某些文件。更新了我的问题。