Когда я получил сообщение об ошибке «Опрометчивое или ошибочное использование основного класса» при попытке создать свое приложение, я провел поиск в Stackoverflow и, как некоторые предлагали, использовал ant и jarjar для сборки приложения.
Сбой сборки ant на шаге dx с ошибкой, о которой сообщается ниже.
Я искал в Интернете предложения о том, как исправить ошибку «не могу принудить» (см. Ниже), и не нашел ничего, что помогло бы.
Обратите внимание, что шаг jarjar в сборке ant работал. Когда я проверил содержимое каталогов java в bin/repackagedclasses.jar, они были пусты, и все их содержимое было перенесено в эквивалентные переименованные каталоги (/java).
Также обратите внимание, что предложения, которым я следовал (используя ant и jarjar), были старше двух лет и применялись к Android 2.x. Возможно (вероятно?), что с андроидом 4 и сопутствующей инфраструктурой они работать не будут, просто предположение.
Последний пункт. Я изменил dx в sdk/platform-tools следующим образом:
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