Xamarin.Android에서 NDK 사용
7003 단어 안드로이드XamarinC#AndroidNDK
슬라이드는 이쪽.
"Xamarin.Android에서 네이티브 코드와 잘 어울리는 방법"
h tp // w w. s에서 멋지다. 네 t / 히든 xv / ㄱ 마리 난 d 로이 dn dk
Xamarin.Android에서 C/C++ 작성한 네이티브 코드를 프로젝트에 포함시켜 이용하기 위한 간단한 단계를 설명합니다.
전제는, Xamarin, Android SDK, Android NDK 환경이 갖추어져 있는 것.
Mac+Xamarin Studio에서 해설하고 있기 때문에, 다른 환경의 경우는 적절하게 읽어 주시면과.
아젠다는 이쪽.
1. NDK 빌드 환경 설정
2. 빌드하여 만든 libs 폴더 아래를 프로젝트에 추가
3. C#에서 호출
4. 빌드 타겟 추가
1. NDK 빌드 환경 설정
먼저 Android 앱 프로젝트를 만듭니다.
그리고 ndk-build에서 보면 일반 Android 앱 프로젝트로 보이도록 프로젝트 폴더 아래의 구성을 정돈합니다.
하나. 프로젝트에 project.properties 파일을 추가.
project.properties
target=android-19
두 번째로 프로젝트에 jni 폴더를 만들고 mk 파일과 소스를 추가합니다.
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := NativeTest
LOCAL_SRC_FILES := Native.cpp
include $(BUILD_SHARED_LIBRARY)
Application.mk
APP_ABI := all
Native.cpp
extern "C"
{
int add( int a, int b );
}
int add( int a, int b )
{
return a + b;
}
여기까지 할 수 있으면, 터미널을 열어 빌드해 봅니다.
프로젝트 폴더로 이동하여 ndk-build를 실행합니다. 아래와 같은 메시지가 표시되면 성공입니다.
Compile++ thumb : NativeTest <= Native.cpp
SharedLibrary : libNativeTest.so
Install : libNativeTest.so => libs/armeabi/libNativeTest.so
Compile++ thumb : NativeTest <= Native.cpp
SharedLibrary : libNativeTest.so
Install : libNativeTest.so => libs/armeabi-v7a/libNativeTest.so
Compile++ mips : NativeTest <= Native.cpp
SharedLibrary : libNativeTest.so
Install : libNativeTest.so => libs/mips/libNativeTest.so
Compile++ x86 : NativeTest <= Native.cpp
SharedLibrary : libNativeTest.so
Install : libNativeTest.so => libs/x86/libNativeTest.so
2. 빌드하여 만든 libs 폴더 아래를 프로젝트에 추가
NDK 빌드에 성공하면 프로젝트 폴더 아래에 libs 폴더가 만들어져 있어야 합니다.
libs 폴더에는 각 플랫폼에 대한 라이브러리 파일이 있으므로 필요한만큼 프로젝트에 추가하고 빌드 작업을 'AndroidNativeLibrary'로 설정합니다.
3. C#에서 호출
이 네이티브 바이너리를 C# 코드에서 호출하려면 C#에서 Windows 앱을 작성한 적이 있는 사람들에게 친숙한 DllImport 속성을 사용합니다.
이번에는 템플릿으로 생성된 MainActivity에 추가해 보겠습니다.
MainActivity.cs
[DllImport("NativeTest")]
public static extern int add(int a, int b);
그대로 버튼 터치시의 처리를 재기록하여 네이티브 코드 실행의 확인을 할 수 있도록 합니다.
MainActivity.cs
button.Click += delegate
{
var rand = new Random();
var a = rand.Next(100);
var b = rand.Next(100);
button.Text = String.Format("{0} + {1} = {2}", a, b, add(a, b));
};
실행하면 이렇게. 무사히 콜되고 있는 것을 확인할 수 있습니다.
4. 빌드 타겟 추가
여기까지 네이티브 코드의 빌드에는 터미널로부터 ndk-build를 실행하고 있었습니다만, 이것으로는 불편.
그래서 프로젝트 파일(csproj)에 아래와 같은
<Target>
태그를 추가합니다.*.csproj
<Project>
<Target Name="BeforeBuild">
<Exec Command="$(AndroidNdkDirectory)/ndk-build" />
</Target>
</Project>
(주신 코멘트에 따라 추가 수정했습니다)
여기까지 네이티브 코드의 빌드에는 터미널로부터 ndk-build를 실행하고 있었습니다만, 이것으로는 불편.
그래서 프로젝트 설정의 커스텀 커멘드라고 하는 기능을 사용해, 프로젝트 빌드시에 NDK 빌드도 실행할 수 있도록 설정합니다.
여기서 1점 문제. . .
이 예에서는 커스텀 커멘드에 ndk-build의 풀 패스를 기재하고 있습니다만, 팀 개발 등에는 불편하네요. 환경 설정에서 값을 읽는 방법이라든지 아시는 분이라면 코멘트 등 주시면 감사합니다.
요약
이제 Xamarin.Android 프로젝트에서 NDK 네이티브 코드를 포함하여 빌드하고 실행하는 환경을 마련했습니다.
프로젝트 내에 일원 관리하는 것으로, 빌드·디버그의 템포가 좋아지는, 리포지토리를 분산시키지 않아도 되는 등의 메리트가 탄생할까.
Reference
이 문제에 관하여(Xamarin.Android에서 NDK 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hIDDEN_xv/items/177ac7ba756afde6ddfe텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)