6

Androidアプリケーションを実行するときの次の警告の意味を誰かに説明してもらえますか(警告は指定された順序で出力されます)。

04-17 15:29:11.693: I/dalvikvm(4442): DexOpt: access denied from Lcom/kirona/iclient/db/core/services/impl/MiscDatabaseModuleDaoImpl; to field Lcom/kirona/iclient/database/common/impl/AbstractDatabaseModuleDao;.logger
04-17 15:29:11.653: W/dalvikvm(4442): VFY: unable to resolve static field 30 (logger) in Lcom/kirona/iclient/db/core/services/impl/MiscDatabaseModuleDaoImpl;
04-17 15:29:11.653: D/dalvikvm(4442): VFY: replacing opcode 0x62 at 0x0001    
04-17 15:29:11.693: D/dalvikvm(4442): VFY: dead code 0x0046-006e in Lcom/kirona/iclient/db/core/services/impl/MiscDatabaseModuleDaoImpl;.getSequenceNextVal (Ljava/lang/String;)J

アプリケーションは正常に動作しているようですが、dalvikvmをクラッシュさせる同様のエラーを伴うより複雑なアプリケーションがあるため、問題を理解する必要があります。

4

1 に答える 1

4

問題は、MiscDatabaseModuleDaoImplクラスがフィールドにアクセスしようとしているAbstractDatabaseModuleDao.loggerが、アクセス制限(つまり、プライベート、保護など)のためにアクセスできないことであるように見えます。この場合、このフィールドにアクセスしているsget-objectオペコード(opcode 0x62)は、検証例外をスローするものに置き換えられます。これを実行すると、ランタイムクラッシュが発生する可能性があります。

さらに、最後のメッセージはMiscDatabaseModuleDaoImpl.getSequenceNextValメソッドのデッドコードを参照しています。これは無害です。実行時に問題が発生することはありません。ただし、デッドコードが何であるかを正確に把握し、それを削除することは悪い考えではありません。--code-offsetsオプションを指定してbaksmaliを使用してアプリケーションを逆アセンブルし、そのメソッドの逆アセンブルを確認できます。--code-offsetsオプションは、オフセットを含む各命令の前にコメントを配置します。エラーメッセージによると、0x46から0x6eへのオフセットはデッドコードです。また、近くにディレクティブがあるはず.lineです。これは、元のJavaファイルの対応する行番号になります。

于 2012-04-17T18:17:38.760 に答える