Android gradle基于架构加载和编译库

时间:2015-05-22 09:52:12

标签: android gradle abi

我使用以下语句在我的Android应用程序中包含opencv:

compile group: 'org.bytedeco', name: 'javacv', version: '0.11'
compile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '2.4.11-0.11', classifier: 'android-arm'
compile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '2.4.11-0.11', classifier: 'android-x86'
compile group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '2.6.1-0.11', classifier: 'android-arm'
compile group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '2.6.1-0.11', classifier: 'android-x86'

现在只使用了四个中的两个,这是浪费空间,也可能是速度。有没有办法只加载/编译属于架构的库?我已经阅读了Gradle android build for different processor architectures,但是这个使用了libs文件夹,因此有自己的包含。我通过gradle导入了所有库。

1 个答案:

答案 0 :(得分:4)

您可以使用gradle flavors(documentation)。

productFlavors {
    arm {
        ...
    }

    x86 {
        ...
    }

    all {
        ...
    }
}

...

dependencies {
    // For arm
    armCompile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '2.4.11-0.11', classifier: 'android-arm'
    armcompile group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '2.6.1-0.11', classifier: 'android-arm'

    // For x86
    x86Compile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '2.4.11-0.11', classifier: 'android-x86'
    x86Compile group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '2.6.1-0.11', classifier: 'android-x86'

    // For all
    allCompile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '2.4.11-0.11', classifier: 'android-arm'
    allcompile group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '2.6.1-0.11', classifier: 'android-arm'
    allCompile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '2.4.11-0.11', classifier: 'android-x86'
    allCompile group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '2.6.1-0.11', classifier: 'android-x86'
}

然后使用您想要的构建变体。