【问题标题】:Android gradle load and compile libraries based on architectureAndroid gradle 基于架构加载和编译库
【发布时间】:2015-08-04 07:03:03
【问题描述】:

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

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 导入了所有库。

【问题讨论】:

    标签: android gradle abi


    【解决方案1】:

    您可以使用 gradle 风味 (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'
    }
    

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

    【讨论】:

    • 这会自动选择正确的架构吗?或者这是关于创建 2 个不同的 APK 的?
    • 它根据选择的风格创建两个 apk。您可以在所有架构中添加另一个。你可以看到我编辑的答案
    • 但是我想要一个人们从 google play store 下载的 apk,然后根据他们的架构,编译/加载正确的库..
    • 在将 apk 上传到 play store 之前完成编译....查看developer.android.com/google/play/publishing/… 了解如何使用 CPU 架构过滤器与不同的 apk
    猜你喜欢
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多