如何在Android工程中导入其它工程作为引用,解决java noclassdeffoundd异常

5057人阅读
android(101)
现在已经有了一个Android工程A。我们想扩展A的功能,但是不想在A的基础上做开发,于是新建了另外一个Android工程B,想在B中引用A。
1. 把工程A做成纯Jar包,这样其他的工程就可以直接引用了。
但是,如果在工程A中用了R.java中的引用,则无法打成jar包了。原因是R.java是自动生成的,是动态的,每次编译都是不相同的。如果一定要做成jar包,就不能使用自动生成的R文件,用到资源时候就要写代码去获取。
有时会报错:Conversion to Dalvik format failed with error 1
可能是多层包文件重复导入,冲突。。。
这时可以试试方法2
2.将工程A做成android library project。
设置工程A,右键-&Properties-&Android,将Is library项选中,然后Apply。设置工程B,右键-&Properties-&Android,在Library中,点击Add按钮,将A工程加入,然后Apply。此时在B中就引入了A中的资源和代码,这些资源和代码都可以直接调用。需要注意的是,因为A已经不再是一个完整的Android应用,而是一个类库工程,所以有一些内容还需要在B中配置一下。比如A中有lib库引用,则B中也要加入该lib库;比如A中的AndroidManifest.xml文件的内容,在B的AndroidManifest.xml文件中也要相应加上。。。
如果不需要引用A工程的资源文件,同样只需得到jar文件,
设置工程A,右键-&Properties-&Android,将Is library项选中,然后Apply。在A工程的bin目录下能得到一个jar文件,可以copy到B工程中的libs目录下直接引用。
如果能用jar当然最好,但是jar文件不能把res目录下的资源打包进去,所以才出现lib工程。
创建和使用Android library工程
摘要: 创建library供多个工程共享代码、资源是非常常见的需求,网上这种资料非常少,基本上都是讲创建java工程,然后export,这种方式缺点非常多,大家可以自己google一下。本文着重介绍如何创建Android library,并且在 ...
创建library供多个工程共享代码、资源是非常常见的需求,网上这种资料非常少,基本上都是讲创建java工程,然后export,这种方式缺点非常多,大家可以自己google一下。
本文着重介绍如何创建Android library,并且在工程中使用此library提供的资源,具体步骤如下:
1. 创建一个Android工程,命名为MyLib
2. 进入工程设置选中Is Library
3. 创建另一个Android工程,命名为MyProj
4. 进入工程设置,添加MyLib
5. 在MyProj的AndroidManifest.xml中加入对library中activity的引用
&activity android:name=&net.devdiv.mylib.MyLib& /&
6. 由于编译后library中的资源和引用它的project资源是合并在一起的,为了避免重名问题,需要对library中资源进行重命名
1). 把main.xml改为mylib.xml,同时修改MyLib.java代码setContentView(R.layout.mylib);
2). strings.xml修改为
&?xml version=&1.0& encoding=&utf-8&?&
&resources&
& & &string name=&mylibhello&&String fetched from lib!&/string&
& & &string name=&mylib_app_name&&MyLib&/string&
&/resources&
7. 在MyProj中引用MyLib的资源
package net.devdiv.
import android.app.A
import android.os.B
import android.widget.TextV
import net.devdiv.mylib.*;
import android.content.I
public class MyProj extends Activity {
& & /** Called when the activity is first created. */
& & @Override
& & public void onCreate(Bundle savedInstanceState) {
& && &&&super.onCreate(savedInstanceState);
& && &&&setContentView(R.layout.main);
& && &&&TextView tv = (TextView)findViewById(R.id.myprojtext);
& && &&tv.setText(R.string.mylibhello);
& && &&&Intent it = new Intent(this, MyLib.class);
& && &&&startActivity(it);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:350300次
积分:3872
积分:3872
排名:第5641名
原创:74篇
转载:32篇
评论:115条
(1)(1)(2)(1)(3)(2)(1)(3)(3)(5)(4)(1)(2)(1)(6)(2)(3)(3)(10)(3)(7)(3)(2)(3)(2)(13)(8)(4)(4)(2)(1)13:00 提问
eclipse为什么导入android design工程包总是提示错误?
我想在其他工程中引用design工程
可老是提示XX属性找不到,莫非还要其他依赖包???
E:\adt-bundle-windows-x86\sdk\extras\android\support\design\res\values\styles.xml:21: error: Error: No resource found that matches the given name: attr 'backgroundTint'.
E:\adt-bundle-windows-x86\sdk\extras\android\support\design\res\values\styles.xml:23: error: Error: No resource found that matches the given name: attr 'elevation'.
...........
E:\adt-bundle-windows-x86\sdk\extras\android\support\design\res\values\styles.xml:80: error: Error retrieving parent for item: No resource found that matches the given name 'TextAppearance.AppCompat.Button'.
............
是何缘故?
按赞数排序
看是不是引用了appcompat_v7,如果有就去掉
没有引用appcompat_v7 ,我的eclipse里就导入了一个design工程
你导入的工程是在appcompat_v7下新建的,而你现在的eclipse没有appcompat_v7,所以提示有些style找不到。你重新设置一下Properties
16718关注|1963收录
其他相似问题android导入第三方包(解决ClassNotFound错误)
android导入第三方包(解决ClassNotFound错误)
[摘要:========================================================= 援用了网上的一篇文章,写的很没有错,又恰好办理了我的题目 ADT17以上版本应当是舍弃了Reference包的援用 ===========================================]
=========================================================引用了网上的一篇文章,写的很不错,又正好解决了我的问题ADT17以上版本应该是舍弃了Reference包的引用=========================================================最近开发项目需要从google地图转换到高德地图,所以在原有工程的基础上,只需要导入高德地图的包即可,代码大致和google的一样。但是导入后,eclipse下不会提示错误,但是在模拟器执行的时候就会报错:NoClassDefFoundError错误。先给出网上对此错误的提示:---------------------------------------------------------------------------------------Android中引入第三方Jar包的方法(java.lang.NoClassDefFoundError解决办法)1、在工程下新建lib文件夹,将需要的第三方包拷贝进来。2、将引用的第三方包,添加进工作的build path。3、(关键的一步)将lib设为源文件夹。如果不设置,则程序编译可以通过,但运行的时候,会报:java.lang.NoClassDefFoundError---------------------------------------------------------------------------------------一般我们导第三方包的步骤都是,右键工程----build path -configure build path 。在弹出的libraries里,我们选择 Add External JARs,然后选择导入包即可。(或新建一library-userlibrary)这样应该就不会有什么错误了,但是点击RunAs时,有时又会触发 conversion to dalvik format failed with error 错误。看一下网上对此错误的提示:--------------------------------------------------------------------------------------------------------------------------- & &在eclipse开发Android项目时出现的很多问题都可以使用Project---------&clean来轻易解决。 & &但如果出现说Android库找不到,或者不小心remove了Android系统库,怎么重新添加Android系统库呢?在eclipse里面的Java Build Path里面是没法添加例如Android 2.1这样定义好的系统库。而我尝试手动添加SDK 文件夹里面的Android.jar,结果出现了Conversion to Dalvik format failed with error 1问题了。折腾了一番后,很多网友都说用Project clean可以解决,但对我的情况来说,没有用处。 & &在百度找到解决方法了: & &修改项目classpath文件,这让我明白了,直接从其他正常项目里面把&!-- 注意,这个.classpath文件在eclipse工作空间的硬盘存放位置对应工程项目目录下面 --& & & &&classpathentry kind=&lib& & path =&自定义jar的地址& /& 修改成&classpathentry kind=&con& path=&com.android.ide.eclipse.adt.ANDROID_FRAMEWORK&/&。这样子刷新项目,Android系统库Android 2.1回来了,那个错误也解决了。 -------------------------------------------------------------------------------------------------------------------------- & &这几天又遇到这样的问题了,但是.classpath文件里面已经包含了上面的con Path,后来在论坛(/thread-.html)上找到新方法:project -& properties -& android label, check a target from the project build target list&!-- 这样有时候还是不能去掉错误,这时候注意,在进入project -& properties -& android后,下面有一个is library项,把它勾上,再点击确定错误就OK了,我的错误就是这样解决的,一开始按照上面以及后面的方法都解决不了,最后我看到有一个is library项,把它勾上再确定试一下OK,错误没了 --&============================================================================附:上网上广为流传的解决方法:conversion to dalvik format failed with error 1的解决办法android低版本工程(如1.5)放到高版本环境中(如2.2)可能会上述错误,解决方法如下:
& &1、如果不修改android sdk版本,则使用project clean 命令作用于某工程即可。 (该处理方式只是在高版本中兼容了低版本工程,未真正意义上的升级)
& &2、如果修改android sdk版本,则需要以下几个步骤:
& & & 1) 修改SDK
& & & & & & 选择工程,build path --& configure build path ---& library 删除引用的低版本SDK,
& & & & & & 然后add External JARs,选择高版本SDK,OK,保存
& & & 2) 修改classpath文件
& & & & & & 该文件可能存在该项: &classpathentry kind=&lib& & path =&你所指定的高版本的地址&
& & & & & & 把她修改成&classpathentry kind=&con& path=&com.android.ide.eclipse.adt.ANDROID_FRAMEWORK& /&
& & & 3) 修改AndroidManifest.xml
& & & & & & 在AndroidManifest.xml文件中,application标签后添加&uses-sdk android:minSdkVersion=&3&&&/uses-sdk&
& & & 4) 修改default.properties(很重要)
& & & & & & &该文件最后一行(前面没用#的)target=android-3 该成target=android-8,保存。
& & & 再看看你的工程和新建的android 2.2的工程结构就一样了。-------------------------------------------------------------------------------------------------------------------------------------------------------------貌似这样做还真把这个错误给解决了,反正我把progect --properties--android 下的 is library够选上,果然错误就没了,可是运行起来还是会报错。现在我才发现原来错误不是在eclipse里的build path内。我尝试着修改了一下电脑java的环境变量,有了惊奇的发现:在我的电脑的环境变量中,classpath 原本是空的,我添加了如下的变量:.;C:Program FilesJavajdk1.5.0_17C:Program FilesJavajdk1.5.0_17libtools.jar尤其是开始的.;这个是最为重要的。少了 & .; & 就造成巨大的差别在?]有做任何设定之下 , 预设的CLASSPATH就是一个 .这个 .代表 命令提示字元的当前目录 没设定比设定错误还要好一点(对新手而言) , 只要 .class 在当前目录 , 还是可以执行程序的 但是你若下了设定 SET CLASSPATH=C:&j2sdk1.4.1_03&C:&j2sdk1.4.1_03&lib&tools. 少了这个.若你当前的目录却不是 C:&j2sdk1.4.1_03&lib , 就??⑸?oClassDefFoundError 正?的?定 SET CLASSPATH=.;C:&j2sdk1.4.1_03&C:&j2sdk1.4.1_03&lib&tools. 表示?前的目? , C:&j2sdk1.4.1_03&lib& , 以及 tools.jar ?鹊?lass都可以?入 。事实证明,主要原因并不是classpath的问题,来到公司,用同样的方法尝试还是运行报错,仔细一想:两台电脑,除了操作系统,eclipse版本不一样,别的没什么不同,群里问了一下,突然发现不同的是ADT的版本,公司电脑上的是18版本,而我家里或别的同事能运行的都是16版本,恍然大悟,搜索一下,故知道了真正的的原因: & & & 最新的ADT650) this.width=650;" src="http://blog.csdn.net/mad1989/article/details/7619136" style="display:inline-block" />650) this.width=650;" src="http://blog.csdn.net/mad1989/article/details/7619136" style="display:inline-font-family:font-size:14line-height:21text-align:left" />650) this.width=650;" src="/uploads/u/ff/29/ffa21d1c7bf512d122ab1.jpg" />都会自动生成一个Referenced Libraries,这个里面自动导入程序libs里的第三方jar包,或是手动在build path里添加的本地第三方jar包的路径。有了这个,程序运行就不会报错,这个是自动生成的,如果导入包后没有生成,clean或重新启动eclipse一下就会出现,自动关联。(无论是程序libs下还是本地路径下)。网上搜索给出的原因:------------------------------------------------------------------------------------------------------------------------------------------------------(/recent/dealingwithdependenciesinandroidprojects)关于这个问题,下面我截的这几个图能更容易地说清楚:650) this.width=650;" src="/uploads/u/64/b5/64bd819b574d5cc692f6afe8.gif" style="url( /e/u/lang/zh-cn/images/localimage.png) no-border:1px solid #ddd" word_img="file:///C:/Documents%20and%20Settings/Administrator/Local%20Settings/Application%20Data/youdao/ynote/images/72D18C663CE142DC93F039ADD407D02A/320151.png" />650) this.width=650;" src="http://blog.csdn.net/mad1989/article/details/7619136" />650) this.width=650;" src="http://blog.csdn.net/mad1989/article/details/7619136" />650) this.width=650;" src="http://blog.csdn.net/mad1989/article/details/7619136" />650) this.width=650;" src="/uploads/u/f2/f9/f2f9fdf2c22fe627fb17ce.jpg" />从左到右三个图分别是:1.我的ADT16版的工程(三个截图的细节图标有些不一样,因为第一个是Windows的Eclipse下截的图,而另两个是在Mac的Eclipse下截的)2.我修复前的ADT17版工程3.我修复后的ADT17版工程从中我们可以看到:1.蓝色方框中的内容变化,是由新版补丁引起的(后面详细说明)2.红色方框的内容变化,是我做的修复工作的结果我所做的修复工作如下:1.从标准的Java编译路径中移除第三方JAR包 & &在工程名称上点右键 & Properties & Java Build Path & Libraries标签 &移除Android SDK之外的所有第三方JAR包2把JAR包所在的文件夹名称从“lib”修改为“libs” & &这样做之后,ADT能自动找到所有在libs文件夹下的JAR包,把他们加到工程的依赖路径中,并直接显示在Android Dependecies分类下。3.清理整个工程(可能需要也可能不用)4.完成修复,可以正常运行了导致此问题的原因,是新版的ADT管理JAR包的方式发生成变化,旧版支持两种不同的JAR包引用(一是Android工程的库,另一个是标准的库),新版则把这两者合并到Android Dependencies下了。另外,新增加的annotations.jar提供了新的优化提示功能(更新信息请参阅/recent/ignoringlintwarnings)除了这个小问题,新版的ADT17看起来很不错,我也很喜欢新的优化检查功能。【更新】开发团队DroidUX找到另一个解决此问题的办法,我没有亲自测试,但看起来应该也行得通,内容如下:嗨,各位:下面是问题的解决办法:如果你引用了不在libs目录下的第三方JAR文件,比如你用了“classpath”变量,你可以通过导出引用来解决ADT17下报NoClassDefFoundError错误的问题。导出引用的步骤:只需要转到“Properties & Java Build Path & Order and Export”,然后把你想要导出引用的全部勾选上就可以了。祝顺利!——DroidUX团队
感谢关注 Ithao123Android频道,是专门为互联网人打造的学习交流平台,全面满足互联网人工作与学习需求,更多互联网资讯尽在 IThao123!
Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streaming access)文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。HDFS为海量的数据提供了存储,则MapReduce为海量的数据提供了计算。
产品设计是互联网产品经理的核心能力,一个好的产品经理一定在产品设计方面有扎实的功底,本专题将从互联网产品设计的几个方面谈谈产品设计
随着国内互联网的发展,产品经理岗位需求大幅增加,在国内,从事产品工作的大部分岗位为产品经理,其实现实中,很多从事产品工作的岗位是不能称为产品经理,主要原因是对产品经理的职责不明确,那产品经理的职责有哪些,本专题将详细介绍产品经理的主要职责
IThao123周刊Android中第三方jar包导入问题java.lang.NoClassDefFoundError
很多程序员在安卓项目中导入自定义jar包时遇上java.lang.NoClassDefFoundError问题,可是大家都只是转来转去,不加以深究。1.首先确认,jar包的jre版本与安卓的jre版本是否一致,具体查看:右击项目 Properties -----& Java Compiler
注:务必使两者jre版本一致,原因不细说了。2.正确的导入jar包:step1:新建libs,将所需jar包复制进libs文件夹中step2:右击项目选择Build Path------&AddLirariesstep3‘:选择User Libraries-------&User Libraries--------&New UserLibrary。注:填入名称后,Add jar,加入你要用的jar包。step4:也是相当关键的一步,打开BuildPath----&Configure Build Path-------&Order and Exceport,将刚才导入的UserLibraries打勾关联自此完成对jar包添加和引用,运行程序,查看结果:Hello为jar程序打印。
上一篇: 在Android平台中可以使用第三方外部JAR库文件,在Eclipse开发环境中,仅仅3步就可以使用第三方.jar文件: 1.在Package Explorer(包浏览器)面板中,右键单击鼠标在弹出的菜单中选择Properties(属性) 2.选择Java Build Path(Java构建路径),然后选择Libraries标
下一篇: 首先我们先来看下官方API对SurfaceView的介绍 SurfaceView的API介绍 Provides a dedicated drawing surface embedded inside of a view hierarchy. You can control the format of this surface and, if you like, the SurfaceView takes care of扫一扫关注官方微信

我要回帖

更多关于 classdefnotfound 的文章

 

随机推荐