2

我决定尝试为 Android 编程。我开始了他们的教程,但无法运行第一个项目自动创建的应用程序。我怀疑我的计算机设置错误,但不知道在哪里搜索错误。

教程说要转到新创建的项目的目录并运行ant debug. 这对我来说是一个错误:java.lang.NoClassDefFoundError: com.android.sdklib.internal.build.DebugKeyProvider。我怀疑 SDK 安装错误,但不知道出了什么问题或如何修复它。

我的电脑运行 openSUSE 12.1 64 位。我安装了 Oracte JDK 版本 1.7.0_04,以及包括工具和平台 Android 4.0 和 4.0.3 的 Android SDK。安装后,我将android工具文件夹添加到我的路径环境中,并为我的手机添加了udev规则,但没有做进一步的自定义。adb 看到我的手机,我可以用 ddms 截屏。我不使用 Eclipse。

我错过了设置的某些部分吗?如何解决此问题?

更新我发现了一个关于有同样问题的人的邮件列表讨论。他通过在他们的 /usr/bin 中更新一个名为“keytool”的符号链接来解决这个问题,以指向正确的文件。我没有这样的链接,所以我创建了它。问题仍然存在。回答该线程的人建议 SDK 中可能缺少名为“jarutil.jar”的文件。即使从头开始重新安装,我的 SDK 中也没有这样的文件。由于讨论已经一年多了,我什至不知道当前版本中是否应该存在这样的文件。

以下是该ant debug命令的完整输出:

rumtscho@bradbury:~/dev/learn-android/MyFirstApp> ant debug Buildfile: /home/rumtscho/dev/learn-android/MyFirstApp/build.xml

-设置模式检查:

-设置调试文件:

-设置调试模式:

-调试混淆检查:

-setup: [echo] 根据需要创建输出目录... [echo] 为 MyFirstApp 收集信息... [setup] Android SDK Tools Revision 19 [setup] 项目目标:Android 4.0.3 [setup] API 级别:15 [ setup] [setup] ------------------ [setup] 解决库依赖项:[setup] 没有库依赖项。[setup] [setup] ------------------ [setup] API<=15:将 annotations.jar 添加到类路径。[设置] [设置] ------------------ [设置] 警告:未设置 minSdkVersion 值。应用程序将安装在所有 Android 版本上。

-构建设置:

-预构建:

-code-gen: [echo] ---------- [echo] 处理aidl 文件... [aidl] 没有要编译的AIDL 文件。[echo] ---------- [echo] 处理 RenderScript 文件... [renderscript] 没有要编译的 RenderScript 文件。[echo] ---------- [echo] 处理资源... [aapt] 没有更改的资源。R.java 和 Manifest.java 保持不变。[echo] ---------- [echo] 处理 BuildConfig 类... [buildconfig] 生成 BuildConfig 类。

-预编译:

-compile: [javac] 将 1 个源文件编译到 /home/rumtscho/dev/learn-android/MyFirstApp/bin/classes

-编译后:

- 混淆:

-dex: [dex] 找到修改过的输入文件 [dex] 将编译后的文件和外部库转换成/home/rumtscho/dev/learn-android/MyFirstApp/bin/classes.dex...

-crunch:[crunch] 在源目录中处理 PNG 文件:/home/rumtscho/dev/learn-android/MyFirstApp/res [crunch] 到目标目录:/home/rumtscho/dev/learn-android/MyFirstApp/bin/res
[crunch] 压缩 0 个 PNG 文件以更新缓存

-package-resources: [aapt] 创建完整资源包...

-package: [apkbuilder] 当前构建类型与以前的构建不同:强制 apkbuilder 运行。[apkbuilder] 创建 MyFirstApp-debug-unaligned.apk 并使用调试密钥对其进行签名...

构建失败/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在 java.lang.Class.initializeClass(libgcj.so.12) 在 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) 在 org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 在 org.apache.tools.ant.Task.perform (Task.java:348) 在 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) at org.apache.tools.ant.Task.perform(Task. java:348) 在 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) 在 org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 在 org.apache.tools.ant.Task.perform (Task.java:348) 在 org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68)
在 com.android.ant.IfElseTask.execute(IfElseTask.java:124) 在 org.apache。 tools.ant.UnknownElement.execute(UnknownElement.java:291)
at 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) 在 org.apache.tools.ant.taskdefs.Sequential.execute(Sequential.java:68)
在 com.android.ant.IfElseTask .execute(IfElseTask.java:124) 在 org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291)
在 java.lang.reflect.Method.invoke(libgcj.so.12) 在 org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 在 org.apache.tools.ant.Task.perform (Task.java:348) 在 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) at org.apache.tools.ant.Task.perform(Task. java:348) 在 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) 在 org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 在 org.apache.tools.ant.Task.perform (Task.java:348) 在 org.apache.tools.ant.Target.execute(Target.java:390) 在 org.apache.tools.ant.Target.performTasks(Target.java:411) 在 org.apache。 tools.ant.Project.executeSortedTargets(Project.java:1399)
at 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) 在 org.apache.tools.ant.Main.startAnt(Main.java:217) 在 org.apache.tools.ant.launch.Launcher .run(Launcher.java:280) at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109) 原因: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) 在 java.lang.Class.initializeClass(libgcj.so.12) ...48 更多

总时间:3秒

4

1 回答 1

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号。这也会永久设置变量。

于 2012-06-01T19:29:17.997 回答