ソフトウェア開発キット(SDK )とは、ソフトウェア開発ツールを1つのインストール可能なパッケージにまとめたものです。コンパイラ、デバッガ、場合によってはソフトウェアフレームワークなどが含まれているため、アプリケーションの作成が容易になります。通常、SDKは特定のハードウェアプラットフォームとオペレーティングシステムの組み合わせに特化しています。広告やプッシュ通知などの高度な機能を備えたアプリケーションを作成する場合、ほとんどのアプリケーションソフトウェア開発者は専用のソフトウェア開発キットを使用します。
プラットフォーム固有のアプリを開発するには、いくつかのSDKが必要です。たとえば、Javaプラットフォーム上でAndroidアプリを開発するには、Java Development Kitが必要です。iOSアプリケーション(アプリ)の場合は、iOS SDKが必要です。ユニバーサルWindowsプラットフォームの場合は、.NET Framework SDKが使用される場合があります。また、追加機能を提供し、アプリにインストールして分析、アプリのアクティビティに関するデータ、収益化オプションを提供するSDKもあります。これらのタイプのSDKの著名な開発元には、Google、Smaato、InMobi、Facebookなどがあります。
SDK は、特定のプログラミング言語とのインターフェースに使用される再利用可能な関数のデバイス内ライブラリの形式をとるアプリケーション プログラミング インターフェイス[ 1 ]の形をとることもあれば、特定の組み込みシステムと通信できるハードウェア固有のツールのように複雑な場合もあります。[ 2 ]一般的なツールには、デバッグ機能やその他のユーティリティがあり、多くの場合、統合開発環境で提供されます。[ 3 ] SDK には、主要な参照資料で説明されている点を明確にするためのドキュメントやチュートリアルに加えて、サンプル ソフトウェアや技術ノートが含まれる場合があります。[ 4 ] [ 5 ]
プラットフォーム SDK は、単一のモノリシック パッケージとしてではなく、複数のインストール可能なコンポーネントとして配布される場合があります。たとえば、Android SDK はアプリ開発に必要な複数のパッケージで構成されており、sdkmanagerコマンドライン ツールを使用すると、SDK パッケージの表示、インストール、更新、アンインストールが可能です。[ 6 ] [ 7 ] Microsoft の Windows SDK も同様に、Windows アプリケーション開発用のプラットフォーム ヘッダー、ライブラリ、Windows ランタイム メタデータ、ビルド ツールが含まれています。[ 8 ]
SDK には、互換性のないライセンスの下で開発されることを意図したソフトウェアの構築には適さないライセンスが含まれていることがよくあります。たとえば、プロプライエタリ SDK は一般的にフリー ソフトウェア開発と互換性がありませんが、GNU General Public Licenseの SDK は、法的理由からプロプライエタリ ソフトウェア開発と互換性がない可能性があります。[ 9 ] [ 10 ]ただし、GNU Lesser General Public Licenseの下で構築された SDK は、通常、プロプライエタリ開発に使用できます。[ 11 ] [ 12 ]基盤となるテクノロジーが新しい場合、SDK にハードウェアが含まれることがあります。たとえば、AirTagの 2012 年の近距離無線通信SDK には、必要なハードウェア スタックの支払い側と読み取り側の両方が含まれていました。[ 13 ]
平均的なAndroidモバイルアプリは15.6個の異なるSDKを実装しており、ゲームアプリは平均17.5個の異なるSDKを実装しています。[ 14 ] Androidモバイルアプリで最も人気のあるSDKカテゴリは、分析と広告です。[ 14 ]
SDK は安全でない場合があります (アプリ内に実装されているにもかかわらず、別のコードを実行するため)。悪意のある SDK (善意によるものか否かにかかわらず) は、ユーザーのデータプライバシーを侵害したり、アプリのパフォーマンスを低下させたり、Google Playや App Storeからアプリが削除される原因となることもあります。[ 15 ]新しいテクノロジーにより、アプリ開発者はクライアント SDK をリアルタイムで制御および監視できるようになりました。
特定のシステムやサブシステム向けの SDK の提供者は、ソフトウェアの代わりに、より具体的な用語を使用する場合があります。たとえば、Microsoft [ 16 ]とCitrix [ 17 ]は、デバイス ドライバを開発するためのドライバ開発キットを提供しています。
さまざまなプラットフォーム向けのソフトウェア開発キットの例としては、以下のようなものがあります。