Android - dx麻烦处理 - 错误使用或错误使用核心类2012,Android 4更新

时间:2012-09-15 16:58:34

标签: android ant dalvik dex

当我在尝试构建应用程序时收到“错误建议或错误使用核心类”错误时,我搜索了Stackoverflow,并且正如一些人所建议的那样,使用ant和jarjar来构建应用程序。

在dx步骤中,ant构建失败,并在下面报告错误。

我在网上搜索了有关如何修复“无法强制”错误(见下文)的建议,但没有发现任何有用的信息。

请注意,ant build中的jarjar步骤似乎有效。当我检查bin / repackagedclasses.jar中java目录的内容时,它们是空的,所有内容都被转移到等效的重命名目录(/ java)。

请注意,我遵循的建议(使用ant和jarjar)已超过两年,并应用于android 2.x.可能(可能?)使用android 4和相关的基础设施它们将无法工作,只是猜测。

最后一点。我在sdk / platform-tools中更改了dx,如下所示:

exec java $javaOpts -jar "$jarpath" "$@"
exec java $javaOpts -jar "$jarpath" --core-library "$@"

无论是否进行上述更改,都不会对ant构建或Eclipse构建产生任何影响。

-dex:
      [dex] Converting compiled files and external libraries into /home/adonnini/workspace3/CommManagerN6/bin/classes.dex...
       [dx] 
       [dx] UNEXPECTED TOP-LEVEL EXCEPTION:
       [dx] com.android.dx.util.ExceptionWithContext: can't coerce string{"android.permission.ACCESS_CACHE_FILESYSTEM"} to Lcommmanager/java/lang/String;
       [dx]     at com.android.dx.util.ExceptionWithContext.withContext(ExceptionWithContext.java:46)
       [dx]     at com.android.dx.dex.cf.CfTranslator.processFields(CfTranslator.java:176)
       [dx]     at com.android.dx.dex.cf.CfTranslator.translate0(CfTranslator.java:133)
       [dx]     at com.android.dx.dex.cf.CfTranslator.translate(CfTranslator.java:87)
       [dx]     at com.android.dx.command.dexer.Main.processClass(Main.java:483)
       [dx]     at com.android.dx.command.dexer.Main.processFileBytes(Main.java:455)
       [dx]     at com.android.dx.command.dexer.Main.access$400(Main.java:67)
       [dx]     at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:394)
       [dx]     at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:245)
       [dx]     at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:131)
       [dx]     at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:109)
       [dx]     at com.android.dx.command.dexer.Main.processOne(Main.java:418)
       [dx]     at com.android.dx.command.dexer.Main.processAllFiles(Main.java:329)
       [dx]     at com.android.dx.command.dexer.Main.run(Main.java:206)
       [dx]     at com.android.dx.command.dexer.Main.main(Main.java:174)
       [dx]     at com.android.dx.command.Main.main(Main.java:91)
       [dx] Caused by: java.lang.UnsupportedOperationException: can't coerce string{"android.permission.ACCESS_CACHE_FILESYSTEM"} to Lcommmanager/java/lang/String;
       [dx]     at com.android.dx.dex.cf.CfTranslator.coerceConstant(CfTranslator.java:210)
       [dx]     at com.android.dx.dex.cf.CfTranslator.processFields(CfTranslator.java:160)
       [dx]     ... 14 more
       [dx] ...while processing ACCESS_CACHE_FILESYSTEM Lcommmanager/java/lang/String;
       [dx] ...while processing android/commmanager/Manifest$permission.class
       [dx] 
       [dx] 1 error; aborting

BUILD FAILED
/home/adonnini/workspace3/CommManagerN6/build.xml:964: The following error occurred while executing this line:
/home/adonnini/workspace3/CommManagerN6/build.xml:376: null returned: 1

1 个答案:

答案 0 :(得分:0)

您没有说明您传递给jarjar的参数,但从它的外观来看,您可能已经告诉它将所有对java.lang中类的引用更改为您的包名称空间。如果这就是你所做的,那肯定是行不通的,而你所得到的错误只是冰山一角。

以下是错误的粗略翻译:声明某段代码采用类commmanager.java.lang.String的实例,但它正在传递java.lang.String的实例(即任何类的实例)普通字符串常量是一个实例)。这两个类之间没有继承关系,因此代码无效。

至少,你可能想让你的jarjar调用更具体地说明它正在修改的类名。