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

正确的方法来处理Android库的ant构建. Build从jar文件中排除R.class,第1张

概述目前遇到的问题是我们使用ant生成的构建版本不包含R.class文件.看一下ADT build.xml,我看到了这个: <if condition="${project.is.library}"><then>... <jar destfile="${out.library.jar.file}"> <fileset dir="${out.classes.absolute. 目前遇到的问题是我们使用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构建脚本将这些删除.如果没有人建议采用更“正确”的方式来做到这一点,我会将此作为答案.

解决方法 美好的一天.

> 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所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1125053.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存