Android NDK:如何抑制“应用程序只有 32 位库”警告

Lea*_*ner 8 android android-ndk android-build

我们的应用程序拥有大量本机库以及一些 Java 类,并且我们正在构建仅适用于 32 位架构的应用程序。我们知道,自 2019 年 8 月 1 日起,Google 已强制要求提供 64 位本机二进制文件,但目前我们不使用 Play 商店,在准备好 64 位二进制文​​件之前,我们希望禁止显示以下警告:不构建 64 位本机二进制文件。

Android Studio:4.0.1 Cmake版本:3.10.2

那么,我如何抑制这些警告,我们有很多本机二进制文件,并且对于每个二进制文件都会生成这些警告行。构建窗口充满了很多这样的行,可能每次都是针对每个本机库。

可以借助 CMAKE_C_FLAGS 并添加要抑制的警告类型来抑制代码中生成的警告,例如 -Wno-unknown-pragmas (仅抑制我们确定的警告)。但不知道如何抑制这种类型的警告。

警告:此应用程序仅具有 32 位 [armeabi-v7a,x86] 本机库。从 2019 年 8 月 1 日开始,Google Play 商店要求所有包含本机库的应用程序必须提供 64 位版本。有关更多信息,请访问https://g.co/64-bit-requirement 此应用程序仅具有 32 位 [armeabi-v7a,x86] 本机库。从 2019 年 8 月 1 日开始,Google Play 商店要求所有包含本机库的应用程序必须提供 64 位版本。欲了解更多信息,请访问https://g.co/64-bit-requirement

提前致谢。

Taj*_*oti 0

由于似乎没有明智的方法来抑制此类警告,因此我找到了一种肮脏的方法。只需将其粘贴到您的应用程序中build.gradle,警告就会消失。请记住,如果 AGP 开发人员选择进行一些重构,这随时可能会中断。

private void suppressIssue(evilString) {
    suppressIssueReport { it.contains(evilString) }
    suppressIssueLog { it.contains(evilString) }
}

private void suppressIssueReport(predicate) {
    def appPluginClass = "com.android.build.gradle.internal.plugins.AppPlugin"
    def syncIssueReporterClass = "com.android.build.gradle.internal.errors.SyncIssueReporterImpl"
    def issueReporter = plugins
            .findPlugin(Class.forName(appPluginClass))
            .projectServices
            .issueReporter
    def syncIssuesField = Class.forName(syncIssueReporterClass)
            .getDeclaredField("_syncIssues")
    syncIssuesField.setAccessible(true)
    syncIssuesField.set(issueReporter, new HashMap() {
        @Override
        Object put(Object key, Object value) {
            if (!predicate(value.message)) {
                return super.put(key, value)
            } else {
                return null
            }
        }
    })
}

private void suppressIssueLog(predicate) {
    def context = Logging.getLogger(Logger.ROOT_LOGGER_NAME).context
    def originalListener = context.getOutputEventListener()
    context.setOutputEventListener {
        if (!predicate(it.message)) {
            originalListener.onOutput(it)
        }
    }
}

suppressIssue("CXX5202")
Run Code Online (Sandbox Code Playgroud)

这是从哪里来的:#1#2#3