コアコンセプト / Androidランタイム / 概要

NativeScript用Androidランタイムとは何か?

NativeScriptは、開発者がJavaScriptおよびCSSを使用してAndroidおよびiOS用の真のネイティブモバイルアプリケーションを作成できるようにするフレームワークです。 各モバイルプラットフォームには独自のエコシステムがあり、完全に異なる開発ツールと言語(Android用のJava/KotlinとiOS用のObjective C/Swift)を提供します。 JavaScriptコードを対応するネイティブAPIに変換するには、何らかのプロキシメカニズムが必要です。 これは、NativeScriptの「ランタイム」部分が担当するものです。 Androidランタイムは、JavaScriptとAndroidの世界をつなぐ「橋」と考えることができます。 Android用のNativeScriptアプリケーションは、JavaScriptファイルの他にランタイムも埋め込まれている標準のネイティブパッケージ(apk)です。

ビルディングブロック

Androidランタイム図

Androidランタイムは、次の主要なモジュールの上に構築されています。

GoogleのV8 JavaScript仮想マシン

JavaScriptコードの処理を担当します。 Node.jsがJavaScriptを処理し、JavaScriptを基礎となるシステムAPIに変換する方法とよく似ています。 JavaScriptオブジェクトの各ゲッター/セッターを処理し、必要に応じてAndroid APIを動的に呼び出します。 仮想マシンはアプリケーションのプロセスにロードされ、メインUIスレッドで動作します。 V8は、JIT(Just-In-Time)コンパイル手法を使用してJavaScriptコードを処理します。

メタデータ

これは、認識している(処理する可能性がある)Android APIをリストするための独自のカスタムデータ形式です。 最小限の必要な情報を保存し、小さいサイズと非常に効率的な読み取りアクセスを提供します。 実行時にAPI署名を検索するためにJavaリフレクションメカニズムを使用していない理由を疑問に思うかもしれません。 答えは簡単です:リフレクションは地獄のように遅く、単に使用されないかもしれず、単純なアプリケーションを何重にも遅くします。 メタデータは事前に生成され、アプリケーションパッケージ(apk)に埋め込まれます。 生成プロセスでは、バイトコード読み取りを使用して、アプリの依存関係またはAndroid SDKから提供されるすべての利用可能なJava/Kotlin APIに関する情報を収集します。

動的クラスジェネレーター

これは、Android APIを呼び出すことと、型の継承とインターフェイスの実装を許可することです。次のシナリオを想像してください。

これらの場合、ジェネレーターは目的の実装でJavaクラスを動的に作成し、メソッドのオーバーライドとインターフェースの実装を可能にします。 生成プロセスは高度に最適化されており、アプリケーションの実行の最初にわずかなオーバーヘッドが追加されます。

マーシャリングサービス

2つの異なる世界であるJavaScriptとAndroidは、異なるタイプのデータを使用します。 たとえば、java.lang.String はJavaScriptのStringオブジェクトとは異なります。 Javaの異なる数値型とJavaScriptのNumberプリミティブについても同様です。 マーシャリングサービスは、Java/JavaScript呼び出しとの間のデータ変換を処理します。次のコードを想像してください:

// JavaScript string
var path = "/path/to/my/file";
// JavaScript string is converted to java.lang.String
var javaFile = new java.io.File(path);
// Name is converted from java.lang.String to JavaScript string
var name = javaFile.getName();
入門

コアコンセプト

ユーザーインターフェース

ツール

ハードウェアアクセス

プラグインの開発

リリース

アプリテンプレート

パフォーマンスの最適化

フレームワークモジュール

ガイド

サポートを受ける

トラブルシューティング

Siedkick