当我在尝试构建应用程序时收到“错误建议或错误使用核心类”错误时,我搜索了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
答案 0 :(得分:0)
您没有说明您传递给jarjar
的参数,但从它的外观来看,您可能已经告诉它将所有对java.lang
中类的引用更改为您的包名称空间。如果这就是你所做的,那肯定是行不通的,而你所得到的错误只是冰山一角。
以下是错误的粗略翻译:声明某段代码采用类commmanager.java.lang.String
的实例,但它正在传递java.lang.String
的实例(即任何类的实例)普通字符串常量是一个实例)。这两个类之间没有继承关系,因此代码无效。
至少,你可能想让你的jarjar
调用更具体地说明它正在修改的类名。