返回

Android Gradle 4.0 R.java 文件去哪儿了?R.id.xxx 为什么不是真正的控件 Id?

Android

Android Gradle 4.0 及更高版本对构建系统进行了重大更改,最明显的变化之一是 R.java 文件的移除。R.java 文件是 Android 应用构建过程的产物,包含了资源 ID 和类名等信息,被应用程序代码广泛使用。随着 Android Build System 的发展,R.java 文件变得越来越复杂,导致构建速度变慢、灵活性不足等问题。

在 Android Gradle 4.0 中,R.java 文件被拆分成多个文件,这些文件位于 app/build/generated/res/目录下,每个文件都只包含一部分资源 ID 或类名。这使得构建系统更加灵活高效,并减少了构建时间。

那么,在 Android Gradle 4.0 中,如何获取资源 ID 呢?您可以使用新的 aapt2 工具来获取资源 ID。aapt2 是 Android Gradle 4.0 中引入的新工具,它可以将资源文件编译成二进制格式。

您可以在 build.gradle 文件中配置 aapt2 的参数,例如:

android {
    aaptOptions {
        ignoreAssetsPattern "!.svn:!.git:!.ds_store:!*.scc:.*~"
    }
}

要获取资源 ID,您可以使用 aapt2 工具的 dump 命令,例如:

./gradlew app:aapt2Dump --no-res-ids

这将生成一个名为 "resources.arsc" 的文件,其中包含了所有资源 ID 的信息。

您也可以使用 Android Studio 的 Resource Manager 工具来获取资源 ID。Resource Manager 工具位于 Android Studio 的 Tools 菜单下。

另一个让开发人员感到困惑的问题是,在 Android Gradle 4.0 中,R.id.xxx 不再是真正的控件 Id。这是因为,在 Android Gradle 4.0 中,资源 ID 是由 aapt2 工具生成的,而 aapt2 工具使用不同的算法来生成资源 ID。

如果您在 Android Gradle 4.0 中使用 R.id.xxx 来获取控件 Id,可能会出现错误。要解决这个问题,您可以使用新的 findViewById() 方法来获取控件 Id。

findViewById() 方法位于 View 类中,它可以根据控件的名称来获取控件 Id。例如:

View view = findViewById("@+id/my_view");

``

``