Xamarin.Android用のプロジェクトを自動生成して使っています。
Nativeライブラリを含むプロジェクトは、以下URLを参考にして
http://qiita.com/hIDDEN_xv/items/177ac7ba756afde6ddfe#%EF%BC%94%E3%83%93%E3%83%AB%E3%83%89%E3%82%BF%E3%83%BC%E3%82%B2%E3%83%83%E3%83%88%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B
XML
1<Target Name="BeforeBuild"> 2 <Exec WorkingDirectory="jni" Command="$(AndroidNdkDirectory)\ndk-build" /> 3</Target>
を追加しています。
プロジェクトファイルではNativeライブラリはパス及びファイル名は記述されていますが、実体(libs\arm64-v8a\libopenjpeg-dotnet.soなど)が存在しない状態です。
この時に、Xamarin Studioからすべてビルドを実行すると以下のようなエラーが出てビルドできません。
BeforeBuildによってNativeライブラリがコンパイルされ、所定の位置にインストールされ、ビルドが通ることを期待しています。
エラー抜粋
ターゲット _CreateNativeLibraryArchive: C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1149,5): error MSB4018: "CreateNativeLibraryArchive" タスクが予期せずに失敗しました。\r C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1149,5): error MSB4018: System.IO.DirectoryNotFoundException: パス 'libs\arm64-v8a\libopenjpeg-dotnet.so' の一部が見つかりませんでした。\r C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1149,5): error MSB4018: 場所 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)\r C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1149,5): error MSB4018: 場所 System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite, Boolean checkHost)\r C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1149,5): error MSB4018: 場所 System.IO.File.Copy(String sourceFileName, String destFileName, Boolean overwrite)\r C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1149,5): error MSB4018: 場所 Xamarin.Android.Tools.Files.CopyIfChanged(String source, String destination)\r C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1149,5): error MSB4018: 場所 Xamarin.Android.Tasks.CreateNativeLibraryArchive.Execute()\r C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1149,5): error MSB4018: 場所 Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()\r C:\Program Files (x86)\MSBuild\Xamarin\Android\Xamarin.Android.Common.targets(1149,5): error MSB4018: 場所 Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext() プロジェクト "OpenMetaverse.Android.csproj" 内のターゲット "_CreateNativeLibraryArchive" のビルドが終了しました -- 失敗。 プロジェクト "OpenMetaverse.Android.csproj" のビルドが終了しました -- 失敗。
実体が存在しない事によるエラーと考え、
回避策として、ビルドする前に一度ndk-buildをすると、実体が存在するため、以下のように
ターゲット _SetupApplicationJavaClass: Application Java class: android.app.Application ターゲット BeforeBuild: C:\ProgramData\Microsoft\AndroidNDK64\android-ndk-r11c\ndk-build [armeabi] Install : libopenjpeg-dotnet.so => libs/armeabi/libopenjpeg-dotnet.so [armeabi-v7a] Install : libopenjpeg-dotnet.so => libs/armeabi-v7a/libopenjpeg-dotnet.so [arm64-v8a] Install : libopenjpeg-dotnet.so => libs/arm64-v8a/libopenjpeg-dotnet.so [x86] Install : libopenjpeg-dotnet.so => libs/x86/libopenjpeg-dotnet.so [x86_64 Install : libopenjpeg-dotnet.so => libs/x86_64/libopenjpeg-dotnet.so ターゲット ResolveProjectReferences:
インストールされ、ビルドも完了します。
質問:
BeforeBuildより前に、_CreateNativeLibraryArchiveがあり、Nativeライブラリが何かされている(zipとしてアーカイブされるところまではわかりました。)ということは、BeforeBuildにおいて、コンパイルされ、所定の位置にインストールされたものは、そのビルド時の生成物に含まれないということなのでしょうか?
もし、そうなら<Target Name="BeforeBuild">
を追加せずに運用しようと思っておりますが、挙動がよくわからないので質問させていただきました。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/12/05 08:05