0

アプリケーションをビルドしようとしているときに「不適切または誤ったコア クラスの使用法」というエラーを受け取ったとき、Stackoverflow を検索し、いくつかの提案に従って、ant と jarjar を使用してアプリケーションをビルドしました。

Ant ビルドは dx ステップで失敗し、以下に報告されたエラーが発生しました。

「強制できません」エラー (以下を参照) を修正する方法に関する提案を Web で検索しましたが、役立つものは何も見つかりませんでした。

ant ビルドの jarjar ステップが機能しているように見えたことに注意してください。bin/repackagedclasses.jar の Java ディレクトリの内容を確認したところ、それらは空で、すべての内容が名前が変更された同等のディレクトリ (/java) に転送されました。

私が従った (ant と jarjar を使用した) 提案は 2 年以上前のものであり、Android 2.x に適用されたことにも注意してください。Android 4 および関連するインフラストラクチャでは機能しない可能性があります (おそらく?)。

最後に 1 点。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
4

1 に答える 1

0

どの引数を に渡したのかは言いませんでしjarjarたが、見た目から、クラスへのすべての参照をjava.langパッケージ名前空間に変更するように指示した可能性があります。それがあなたがしたことであるなら、それは確かにうまくいかず、あなたが得ているエラーは氷山の一角にすぎません.

エラーの大まかな翻訳は次のとおりです。コードの一部が class のインスタンスを受け取るように宣言されていますがcommmanager.java.lang.String、インスタンスが渡されていますjava.lang.String(つまり、通常の文字列定数がインスタンスであるクラス)。これら 2 つのクラスの間には継承関係がないため、コードは無効です。

jarjar少なくとも、マングリングしているクラス名について呼び出しをより具体的にしたいと思うでしょう。

于 2012-09-16T00:36:13.287 に答える