更新:尝试将“ v7a” ABI版本代码降低到前缀4(小于5,即“ v8”),没有任何运气
当前我的应用程序处于Alpha阶段。每个APK都是由相同的ABI拆分和每个ABI(包括代码)的相同版本乘法生成的,分别生成到“ armeabi-v7a”和“ arm64-v8a”。即使到目前为止,我仅上传了“ v8a” APK。现在,当我尝试上传“ v7a”时,我从Google Play控制台收到以下错误:
问题: 此APK将不提供给任何用户,因为它被一个或多个具有更高版本代码的APK完全遮盖了。 解析度: 从您的发行版中删除此APK,或查看此发行版中包含的APK的定位和版本代码。
android {
compileSdkVersion 26
buildToolsVersion '28.0.3'
defaultConfig {
multiDexEnabled true
minSdkVersion 21
versionCode 28
versionName "1.36"
targetSdkVersion 26
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
if (nativeBuildSystem == 'cmake') {
externalNativeBuild {
cmake {
arguments '-DANDROID_TOOLCHAIN=gcc', '-DANDROID_STL=gnustl_static'
}
}
}
}
if (nativeBuildSystem == 'cmake') {
externalNativeBuild {
cmake {
path './jni/CMakeLists.txt'
}
}
}
// special for TFLite without it we will get an error when trying
// to use 'detect.tflite' assets file
aaptOptions {
noCompress "tflite"
}
splits {
abi {
enable true
reset()
include "armeabi-v7a", "arm64-v8a"
universalApk false
}
}
lintOptions {
abortOnError false
}
sourceSets {
main {
if (nativeBuildSystem == 'bazel' || nativeBuildSystem == 'makefile') {
// TensorFlow Java API sources.
java {
srcDir '../../java/src/main/java'
exclude '**/examples/**'
}
// Android TensorFlow wrappers, etc.
java {
srcDir '../../contrib/android/java'
}
}
// Android demo app sources.
java {
srcDir 'src'
}
manifest.srcFile 'AndroidManifest.xml'
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = [project.ext.ASSET_DIR]
}
androidTest {
java.srcDirs = ['src/androidTest/java', 'src']
}
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
}
版本代码分隔:
ext.versionCodes = ['arm64-v8a': 5, 'armeabi-v7a': 6]
import com.android.build.OutputFile
android.applicationVariants.all { variant ->
// assign different version code for each output
variant.outputs.each { output ->
def abiFilter = output.getFilter(OutputFile.ABI)
def abiMultiplier = 0
if (abiFilter != null) {
abiMultiplier = (int) project.ext.versionCodes.get(abiFilter)
}
output.versionCodeOverride = (int) abiMultiplier * 1000 + (int) android.defaultConfig.versionCode
}
}
还附有游戏机的屏幕截图。似乎“ v7a” APK的版本正在遮盖“ v8”,好像游戏机似乎无法区分它们之间的体系结构。每个APK的描述都说APK支持两个平台,这一事实也支持了该假设。
答案 0 :(得分:3)
arm64-v8a APK的versionCode应该高于armeavi-v7a APK的versionCode。
要确定提供哪个APK,Play会选择与给定设备兼容的最高versionCode。由于所有支持64位(arm64-v8a)的设备也都支持32位(armeabi-v7a),因此,如果您将32位APK放置在更高版本的代码中,则它也将与64位设备匹配,因此可以使用其中的一个而不是64位的这就是Play告诉您arm64-v8a阴影的原因。
希望有帮助。
答案 1 :(得分:0)
如Pierre所建议,每个APK(v7a,v8)都包含两个ABI。但是你怎么会这样呢?
由于JavaCV(OpenCV库)在一个模块中两个ABI的Gradle依赖性:
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support:recyclerview-v7:26.1.0'
api (group: 'org.bytedeco', name: 'javacv', version: '1.4.3', {
exclude group: 'org.bytedeco.javacpp-presets', module: 'flandmark'
exclude group: 'org.bytedeco.javacpp-presets', module: 'flycapture'
exclude group: 'org.bytedeco.javacpp-presets', module: 'leptonica'
exclude group: 'org.bytedeco.javacpp-presets', module: 'libdc1394'
exclude group: 'org.bytedeco.javacpp-presets', module: 'libfreenect2'
exclude group: 'org.bytedeco.javacpp-presets', module: 'libfreenect'
exclude group: 'org.bytedeco.javacpp-presets', module: 'librealsense'
exclude group: 'org.bytedeco.javacpp-presets', module: 'tesseract'
exclude group: 'org.bytedeco.javacpp-presets', module: 'videoinput'
exclude group: 'org.bytedeco.javacpp-presets', module: 'artoolkitplus'
})
// add the libraries you need depending on your mobile phone - if you get an exception or
// "... class not found", or "didn't load library ...", try replace android-arm64 with android-arm, or with android-x86
implementation group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '3.4.3-1.4.3', classifier: 'android-arm'
implementation group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '3.4.3-1.4.3', classifier: 'android-arm64'
}
我评论了implementation group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '3.4.3-1.4.3', classifier: 'android-arm64'
,然后重新上传并成功了。 arm64支持arm,但不支持。