无法编译Android测试应用程序

时间:2012-05-31 23:13:17

标签: android sdk development-environment

我决定尝试为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秒

1 个答案:

答案 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编号。这也永久地设置变量。