1

在我的应用程序中,我正在使用"de.mrmaffen:vlc-android-sdk:2.0.6"库,它占用了大量存储空间,但我找不到更小的替代方案。
所以我决定像CommonsWare 提到的那样使用拆分或产品风味,但我无法让它发挥作用。
我试图遵循文档但没有运气。
任何帮助表示赞赏。

4

2 回答 2

2

自己构建 LibVLC Android SDK

如果您正在使用"de.mrmaffen:vlc-android-sdk:2.0.6"请自行构建 LibVLC Android SDK

正如这里所解释的,之后只需运行这个 Gradle 命令:./gradlew buildLibVlc


构建特定版本的 LibVLC Android SDK

cd vlc-android          // if this folder doesn't exist yet, simply run ./gradlew cloneVlcAndroid
git tag                 // to list all release versions
git checkout {tag-name} // to checkout the git repo at the given tag
cd ..
./gradlew buildLibVlc   // build it  

确保您在依赖项方面遵循了 Android 编译说明并检查

  1. git clone回购。
  2. 在这个 repo 中打开一个命令提示符。“cd”或将目录更改为它。
  3. git clone .
  4. 将目录更改为 vlc-android 目录。
  5. git tag
  6. git checkout <tag_version>. 在这种情况下,2.1.2。
  7. cd ..
  8. 注释掉您不需要compile/build的脚本。build.gradle
  9. ./gradlew buildLibVlc
  10. 您应该使用文件夹中的 Java 源文件和共享对象 (*.so) 文件成功构建jniLibs
  11. 如果您更新了 gradle 版本,请libs在文件夹旁边创建一个文件夹。jniLibs

通过 Maven CentralJCenter 获取

只需将此依赖项添加到您的项目中即可。

dependencies {
    implementation 'de.mrmaffen:libvlc-android:2.1.12@aar'
}

我正在使用这个版本。请记住将 JCenter 添加到您的项目build.gradle文件中:

allprojects {
    repositories {
        jcenter()
    }
}

通过 JCenter 的 VLC Android SDK 支持下一个 ABI:armeabi-v7a、arm64-v8a、x86 和 x86_64。

您可以过滤应用build.gradle文件中的特定 ABI(x86_64 和 arm64-v8a 除外):

android {
    ndk {
        abiFilters "armeabi-v7a", "x86"
    }
}

可以通过最新的 Android Studio 版本检查mrmaffen 存储库中包含的文件:

在此处输入图像描述


为 ABI 配置多个 APK

在splits块内添加一个 abi块。在您的 abi 块中,提供所需ABI 的列表。资源

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 and armeabi-v7a.

      // Resets the list of ABIs that Gradle should create APKs for to none.
      reset()

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

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

构建多个 APK

单击Build > Build APK为 Project 窗格中当前选定的模块构建所有 APK。

Gradle 将每个 ABI 的 APK 创建到项目的build/outputs/apk/目录中。


配置构建变体

此页面基于配置您的构建概述,向您展示如何配置构建变体以创建不同版本的应用程序。


结合 abi 过滤器并构建变体

从 apk 中排除 abi

android {
    productFlavors {
        x86 {
            ndk {
                abiFilter "x86"
            }
        }
        arm {
            ndk {
                abiFilters "armeabi-v7a", "armeabi"
            }
        }
    }
}

通过 ABI 和密度拆分的多 APK

如何使用 ABI 拆分减少 APK 数量

是一个代码片段,您可以使用它来设置 ABI 拆分的版本代码。

为 x86_64 和 x86 提供比 ARM 更高的版本号,因为许多 x86 设备可以通过仿真层运行 ARM 代码,尽管性能较低。

如果您不想管理太多 APK,请使用拆分 APK 定位最流行的 APK(通常是 ARM 和 x86),并为其他所有人提供通用 APK。

在 Play Store 上发布通用 APK,其版本号低于所有其他 ABI 特定包,这一点至关重要。

如果您需要更灵活的多 APK 设置,请通过产品风格查看 多 APK。


推荐的 Medium 帖子以选择支持的 ABI

在这篇文章 中,我们将了解什么是 ABI、ABI 拆分的问题以及避免这些问题的替代方法……例如,Android 支持以下 ABI:

mips, mips64, X86, X86–64, arm64-v8a, armeabi, armeabi-v7a

在此处输入图像描述

因此,您必须根据大小与性能标准来支持 64 位库,但应该毫不犹豫地删除 mips、mips-64 和 armeabi。


解决部分设备上的 UnsatisfiedLinkError 问题

如此处所述,64 位处理器生成并检查 arm64 文件夹以加载本机库。

如果您的项目没有 arm64 文件夹。这是解决方案:

构建.gradle

defaultConfig {
    ...

    ndk {
        abiFilters "armeabi-v7a", "x86"
    }

}

您需要将此过滤器(abiFilters)添加到您的应用程序模块的 build.gradle 文件中。因此,当您的设备尝试运行您的应用程序时,它会检查 gradle 文件并了解它不应生成任何文件夹并使用现有的本机库资源。繁荣。几乎解决了。但还有一件事。将此行添加到您的 gradle.properties 以使用已弃用的 Ndk。

gradle.properties

android.useDeprecatedNdk=true
于 2018-01-07T12:13:30.180 回答
0

您可以使用应用程序包,因此您不需要处理多个 apk。Google Play 会自动为您处理。此外,这种方法可以提供额外的好处。更多详情:https ://developer.android.com/guide/app-bundle

于 2019-06-15T11:52:19.833 回答