本文介绍了为不同的架构生成APK - FFmpegMediaMetadataRetriever的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请看编辑1






我正忙着添加 FFmpegMediaMetadataRetriever 预构建 .aar 文件到我的项目,以减少每个架构的Apk文件大小。








我的问题:




  • 我应该将 .aar 文件放在我的 libs中文件夹(不为每个架构创建文件夹),还是应该将其添加到文件夹中?


  • - 我目前的版本是21)?



他实现了这样的版本控制:

  //为每个ABI赋值的版本代码的映射。 
def abiCodes = ['x86':1,'x86_64':2,'armeabi-v7a':3,'arm64-v8a':4]

// APK for the same所有版本信息都相同的应用。
android.applicationVariants.all {variant - >
//为每个输出APK分配不同的版本代码。
variant.outputs.each {
output - >
def abiName = output.getFilter(OutputFile.ABI)
output.versionCodeOverride = abiCodes.get(abiName,0)* 100000 + variant.versionCode
}
}

我正在寻找可能使用 .aar FFmpegMediaMetadataRetriever 的文件可以为我提供有关如何正确实施它的指导。






编辑1:



学习更多关于不同的架构/ ABI,我 THINK 如果我只包含 armeabi-v7a 那么大多数设备都会被覆盖 ? (我的最小sdk是16)。



这是否意味着我不需要拆分APK而我不必担心版本控制?



然后我可以导入 .aar - armv7-fmmr.aar 正常?

解决方案

您可以使用指定所需目标ABI的产品风格生成不同的APK。然后,您可以根据每种产品风格指定要使用的FMMR gradle依赖项或独立AAR文件。请参阅此build.gradle文件以供参考:

  apply plugin:'com.android.application'

apply plugin:'kotlin-android'

apply plugin:'kotlin-android-extensions'

android {
compileSdkVersion 28
defaultConfig {
applicationIdcom.wseemann.example
minSdkVersion 15
targetSdkVersion 28
versionCode 1
versionName1.0
testInstrumentationRunnerandroid.support.test.runner .AndroidJUnitRunner
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
}
}

flavorDimensionsversion
productFlavors {
fat {
ndk {
abiFiltersarmeabi,armeabi -v7a,x86,mips,x86_64,arm64-v8a
}
}

armeabi {
ndk {
abiFilterarmeabi
}
}

armeabi_v7a {
ndk {
abiFilterarmeabi-v7a
}
}

x86 {
ndk {
abiFilterx86
}
}

mips {
ndk {
abiFiltermips
}
}

x86_64 {
ndk {
abiFilterx86_64
}
}

arm64_v8a {
ndk {
abiFilter arm64-v8a
}
}
}
}

依赖关系{
实现fileTree(dir:'libs',包括:[ '* .jar'])
实现org.jetbrains.kotlin:kotlin-stdlib-jdk7:$ kotlin_version
实现com.android.support:appcompat-v7:28.0.0-rc01'
implementation'com.android.support.constraint:constraint-layout:1.1.2'
testImplementation'junit:junit:4.12'
androidTestImplementation'com.android.support.test:runner:1.0.2'
androidTestImplementation'com.android.support.test.espresso:espresso-core:3.0.2'

//产品风味,ABI特定依赖关系
fatImplementation'com.github.wseemann:FFmpegMediaMetadataRetriever:1.0.14'
armeabiImplementation'com.github.wseemann:FFmpegMediaMetadataRetriever-armeabi:1.0.14'
armeabi_v7aImplementation'com.github.wseemann:FFmpegMediaMetadataRetriever-armeabi-v7a:1.0.14'
x86Implementation'com.github.wseemann:FFmpegMediaMetadataRetriever-x86:1.0.14'
mipsImplementation'com.github。 wseemann:FFmpegMediaMetadataRetriever-mips:1.0.14'
x86_64Implementation'com.github.wseemann:FFmpegMediaMetadataRetriever-x86_64:1.0.14 '
arm64_v8aImplementation'com.github.wseemann:FFmpegMediaMetadataRetriever-arm64-v8a:1.0.14'
}


PLEASE SEE EDIT 1


I'm busy adding FFmpegMediaMetadataRetriever pre-build .aar files to my project to reduce the Apk file size for each architecture.

This post added the following to his Gradle:

android {
splits {
        // Configures multiple APKs based on ABI.
        abi {
            // Enables building multiple APKs per ABI.
            enable true

            // By default all ABIs are included, so use reset() and include to specify that we only
            // want APKs for x86, armeabi-v7a, and mips.
            reset()

            // Specifies a list of ABIs that Gradle should create APKs for.
            include "x86", "x86_64", "armeabi-v7a", "arm64-v8a"

            // Specifies that we want to also generate a universal APK that includes all ABIs.
            universalApk false
        }
    }
    //...    
}

The FFmpegMediaMetadataRetriever library provide the following .aar files:


My Questions:

  • Should I place the .aar files in my libs folder as it is (without creating folders for each architecture), or should I add it in a folder?
  • - my current version is 21)?

He implemented versioning like this:

// Map for the version code that gives each ABI a value.
def abiCodes = ['x86':1, 'x86_64':2, 'armeabi-v7a':3, 'arm64-v8a':4]

// APKs for the same app that all have the same version information.
android.applicationVariants.all { variant ->
    // Assigns a different version code for each output APK.
    variant.outputs.each {
        output ->
            def abiName = output.getFilter(OutputFile.ABI)
            output.versionCodeOverride = abiCodes.get(abiName, 0) * 100000 + variant.versionCode
    }
}

I'm looking for someone that has perhaps used the .aar files of FFmpegMediaMetadataRetriever that can give me guidance on how to correctly implement it.


EDIT 1:

After learning more about different architectures/ABI's, I THINK it is save to say that if I only include armeabi-v7a then most devices would be "covered"? (My minimum sdk is 16).

Does that then mean that I don't have to split the APK and I don't have to worry about versioning?

I can then just import the .aar - armv7-fmmr.aar as normal?

解决方案

You can generate different APK's using product flavors which specify the desired target ABI. You can then specify which FMMR gradle dependency or standalone AAR file to use depending on each product flavor. See this build.gradle file for reference:

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.wseemann.example"
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    flavorDimensions "version"
    productFlavors {
        fat {
            ndk {
                abiFilters "armeabi", "armeabi-v7a", "x86", "mips", "x86_64", "arm64-v8a"
            }
        }

        armeabi {
            ndk {
                abiFilter "armeabi"
            }
        }

        armeabi_v7a {
            ndk {
                abiFilter "armeabi-v7a"
            }
        }

        x86 {
            ndk {
                abiFilter "x86"
            }
        }

        mips {
            ndk {
                abiFilter "mips"
            }
        }

        x86_64 {
            ndk {
                abiFilter "x86_64"
            }
        }

        arm64_v8a {
            ndk {
                abiFilter "arm64-v8a"
            }
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:28.0.0-rc01'
    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    // Product flavor, ABI specific dependencies
    fatImplementation 'com.github.wseemann:FFmpegMediaMetadataRetriever:1.0.14'
    armeabiImplementation 'com.github.wseemann:FFmpegMediaMetadataRetriever-armeabi:1.0.14'
    armeabi_v7aImplementation'com.github.wseemann:FFmpegMediaMetadataRetriever-armeabi-v7a:1.0.14'
    x86Implementation 'com.github.wseemann:FFmpegMediaMetadataRetriever-x86:1.0.14'
    mipsImplementation 'com.github.wseemann:FFmpegMediaMetadataRetriever-mips:1.0.14'
    x86_64Implementation 'com.github.wseemann:FFmpegMediaMetadataRetriever-x86_64:1.0.14'
    arm64_v8aImplementation 'com.github.wseemann:FFmpegMediaMetadataRetriever-arm64-v8a:1.0.14'
}

这篇关于为不同的架构生成APK - FFmpegMediaMetadataRetriever的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-15 18:44