我正在Play商店上载一个视频编辑器应用程序,该应用程序具有包含一些本机代码的库。因此,我通过将其添加到gradle中使其与64位兼容。
ndk.abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
添加它仍然没有解决问题。当我在Playstore上载时,仍然会出现64位错误。这是我的礼物
apply plugin: 'com.android.application'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.maam.videoeditor"
minSdkVersion 17
targetSdkVersion 28
versionCode 5
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
ndk.abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation "com.android.support:customtabs:28.0.0"
implementation 'com.android.support:design:28.0.0'
implementation 'com.android.support:cardview-v7:28.0.0'
implementation 'com.writingminds:FFmpegAndroid:0.3.2'
}
我在gradle中添加了64位行,但是在上传64位时不兼容的错误显示。请提供解决此问题的指南。
答案 0 :(得分:0)
@Osama:首先,请检查您的apk文件是否具有64位库。有很多方法可以做到这一点: -使用Android Studio的分析Apk功能(有关更多详细信息,请参阅:https://developer.android.com/distribute/best-practices/develop/64-bit) -存档您的apk文件,并检查该文件夹内的内容。 如果您的应用程序没有文件夹“ arm64-v8a”,则表示您的应用程序尚未将其版本控制在64位以下。
关于您的要求,如果希望您的应用程序支持64位体系结构,则还必须将本机库(.so文件)版本升级为64位。
关于您的代码:
ndk.abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'"
我不建议您添加此项目,除非您使用Android Studio的AppBundle新功能。 因为当您使用它时,将为每个体系结构创建4个新的apk文件。 而且,如果您上传arm64-v8a体系结构的文件,该错误将消失,但它将通知您apk支持的设备数量少于以前的版本,因为它不支持32位设备。
有2种可能的解决方案:
将所有库文件放入您的apk文件中,这将使您的应用程序更大,但允许您的应用程序支持所有设备。
为您的项目应用AppBundle。有关此详细信息,请检查以下链接:https://android.jlelse.eu/a-practical-guide-to-android-app-bundle-for-beginners-7e8d93831828
答案 1 :(得分:0)
android {
compileSdkVersion 29
defaultConfig {
-----
-----
ndk.abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
ndk {
abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
}
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
packagingOptions {
exclude 'lib/armeabi-v7a/libvudroid.so'
exclude 'lib/x86/libvudroid.so'
exclude 'lib/arm64-v8a/libvudroid.so'
}
答案 2 :(得分:0)
从我的情况来看,谷歌支持团队的回答是,这是由于上传的较旧(旧)版本构建(不符合 64 位要求)被包含在“上一个版本”部分而正在上传新应用程序。
答案 3 :(得分:0)
您需要将以下内容添加到您的 android/app/build.gradle 文件中:
android {
defaultConfig {
....
....
ndk {
abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
}
}
}
将以下内容添加到您的 android/build.gradle 文件中:
subprojects {
afterEvaluate {project ->
if (project.hasProperty("android")) {
android {
.....
.....
packagingOptions {
pickFirst 'lib/x86/libc++_shared.so'
pickFirst 'lib/arm64-v8a/libc++_shared.so'
pickFirst 'lib/x86_64/libc++_shared.so'
pickFirst 'lib/armeabi-v7a/libc++_shared.so'
}
}
}
}
}
这是为了包括 64 位架构。 如果不是这样,那么您可能需要创建应用程序包然后上传
答案 4 :(得分:-1)
我也遇到过同样的情况... 我的应用既不是游戏,也不是跨平台应用。 我面对这种情况... 解决方案很简单...我的应用程序依赖之一是使用ndk ... 删除后,问题就消失了