gpt4 book ai didi

android - 处理 Android 库的 ant 构建的正确方法。构建从 jar 文件中排除 R.class

转载 作者:太空宇宙 更新时间:2023-11-03 10:47:35 25 4
gpt4 key购买 nike

目前遇到一个问题,即我们使用 ant 的生产构建排除了 R.class 文件。查看 ADT build.xml,我看到了这个:

<if condition="${project.is.library}">
<then>
...
<jar destfile="${out.library.jar.file}">
<fileset dir="${out.classes.absolute.dir}"
includes="**/*.class"
excludes="${project.app.package.path}/R.class ${project.app.package.path}/R$*.class ${project.app.package.path}/BuildConfig.class"/>
<fileset dir="${source.absolute.dir}"
excludes="**/*.java ${android.package.excludes}" />
</jar>
</then>
</if>

目前构建抓取 classes.jar 文件,但正如您在上面看到的那样,它不包括 R.class 文件,因此当库尝试抓取外部化字符串时,它会在 NoClassDefFoundError 上爆炸

更新:在这里找到以下引述:http://tools.android.com/recent/dealingwithdependenciesinandroidprojects

Important change:

We have changed the way Library Projects generate and package R classes:

  • The R class is not packaged in the jar output of Library Projects anymore.
  • Library Project do not generate the R class for Library Projects they depend on. Only main application projects generates the Library R classes alongside their own.

This means that library projects cannot import the R class from another library project they depend on. This is not necessary anyway, as their own R class includes all the necessary resources. Note that app projects can still import the R classes from referenced Library Projects, but again, this is not needed as their own R classes include all the resources.

那么,鉴于此,打包 Android 库项目的正确方法是什么?

更新 2:因此,我们通过手动将 R.class 和 R$*.class 文件打包到 jar 中来解决这个问题。

我不知道这是否是打包 Android 库的“正确”方式,因为 ADT 构建脚本将这些删除了。如果没有人提出更“正确”的方法来做到这一点,我将提交这个作为答案。

最佳答案

美好的一天。

  1. R 类没有打包到输出jar 中,因为它可能与主项目的R 类冲突。

  2. 当您从主项目引用库项目并使用 Android SDK 包含的 ant sript 构建它时,它会创建带有库包的 R 文件。

  3. 如果你想用编译后的源代码创建android库,你只能编译java代码。 Here您可以找到解决方案。

  4. 不一定要把R文件打包成编译好的jar。您可以通过 Resources 访问资源类(class)。例如:

    setContentView(getResources().getIdentifier("your_layout_id", "layout", getPackageName()));
    // is equals to setContentView(R.layout.your_layout_id);

关于android - 处理 Android 库的 ant 构建的正确方法。构建从 jar 文件中排除 R.class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20201835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com