Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了正确的方法来处理Android库的ant构建. Build从jar文件中排除R.class大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
目前遇到的问题是我们使用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

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

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

我不知道这是否是打包Android库的“正确”方式,因为ADT构建脚本将这些删除.如果没有人建议采用更“正确”的方式来做到这一点,我会将此作为答案.

解决方法

美好的一天.

> R类没有打包在输出jar中,因为它可能与主类项目的R类冲突.
>当您从主项目中引用库项目并使用ant sript构建它时,Android SDK包含它使用库包创建R文件.
>如果你想用已编译的源代码创建android库,你只能编译java代码. Here您可以找到解决方案.
>将R文件打包到编译的jar中并不是一件好事.您可以通过Resources课程访问资源.例如:

setContentView(getresources().getIdentifier("your_layout_id","layout",getPackagename()));
// is equals to setContentView(R.layout.your_layout_id);

大佬总结

以上是大佬教程为你收集整理的正确的方法来处理Android库的ant构建. Build从jar文件中排除R.class全部内容,希望文章能够帮你解决正确的方法来处理Android库的ant构建. Build从jar文件中排除R.class所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。