読者です 読者をやめる 読者になる 読者になる

ai65536's blog

将棋とかプログラムとか

VS2015+Xamarin.Androidで共有ライブラリを使う

Makefileプロジェクトで共有ライブラリを作る

特殊なことはしてない

chmod.c

#include <sys/stat.h>

int Chmod(const char* path, int mode)
{
return chmod(path, mode);
}

 Android.mk

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_LDLIBS :=
LOCAL_MODULE := chmod
LOCAL_SRC_FILES := chmod.c

include $(BUILD_SHARED_LIBRARY)

 Application.mk

# Build both ARMv5TE and ARMv7-A machine code.
APP_ABI := armeabi armeabi-v7a x86 x86_64 arm64-v8a

 

 Androidのプロジェクト~.csprojに作成した共有ライブラリを追加

・追加既存の項目、リンクとして追加で作成した共有ライブラリをAndroidのプロジェクトに追加する。

・追加したファイルのプロパティのビルドアクションをAndroidNativeLibraryにする。

f:id:ai65536:20160502120439p:plain

・プロジェクトファイルを直接編集してAbi(以下の赤字部分)を指定する

<AndroidNativeLibrary Include="../chmod/libs/x86/libchmod.so">
 <Link>libs\x86\libchmod.so</Link>
 <Abi>x86</Abi>
</AndroidNativeLibrary>
<AndroidNativeLibrary Include="../chmod/libs/armeabi/libchmod.so">
 <Link>libs\armeabi\libchmod.so</Link>
 <Abi>armeabi</Abi>
</AndroidNativeLibrary>
<AndroidNativeLibrary Include="..\chmod\libs\armeabi-v7a\libchmod.so">
 <Link>libs\ameabi-v7a\libchmod.so</Link>
 <Abi>armeabi-v7a</Abi>
</AndroidNativeLibrary>

・適当なクラスに宣言を書く

public class Hoge

{

  [DllImport("libchmod.so")]
  public static extern int Chmod(string path, int mode);

}

 

 これでHoge.Chmod("hogehoge", 484);とかで呼び出すとNative側の処理が呼び出される。