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

3

我已经使用以下语句在我的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个回答

5
您可以使用Gradle的flavors功能(文档)。
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'
}

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

这会自动选择正确的架构吗?还是需要创建两个不同的APK文件? - Gooey
根据所选的风味创建两个APK。您可以添加另一个带有所有架构的APK。您可以查看我的编辑答案。 - Médéric
但我希望有一个APK文件,人们可以从Google Play商店上下载,然后根据他们的架构,编译/加载正确的库。 - Gooey
1
在上传APK到Play商店之前,需要进行编译...请查看http://developer.android.com/google/play/publishing/multiple-apks.html#SupportedFilters,了解如何使用不同APK的CPU架构过滤器。 - Médéric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接