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
提前致谢。
由于似乎没有明智的方法来抑制此类警告,因此我找到了一种肮脏的方法。只需将其粘贴到您的应用程序中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)