我决定尝试为Android编程。我开始他们的教程,但无法运行第一个项目自动创建的应用程序。我怀疑我的计算机设置错误,但不知道在哪里搜索错误。
教程说要转到新创建的项目的目录并运行ant debug
。这会给我带来错误:java.lang.NoClassDefFoundError: com.android.sdklib.internal.build.DebugKeyProvider
。我怀疑SDK的安装不好,但不知道出了什么问题或者如何修复它。
我的电脑运行openSUSE 12.1 64位。我安装了Oracte JDK版本1.7.0_04,Android SDK包括工具和Android 4.0和4.0.3平台。安装完成后,我将android tools文件夹添加到我的路径环境中,并为我的手机添加了udev规则,但没有进一步自定义。 Adb看到我的手机,我可以用ddms捕捉屏幕截图。我没有使用Eclipse。
我是否错过了部分设置?我该如何解决这个问题?
更新我找到了mailing list discussion关于有同样问题的人。他通过更新名为" keytool"的符号链接解决了这个问题。在他们的/ usr / bin中,指向正确的文件。我没有这样的链接,所以我创建了它。问题依然存在。回答帖子的人提出了一个名为" jarutil.jar"的文件。可能会从SDK中丢失。即使从头开始重新安装,我的SDK中也没有这样的文件。由于讨论已超过一年,我甚至不知道当前版本中是否存在此类文件。
以下是ant debug
命令的完整输出:
rumtscho @布拉德伯里:〜的/ dev /学习-机器人/ MyFirstApp> ant debug Buildfile: /home/rumtscho/dev/learn-android/MyFirstApp/build.xml
-set模式检查:
-set-调试文件:
-set调试模式:
-debug-混淆检查:
-setup: [echo]如果需要,创建输出目录...... [echo]收集MyFirstApp的信息...... [setup] Android SDK工具修订版19 [设置]项目目标:Android 4.0.3 [setup] API级别:15 [建立] [建立] - - - - - - - - - [setup]解决库依赖关系: [setup]没有库依赖项。 [建立] [建立] - - - - - - - - - [setup] API< = 15:将annotations.jar添加到类路径中。 [建立] [建立] - - - - - - - - - [setup]警告:未设置minSdkVersion值。应用程序将安装在所有Android版本上。
-build-设置:
-pre-构建:
-code根: [回声] ---------- [echo]处理aidl文件...... [aidl]没有要编译的AIDL文件。 [回声] ---------- [echo]处理RenderScript文件... [renderscript]无需编译的RenderScript文件。 [回声] ---------- [echo]处理资源...... [aapt]没有改变资源。 R.java和Manifest.java未受影响。 [回声] ---------- [echo]处理BuildConfig类... [buildconfig]生成BuildConfig类。
-pre编译:
-compile: [javac]将1个源文件编译为/ home / rumtscho / dev / learn-android / MyFirstApp / bin / classes
-post编译:
-obfuscate:
-dex: [dex]找到修改后的输入文件 [dex]将编译文件和外部库转换为/home/rumtscho/dev/learn-android/MyFirstApp/bin/classes.dex ...
-crunch:[crunch]在源目录中处理PNG文件:/ home / rumtscho / dev / learn-android / MyFirstApp / res [crunch] To 目的地目录:/ home / rumtscho / dev / learn-android / MyFirstApp / bin / res
[crunch]打破了0个PNG文件以更新缓存-package资源: [aapt]创建完整的资源包...
-package:[apkbuilder]当前构建类型与以前的构建不同:强制执行apkbuilder。 [apkbuilder]创建 MyFirstApp-debug-unaligned.apk并使用调试密钥对其进行签名...
BUILD FAILED /home/rumtscho/android-sdk-linux/tools/ant/build.xml:886: 执行此行时发生以下错误: /home/rumtscho/android-sdk-linux/tools/ant/build.xml:897: 执行此行时发生以下错误: /home/rumtscho/android-sdk-linux/tools/ant/build.xml:307: java.lang.NoClassDefFoundError: com.android.sdklib.internal.build.DebugKeyProvider at java.lang.Class.initializeClass(libgcj.so.12)at com.android.sdklib.build.ApkBuilder.getDebugKeystore(ApkBuilder.java:919) 在com.android.ant.ApkBuilderTask.execute(ApkBuilderTask.java:334)
在 org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
在java.lang.reflect.Method.invoke(libgcj.so.12)at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 在org.apache.tools.ant.Task.perform(Task.java:348)at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68)
在 org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
在java.lang.reflect.Method.invoke(libgcj.so.12)at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 在org.apache.tools.ant.Task.perform(Task.java:348)at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:398) 在 org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
在java.lang.reflect.Method.invoke(libgcj.so.12)at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 在org.apache.tools.ant.Task.perform(Task.java:348)at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68)
在com.android.ant.IfElseTask.execute(IfElseTask.java:124)at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
在java.lang.reflect.Method.invoke(libgcj.so.12)at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 在org.apache.tools.ant.Task.perform(Task.java:348)at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68)
在com.android.ant.IfElseTask.execute(IfElseTask.java:124)at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
在java.lang.reflect.Method.invoke(libgcj.so.12)at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 在org.apache.tools.ant.Task.perform(Task.java:348)at org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68)
在 org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
在java.lang.reflect.Method.invoke(libgcj.so.12)at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 在org.apache.tools.ant.Task.perform(Task.java:348)at org.apache.tools.ant.taskdefs.MacroInstance.execute(MacroInstance.java:398) 在 org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
在java.lang.reflect.Method.invoke(libgcj.so.12)at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 在org.apache.tools.ant.Task.perform(Task.java:348)at org.apache.tools.ant.Target.execute(Target.java:390)at org.apache.tools.ant.Target.performTasks(Target.java:411)at at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399)
在org.apache.tools.ant.Project.executeTarget(Project.java:1368)at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 在org.apache.tools.ant.Project.executeTargets(Project.java:1251)
在org.apache.tools.ant.Main.runBuild(Main.java:809)at org.apache.tools.ant.Main.startAnt(Main.java:217)at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280)at at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109)引起 by:java.lang.ClassNotFoundException: java.security.KeyStore $ ProtectionParameter at org.apache.tools.ant.AntClassLoader.findClassInComponents(AntClassLoader.java:1361) 在 org.apache.tools.ant.AntClassLoader.findClass(AntClassLoader.java:1311) 在 org.apache.tools.ant.AntClassLoader.loadClass(AntClassLoader.java:1064) 在java.lang.ClassLoader.loadClass(libgcj.so.12)at java.lang.Class.initializeClass(libgcj.so.12)... 48 more总时间:3秒
答案 0 :(得分:1)
Oracle JDK rpm不以SuSE方式配置Java。特别是,您的JAVA_HOME可能未正确设置。
尝试JAVA_HOME=/usr/java/default ant debug
。
还要确保readlink -f `which java`
指向您的Oracle JDK
您似乎可以在JAVA_HOME
/etc/java/java.conf
Apache Ant手册建议使用以下方法设置ant需要的环境变量:
export ANT_HOME=/usr/local/ant
export JAVA_HOME=/usr/local/jdk-1.5.0.05
export PATH=${PATH}:${ANT_HOME}/bin
其中jdk编号应指向计算机上安装的JDK编号。这也永久地设置变量。