如何手动生成R.java

问题描述 投票:0回答:1

我的项目(在 Delphi 中制作)需要为每个包手动生成它手动包含 R.java 文件。实际上,我将每个库的所有资源都放在一个 .res 目录中,然后在这个目录上为每个包运行 aapt.exe,就像这样 for android.support.compat:

"aapt.exe" package -v -f -m 
  -M "\libraries\android.support.compat\AndroidManifest.xml"
  -I "C:\SDKs\android\platforms\android-32\android.jar" 
  -S ".\res"
  -J ".\tmp\src" 
  --auto-add-overlay 
  --output-text-symbols .\tmp\

这是针对 android.support.coreui 的每个包 ex

"aapt.exe" package -v -f -m 
  -M "\libraries\android.support.coreui\AndroidManifest.xml"
  -I "C:\SDKs\android\platforms\android-32\android.jar" 
  -S ".\res"
  -J ".\tmp\src" 
  --auto-add-overlay 
  --output-text-symbols .\tmp\

问题是,最后我对每个包都有相同的R.java,它非常大因为它包括整个应用程序的所有资源ID。例如:

package androidx.core;

public final class R {
   public static final class styleable {
      public static final int[] ActionBar = new int[]{2130771969, 2130771971, 2130771972, 2130771973, 2130771974, 2130771975, 2130771976, 2130771977, 2130771978, 2130771979, 2130771980, 2130771981, 2130771982, 2130771983, 2130771984, 2130771985, 2130771986, 2130771987, 2130771988, 2130771989, 2130771990, 2130771991, 2130771992, 2130771993, 2130771994, 2130771995, 2130771996, 2130771997, 2130772082};
      public static final int ActionBar_background = 10;
      public static final int ActionBar_backgroundSplit = 12;
....

package android.support.coreui;

public final class R {
   public static final class styleable {
      public static final int[] ActionBar = new int[]{2130771969, 2130771971, 2130771972, 2130771973, 2130771974, 2130771975, 2130771976, 2130771977, 2130771978, 2130771979, 2130771980, 2130771981, 2130771982, 2130771983, 2130771984, 2130771985, 2130771986, 2130771987, 2130771988, 2130771989, 2130771990, 2130771991, 2130771992, 2130771993, 2130771994, 2130771995, 2130771996, 2130771997, 2130772082};
      public static final int ActionBar_background = 10;
      public static final int ActionBar_backgroundSplit = 12;

有没有办法为每个包生成一个只包含包所需资源 ID 的 R.java?

java android android-studio delphi r.java-file
1个回答
0
投票

首先 -- 非常不推荐手动操作

R.java
。正如 B.Burd 和 J.P.Mueller 所写,Android 应用程序开发全合一傻瓜版,第 3 版,2020 年,Wiley,第 87 页(一本严肃的书,尽管名字如此)关于
R.java
和 Android Studio:

每个Android项目都有一个R.java文件。 Android Studio 生成此文件并对其进行保护,就好像该文件是用金制成的一样。您,开发人员,永远不要创建或修改 R.java 文件的文本。

以及

Android 的文档告诉您不要理会 R.java 及其十六进制值,这可能是个好建议。

最后

你不能编辑 R.java。在项目创建很久之后,您的 IDE 会继续监视(并在必要时更新)R.java 文件的内容。如果您删除 R.java,Android Studio 会重新创建该文件。如果您编辑 R.java,Android Studio 会撤消您的编辑。

严格来说,您可以在不使用 Android Studio 时编辑

R.java
。但你不应该。正如我曾经说过的某处

虽然人类可读,但绝不能手动编辑此文件,因为错误引用很可能导致应用程序崩溃。无论如何都没有理由想编辑 R.java。

最后一句话对你的情况也有效。

相反您可以而且应该至少使用其中之一:

  • 代码收缩器 r8,已被引入 以取代 ProGuard(与取代 dx 的 d8 一起)。首先,请查看相应的 Android 开发文档,了解如何收缩、混淆和优化您的应用程序以及本指南。特别是文档中关于 resource shrinking 的部分可能会让您感兴趣。

  • 代码检查器 lint 将帮助您发现代码的各种问题,尤其是未使用的资源,这些资源也会不必要地膨胀您的

    R.java
    文件。

© www.soinside.com 2019 - 2024. All rights reserved.