Android React-Native Reanimated を作成する際の CMake のパス長の問題を修正する

Android React-Native Reanimated を作成する際の CMake のパス長の問題を修正する
Path Length

React Native での CMake ビルド中の一般的なパス長エラー

Windows 上で React Native を使用する開発者は、Android プロジェクトを構築するときにパスの長さの制限に遭遇することがよくあります。繰り返し発生する問題の 1 つは、 パッケージとその CMake 構成により、ビルドの失敗につながる可能性があります。

このエラーは通常、次のようなメッセージによって示されます。 これは、Windows オペレーティング システムで許容されるパスの長さを超える特定のディレクトリが作成されることを示唆しています。これは、開発者が次を使用してアプリを構築しようとする場合に特にイライラする可能性があります。 そして システムを構築します。

プロジェクトをドライブのルート近くに再配置したり、ビルド構成を変更したりしても、これらのパス長の問題は解決しない場合があります。このような対策は場合によっては役立つかもしれませんが、常に恒久的な修正を提供するとは限りません。

作業中にこの問題が発生した場合は、 、原因を理解し、別の解決策を検討することが重要です。問題、考えられる解決策、将来的にこの複雑さを回避する方法について詳しく見ていきましょう。

指示 使用例
cp -r このコマンドは、ディレクトリを再帰的にコピーするために使用されます。経路長の問題を解決するという文脈では、 すべてのプロジェクト ファイルを深いディレクトリ構造から短いパスに移動して、ビルド エラーを最小限に抑えることができます。
mkdir 新しいディレクトリを作成します。提供されたスクリプトでは、 は、ターゲット ディレクトリが存在しない場合にそれを作成するために使用され、再配置中の「そのようなファイルまたはディレクトリはありません」エラーを防ぎます。
Set-ItemProperty レジストリ キーのプロパティを変更または設定する PowerShell コマンド。この場合、Windows レジストリの "LongPathsEnabled" プロパティを変更することで長いパスのサポートが有効になり、システム上のパスの長さの制限が解決されます。
Get-ItemProperty PowerShell のレジストリ キーのプロパティを取得します。ここでは、「LongPathsEnabled」プロパティが正しく設定されていることを確認し、ソリューションの有効性を保証するために使用されます。
set 変数を定義する CMake コマンド。スクリプトでは、 を指定するために使用されます 変数を相対パスで使用すると、CMake ビルド中に発生する可能性のある絶対パスの長さの問題を回避できます。
add_library この CMake コマンドは、新しいライブラリ ターゲットを定義します。パスの問題を解決するという文脈では、 絶対パス長のエラーを防ぐために、相対ソース ディレクトリとともに使用されます。
target_include_directories CMake のターゲットのインクルード ディレクトリを指定します。このコマンドを相対パスとともに使用すると、ビルド システムは定義された相対パス内を検索するように指示され、パスの長さの制限を超えるリスクが軽減されます。
Start-Process 新しい PowerShell プロセスでコマンドまたはスクリプトを実行します。提供された例では、 と一緒に使用されます パラメータを使用して、スクリプトが管理者権限で実行されるようにします。これは、システム レジストリ設定を変更するために必要です。

ソリューション戦略の詳細な説明

に対処する際に、 構築中 CMake を使用して Android 上にライブラリを作成し、複数のスクリプトベースのソリューションを実装しました。最初のアプローチでは、プロジェクト ファイルをルート ディレクトリの近くに再配置します。次のような特定のコマンドを含むシェル スクリプトを使用することにより、 すべてのプロジェクト ファイルをコピーし、 mkdir ターゲット ディレクトリが存在しない場合にそれを作成するため、長いパスに関連するエラーを軽減することを目的としました。これにより、入れ子になった React Native プロジェクトで一般的な、Windows のデフォルトの最大パス長である 260 文字に達するリスクを軽減できます。

もう 1 つの重要な解決策は、CMakeLists ファイルを変更して利用することでした。 絶対的なものではなく。この方法は、CMake ビルド プロセス中に長いネストされたディレクトリ パスの生成を防止することで、パスの長さの制限に効果的に対処します。 CMake を使用して相対パスを定義する コマンドと次のようなコマンドを使用します そして target_include_directoriesを使用すると、ビルド システムはより短い相対ファイル パスを使用するように指示されるため、「そのようなファイルまたはディレクトリはありません」エラーが発生する可能性が低くなります。

さらに、Windows でロング パスのサポートを有効にすることが、この問題を解決するための重要なステップであることが判明しました。 PowerShell スクリプトは、次を使用して Windows レジストリ キーを変更するように設計されています。 。このコマンドを使用すると、「LongPathsEnabled」オプションを有効にすることで、Windows でデフォルトのパスの長さ制限である 260 文字を回避できます。スクリプトはレジストリ キーが適切に設定されていることを確認し、 コマンドを実行して、変更が成功したことを確認します。この解決策は、他のパス削減方法ではディレクトリ作成エラーを回避するのに不十分な場合に不可欠です。

最後に、PowerShell スクリプトは を使用したコマンド 管理者権限でスクリプトを実行するためのフラグ。レジストリ設定の変更には昇格されたアクセス許可が必要なため、これが必要です。プロジェクト ファイルの移動、CMake 構成の変更、長いパスのサポートの有効化といったこれらの手法を組み合わせることにより、パスの長さに関連する CMake ビルド エラーを解決するための包括的な戦略を作成しました。これらのソリューションは、現在のエラーを軽減するだけでなく、将来のプロジェクトで同様の問題に取り組むための再利用可能なフレームワークも提供します。

解決策 1: プロジェクトを再配置してパスの長さを短縮する

アプローチ: プロジェクト ファイルをルート ディレクトリの近くに移動するシェル スクリプト

# Step 1: Define source and target directories
source_dir="C:/Users/ricar/Documents/Github/StockItUp"
target_dir="C:/StockItUp"

# Step 2: Create target directory if it doesn't exist
if [ ! -d "$target_dir" ]; then
  mkdir "$target_dir"
fi

# Step 3: Copy project files to the target directory
cp -r "$source_dir/"* "$target_dir/"

# Step 4: Confirm completion
echo "Project files moved to $target_dir"

解決策 2: CMakeList を変更してファイル パスを短縮する

アプローチ: 相対パスを使用するように CMake 構成を調整する

# Set relative paths to reduce absolute path length issues
cmake_minimum_required(VERSION 3.10)

project(reanimated_project)

# Define relative path for source files
set(SOURCE_DIR "src/main/cpp/reanimated")

# Add source files using the relative path
add_library(reanimated STATIC ${SOURCE_DIR}/Common.cpp)

# Specify target properties
target_include_directories(reanimated PRIVATE ${SOURCE_DIR})

解決策 3: Windows でロング パスのサポートを有効にする

アプローチ: Windows レジストリで長いパスを有効にする PowerShell スクリプト

# Step 1: Open PowerShell as Administrator
Start-Process powershell -Verb runAs

# Step 2: Set the registry key for long paths
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled" -Value 1

# Step 3: Confirm the setting
Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" -Name "LongPathsEnabled"

パスの長さの制限とビルド戦略への対処

「mkdir: No such file or directory」エラーを解決する際に考慮すべきもう 1 つの重要な側面は、CMake がどのようにファイルまたはディレクトリと対話するかを理解することです。 。 Ninja は、コードのコンパイル速度と効率の点でよく選ばれますが、Windows のパス長制限との互換性が難しい場合があります。これを回避するには、開発者は過度のパス長を回避する方法で CMake と Ninja を慎重に構成する必要があります。これには、相対パスを使用するようにビルド プロセスをカスタマイズし、ディレクトリ構造を可能な限り単純に保つことが含まれます。

見落とされがちな解決策は、CMake または Ninja が使用するデフォルトのビルド構成を調整して、Windows のファイル システムの制約に適合させることです。たとえば、特定のを追加できます または、最大パス長を超えない代替ビルド ディレクトリを定義します。さらに、開発者はプロジェクトの依存関係構造を確認して、不必要に深いパスや複雑なパスを特定して短縮することができます。このアプローチにより、コンパイル中のパス関連エラーのリスクを軽減しながら、よりスムーズなビルド エクスペリエンスが保証されます。

次のようなサードパーティ ライブラリの統合を評価することも重要です。 。これらのライブラリには独自の内部ディレクトリ構造があるため、Windows のパス長制限との互換性を確保するには、カスタム調整が必要になる場合があります。ライブラリ固有の CMake 構成を変更するか、ノード モジュールをより短いパスに再配置することで、開発者は重大なパス長の問題が発生しない機能的なビルド環境を維持できます。

  1. 「LongPathsEnabled」プロパティが設定されているかどうかを確認するにはどうすればよいですか?
  2. 使用できます PowerShell でコマンドを実行して、レジストリ設定が有効になっていることを確認します。
  3. babel.config.js の「relativeSourceLocation」オプションの役割は何ですか?
  4. の このオプションは、相対パスを使用するように React Native に指示するために使用されます。これは、大規模なプロジェクトのファイル パスの全長を短縮するのに役立ちます。
  5. Ninja は Windows 上の長いパスを処理できますか?
  6. デフォルトでは、Ninja は Windows 上の長いパスに苦労する可能性があります。長いパスのサポートを有効にするか、短いパスを使用するように Ninja のビルド ディレクトリを再構成することで、これを軽減できます。
  7. CMake での「mkdir: No such file or directory」エラーは何を示していますか?
  8. このエラーは通常、パスが Windows の最大長を超えるディレクトリを作成しようとして、ディレクトリの作成に失敗したことを示しています。
  9. プロジェクト ファイルの再配置は長期的に実行可能な解決策ですか?
  10. プロジェクトをドライブのルートの近くに移動すると、パスの問題を一時的に解決できますが、Windows で長いパスのサポートを有効にして、プロジェクトのディレクトリ構造を最適化することは、より持続可能な解決策です。

ここで説明したソリューションでは、CMake を使用して React Native プロジェクトを構築する際にパスの長さの問題を管理するためのいくつかの方法が提供されます。プロジェクト構造を調整し、構成を変更し、長いパスのサポートを有効にすると、エラーの発生を大幅に減らすことができます。

これらのベスト プラクティスを組み込むことで、開発者は次の機能を使用して Android アプリを開発できます。 よくあるビルドの失敗を防ぐことができます。適切な手順を実行すると、Windows のパス長制限を効果的に克服できます。

  1. パスの長さの問題を解決するための情報 そして CMake のドキュメントとコミュニティのディスカッションをソースとしています。公式 CMake ドキュメントにアクセスしてください。 CMake ドキュメント 詳細については。
  2. Windows でロング パスのサポートを有効にするためのガイドラインは、Microsoft の公式開発者ポータルから収集されました。記事をチェックしてください Microsoft 開発者向けドキュメント
  3. の変更を伴う解決策 ファイルと React Native 固有のプラグインの使用は、スタック オーバーフローに関するコミュニティのディスカッションとトラブルシューティングのアドバイスに基づいていました。次のディスカッション スレッドにアクセスしてください。 スタックオーバーフロー