APK としてパッケージ化して Android デバイスにデプロイすると、一部の Java コードが実行/動作しないのはなぜですか? Google Guice、Apache Camel、その他多くのプロジェクトのようなもの。それはすべて単なる「Java」ではありませんか?
3 に答える
いいえ。アプリケーションのライフ サイクルの管理に役立つカスタム ライブラリとフレームワークが多数あります。
Camel and Guiceが何であるか正確にはわかりません。ただし、(間違っている場合は修正してください)はAndroid Frameworkです。オペレーティング システムには、実行するものをスケジュールする方法があります。それがアプリケーションのライフサイクル全体です。また、純粋な Java コードの実行を開始した場合、OS のフックはどこにあるのでしょうか? コントロールする何かが必要です。理論的には、あなたのコードは DM で問題なく実行できると思いますが、何かとうまく動作しないと思います。
フランクの答えを拡張させてください。ディーゼルからエンジンを外して普通の車に乗せたら・・・ それは実行されますか?どちらもエンジンです。
簡単な答え: Android は安全であることを望んでいます。パンツの席でコードをむやみに実行するのは好きではありません。Java コードを実行するには、ラッパーが必要です。そのラッパーは APK であり、ある程度は Android マニフェストです。Android がこれらの情報を確認すると、何が実行されているか、どのように実行するかがわかります。標準的な車のディーゼル エンジンのアナロジーに戻りましょう。それを機能させることは可能ですが、車 (Android) がエンジン (ディーゼル エンジン) の処理方法を認識できるように、何らかの変更を加える必要があります。
Android の心臓部は Linux です。あなたの考え方では、Linux ネイティブ アプリケーションを実行できるはずですよね? これで私がどこに向かっているのかがわかります。
さらに短い答え: 多くの点で、Android はまったく Java ではありません。これは独自の言語であり、警告や癖がありますが、構文は同じです。
「普通の Java」または「100% 純粋な Java」は、言語仕様の外には実際には存在しません。まったく異なる仮想マシン モデルと異なるクラス ライブラリを扱っています。 Dalvik VMは、デスクトップ JVM 実装 (Sun/Oracle、OpenJDK など) との互換性を意図して実装されたわけではありません。Java バイトコードを直接実行することすらありません。これは、Dalvik 固有の命令セットにコンパイルされるか、それ以外の場合は、より小さな実行可能パッケージを作成し、多くの場合リソースに制約のあるモバイル プラットフォームで適切に実行されるようにマングルされます。