You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android 15+应用需支持16KB内存页面大小问题的排查与解决咨询

Android 15+应用需支持16KB内存页面大小问题的排查与解决咨询

大家好,最近碰到了Google Play的16KB内存页面大小兼容性要求的问题,折腾了一阵还是没找到明确的解决方向,想请教下社区的各位大佬。先把我的排查过程和问题细节整理出来:

问题背景

Google Play的通知明确要求:从2025年11月1日起,所有目标API为Android 15+的应用必须支持16KB内存页面大小,否则无法发布后续更新。我查了自己的最新生产版本,确实显示不支持16KB内存页面大小,这直接影响到后续的版本迭代。

对16KB内存页的初步理解

我查了相关开发者论坛,大概搞懂了这是底层内存管理的变化:

操作系统的虚拟内存会被分割成名为“页面”的内存块,这是系统能分配的最小内存单元,之前行业普遍使用4KB的页面大小,现在Google要求过渡到16KB。只有在编写原生代码、手动分配内存的场景下才会受这个变化影响,纯Java代码理论上不会直接触发问题。

但我的项目是完全用Java开发的,没碰过原生代码,所以一开始特别困惑为什么自己的应用会触发这个兼容性问题。

具体问题定位

后来在Google Play Console的对应App Bundle详情页里,找到了明确的问题点——是项目依赖的部分原生库不支持16KB内存页,具体列表如下:

base/lib/arm64-v8a/libbarhopper_v3.so
base/lib/arm64-v8a/libface_detector_v2_jni.so
base/lib/arm64-v8a/libimage_processing_util_jni.so
base/lib/arm64-v8a/libmlkit_google_ocr_pipeline.so
base/lib/arm64-v8a/libmlkitcommonpipeline.so
base/lib/arm64-v8a/libxeno_native.so
base/lib/x86_64/libbarhopper_v3.so
base/lib/x86_64/libface_detector_v2_jni.so
base/lib/x86_64/libimage_processing_util_jni.so
base/lib/x86_64/libmlkit_google_ocr_pipeline.so
base/lib/x86_64/libmlkitcommonpipeline.so
base/lib/x86_64/libxeno_native.so

看起来都是第三方依赖的原生库,比如ML Kit的OCR、人脸检测相关库,还有xeno的原生组件。

自己的尝试

我在Android Studio里重新生成了签名App Bundle(步骤:Build > Generate Signed App Bundle or APK > Android App Bundle > 选择密钥库 > 选择Release版本生成),生成后分析AAB文件,还是看到“不支持16KB内存页面大小”的警告,问题和之前完全一致。

项目配置信息

我的app/build.gradle核心配置如下:

apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics'

android {
    compileSdk 36
    defaultConfig {
        applicationId "com.app.myapp"
        minSdkVersion 26
        multiDexEnabled true
        targetSdk 36
        versionCode 25
        versionName "1.4.1"
        vectorDrawables.useSupportLibrary = true
        setProperty("archivesBaseName", "MyApp")
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        proguard {
            debuggable false
            minifyEnabled true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro', 'proguard.cfg'
        }
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.debug
        }
        debug {
            isDefault true
            minifyEnabled false
            proguardFiles 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }
    // {IMPORTANT NOTE} Do NOT compress tflite model files (need to call out to developers!)
    namespace 'com.app.myapp'
    androidResources {
        noCompress 'tflite'
    }
}

repositories {
    // Depending on AndroidX Snapshot Builds to get the latest CameraX libs.
    maven { url 'https://androidx.dev/snapshots/builds/6787662/artifacts/repository/' }
}

dependencies {
    /*SharedPreferences implementation*/
    implementation 'androidx.preference:preference:1.2.1'
    implementation 'com.facebook.shimmer:shimmer:0.5.0@aar'
    implementation 'androidx.cardview:cardview:1.0.0'
    implementation 'androidx.drawerlayout:drawerlayout:1.2.0'
    implementation 'androidx.navigation:navigation-fragment-ktx:2.7.6'
    implementation 'androidx.navigation:navigation-ui-ktx:2.7.6'
    implementation 'androidx.recyclerview:recyclerview:1.3.2'
    implementation 'androidx.viewpager2:viewpager2:1.1.0-beta02'
    implementation 'me.relex:circleindicator:2.1.6'
    implementation 'androidx.core:core-ktx:1.12.0'
    implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
    implementation 'com.google.android.material:material:1.11.0'
    implementation 'net.sourceforge.jtds:jtds:1.3.1'
    implementation files('libs/activation.jar')
    implementation files('libs/additionnal.jar')
    implementation files('libs/mail.jar')
    implementation files('libs/commons-dbutils-1.7.jar')
    implementation 'com.airbnb.android:lottie:6.1.0'
    implementation 'androidx.compose.ui:ui-graphics-android:1.5.4'
    implementation 'androidx.compose.ui:ui-desktop:1.6.0-beta03'
}

我的疑问

因为项目是纯Java开发,没有自己编写过原生代码,问题完全出在依赖的第三方原生库上,想请教各位:

  1. 是不是只要把这些不支持16KB的第三方库升级到最新版本就能解决?比如ML Kit的相关组件、xeno_native这些?
  2. 有没有不需要升级库的配置方式?比如在build.gradle里添加特定参数,让这些库兼容16KB内存页?
  3. 还有没有其他我没考虑到的点?比如Android Studio的设置、打包流程的隐藏配置?

麻烦各位大佬帮忙看看,谢谢啦!

火山引擎 最新活动