2

APK としてパッケージ化して Android デバイスにデプロイすると、一部の Java コードが実行/動作しないのはなぜですか? Google Guice、Apache Camel、その他多くのプロジェクトのようなもの。それはすべて単なる「Java」ではありませんか?

4

3 に答える 3

2

いいえ。アプリケーションのライフ サイクルの管理に役立つカスタム ライブラリとフレームワークが多数あります。

Camel and Guiceが何であるか正確にはわかりません。ただし、(間違っている場合は修正してください)はAndroid Frameworkです。オペレーティング システムには、実行するものをスケジュールする方法があります。それがアプリケーションのライフサイクル全体です。また、純粋な Java コードの実行を開始した場合、OS のフックはどこにあるのでしょうか? コントロールする何かが必要です。理論的には、あなたのコードは DM で問題なく実行できると思いますが、何かとうまく動作しないと思います。

于 2012-07-06T18:46:22.940 に答える
1

フランクの答えを拡張させてください。ディーゼルからエンジンを外して普通の車に乗せたら・・・ それは実行されますか?どちらもエンジンです。

簡単な答え: Android は安全であることを望んでいます。パンツの席でコードをむやみに実行するのは好きではありません。Java コードを実行するには、ラッパーが必要です。そのラッパーは APK であり、ある程度は Android マニフェストです。Android がこれらの情報を確認すると、何が実行されているか、どのように実行するかがわかります。標準的な車のディーゼル エンジンのアナロジーに戻りましょう。それを機能させることは可能ですが、車 (Android) がエンジン (ディーゼル エンジン) の処理方法を認識できるように、何らかの変更を加える必要があります。

Android の心臓部は Linux です。あなたの考え方では、Linux ネイティブ アプリケーションを実行できるはずですよね? これで私がどこに向かっているのかがわかります。

さらに短い答え: 多くの点で、Android はまったく Java ではありません。これは独自の言語であり、警告や癖がありますが、構文は同じです。

于 2012-07-06T19:13:34.093 に答える
1

「普通の Java」または「100% 純粋な Java」は、言語仕様の外には実際には存在しません。まったく異なる仮想マシン モデルと異なるクラス ライブラリを扱っています。 Dalvik VMは、デスクトップ JVM 実装 (Sun/Oracle、OpenJDK など) との互換性を意図して実装されたわけではありません。Java バイトコードを直接実行することすらありません。これは、Dalvik 固有の命令セットにコンパイルされるか、それ以外の場合は、より小さな実行可能パッケージを作成し、多くの場合リソースに制約のあるモバイル プラットフォームで適切に実行されるようにマングルされます。

于 2012-07-06T19:15:23.843 に答える