<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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)