【发布时间】:2017-11-21 12:54:18
【问题描述】:
我有 1 个使用 Android Keystore API 的 java 程序。 我们需要运行这个程序来验证基于 android 的板上的一些签名操作。
通过 android studio 运行这个程序可以正常工作,即创建一个示例应用程序并安装该 apk。 但是我们需要通过命令行来运行这个程序,因为实际的程序不会是apk格式的。
当试图将此程序转换为 dex 格式时,它会抛出错误。
通过传递 android.jar 作为类路径编译成功
javac -cp /<path>/Android/Sdk/platforms/android-23/android.jar ApiClientAndroidKeyStore.java
但 dex 转换失败并出现以下错误:
UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.RuntimeException: Exception parsing classes
at com.android.dx.command.dexer.Main.processClass(Main.java:752)
at com.android.dx.command.dexer.Main.processFileBytes(Main.java:718)
at com.android.dx.command.dexer.Main.access$1200(Main.java:85)
at com.android.dx.command.dexer.Main$FileBytesConsumer.processFileBytes(Main.java:1645)
at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
at com.android.dx.command.dexer.Main.processOne(Main.java:672)
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:574)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:311)
at com.android.dx.command.dexer.Main.run(Main.java:277)
at com.android.dx.command.dexer.Main.main(Main.java:245)
at com.android.dx.command.Main.main(Main.java:106)
Caused by: com.android.dx.cf.iface.ParseException: bad class file magic (cafebabe) or version (0034.0000)
at com.android.dx.cf.direct.DirectClassFile.parse0(DirectClassFile.java:472)
at com.android.dx.cf.direct.DirectClassFile.parse(DirectClassFile.java:406)
at com.android.dx.cf.direct.DirectClassFile.parseToInterfacesIfNecessary(DirectClassFile.java:388)
at com.android.dx.cf.direct.DirectClassFile.getMagic(DirectClassFile.java:251)
at com.android.dx.command.dexer.Main.parseClass(Main.java:764)
at com.android.dx.command.dexer.Main.access$1500(Main.java:85)
at com.android.dx.command.dexer.Main$ClassParserTask.call(Main.java:1684)
at com.android.dx.command.dexer.Main.processClass(Main.java:749)
进一步调试发现 android.jar 仅包含 API 定义,但实际源代码不存在。
1) 是否有任何包含源代码的 android.jar 可用(大小可能是一个问题)
2) 我们可以在dex转换步骤传递源代码吗
3) apk 是否包含源代码,同时构建或引用就足够了
4) 我们可以在命令行中使用 android studio 在构建 apk 时使用的相同命令吗
【问题讨论】:
标签: java android android-studio android-gradle-plugin dex