在我的应用程序中,我正在使用"de.mrmaffen:vlc-android-sdk:2.0.6"
库,它占用了大量存储空间,但我找不到更小的替代方案。
所以我决定像CommonsWare 提到的那样使用拆分或产品风味,但我无法让它发挥作用。
我试图遵循文档但没有运气。
任何帮助表示赞赏。
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 编译说明并检查:
git clone
回购。- 在这个 repo 中打开一个命令提示符。“cd”或将目录更改为它。
git clone .
- 将目录更改为 vlc-android 目录。
git tag
git checkout <tag_version>
. 在这种情况下,2.1.2。cd ..
- 注释掉您不需要
compile/build
的脚本。build.gradle
./gradlew buildLibVlc
- 您应该使用文件夹中的 Java 源文件和共享对象 (*.so) 文件成功构建
jniLibs
。- 如果您更新了 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
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 过滤器并构建变体
android { productFlavors { x86 { ndk { abiFilter "x86" } } arm { ndk { abiFilters "armeabi-v7a", "armeabi" } } } }
通过 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
您可以使用应用程序包,因此您不需要处理多个 apk。Google Play 会自动为您处理。此外,这种方法可以提供额外的好处。更多详情:https ://developer.android.com/guide/app-bundle