なぜAndroidアプリがUbuntu Touchでネイティブに実行できないのか疑問に思っています。つまり、すべてLinuxだけではないのでしょうか。
なぜAndroidアプリがUbuntu Touchでネイティブに実行できないのか疑問に思っています。つまり、すべてLinuxだけではないのでしょうか。
回答:
短い答えは「いいえ」です。
厳密に言えば、Linuxカーネルは、それが実行されているハードウェアへの直接的なインターフェース以上のものを提供しません。Androidアプリケーションが依存する追加のAndroidフォン固有のAPI、プログラム、アプリケーションなどのスタックがあります。さらに、Androidは汎用Linuxカーネルでは実行されませんが、代わりに、OSを実行する特定の目的でGoogleによって高度にカスタマイズされたカーネルで実行されます。
Androidアプリケーションを別のシステムで実行するために必要なスタック全体を技術的に再現することが技術的に可能であっても、肥大化し、非常に効率が悪くなります。
Nokia n900はmaemoを実行します魔女はLinux OSですが、開発されたダルビック環境を介してAndroidのアプリを実行できますが、市場に投入することもレピシトリーもすることはありません。どうして?n900でdalvikを開発した社会だけが知っています。今、別のイニシアチブコールapkenvがありました。n900で一部のAndroidゲームを実行するために追加することはそれほど多くはないようで、gpuまたはcpu powerまたはmaemoのデスクトップに関係なく、アプリはエミュレーションのように湖で実行されますが、一部は完全に実行されません。だからubuntu touchについては技術の問題ではないかもしれません(私は間違っているかもしれませんが、1つの公式ubuntuのタッチフォンはxiaomi wichがAndroidにも使用されているため、この場合ハードウェアは問題ではありません)
あなたの質問への答えは大きいです。
AndroidはUbuntuタッチとは完全に異なりますが、AndroidはLinuxカーネルに基づいていますが、AndroidのネイティブアプリケーションがLinux上で実行できることを意味するわけではありません。
異なるOS間のカーネルの類似性は、これらの異なるOS上でアプリケーションを実行可能にしません。カーネルは、システムの最下位のソフトウェア層です。カーネルの上には、システムソフトウェアとアプリケーションインターフェイスで構成されるユーザー空間があります。
同じカーネルのOSでは、ユーザー空間がまったく異なる場合があり、ネイティブアプリケーションは特定のユーザー空間で実行されます。
さらに、Androidアプリは通常Javaを使用して開発され、AndroidアプリはJVMからバイトコードを入力として受け取るランタイム環境(DalvikまたはART)で実行されますが、Linuxアプリケーションはコンパイル時に直接マシンコードに変換されます。
C ++を使用してAndroid用に開発されたアプリケーションは、Linux環境で直接実行することはできません。Linuxシステム用に最初にコンパイルする必要があります。