如何手动生成R.java

a5g8bdjr  于 2023-04-10  发布在  Java
关注(0)|答案(1)|浏览(348)

我的项目(在 Delphi 中制作)需要手动生成每个包,它包括手动R.java文件。实际上,我把每个库的所有资源放在一个单一的.res目录中,我在这个目录上运行aapt.exe为每个包,就像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\

这是每个软件包的ex for android.support.coreui

"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,它非常大,因为它包含了整个App.ex的所有资源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;

有没有一种方法可以为每个包生成一个R.java,其中只包含包所需的资源ID?

bf1o4zei

bf1o4zei1#

首先--非常不建议手动操作R.java。正如 B.Burd & J. P. Mueller,Android Application Development All-in-One For Dummies,3rd Ed.,2020,Wiley,pp.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,它已经被introduced取代了ProGuard(以及取代dx的d8)。首先,看看相应的Android开发文档如何shrink, obfuscate, and optimize your app和这个guide。特别是文档中关于资源压缩的部分可能会让你感兴趣。
  • 代码检查器lint将帮助您发现代码中的各种问题,阿利亚是未使用的资源,这些资源也会不必要地膨胀您的R.java文件。

相关问题