안드로이드 스튜디오에서 so 라이브러리를 추가하는 방법

이 글에서는 프로젝트에 so 라이브러리를 추가하는 방법과, Apk에 라이브러리가 포함되었는지 확인하는 방법을 알아보겠습니다. so 라이브러리는 확장자가 so인 native library를 말합니다. 보통 JNI와 c++ 코드가 컴파일되어있습니다. 일반적으로 so 라이브러리를 사용하지 않기 때문에 개별적으로 폴더를 만들어서 파일을 포함시켜야 합니다.

먼저 프로젝트에 so 라이브러리를 추가하는 방법을 알아보고, 그 다음에 Apk에 so 라이브러리가 잘 포함되었는지 확인하는 방법을 알아보겠습니다.

프로젝트에 so 라이브러리 추가

안드로이드 스튜디오 프로젝트에 so 라이브러리를 포함시키려면 먼저 폴더를 생성해야 합니다. src/main/ 아래에 jniLibs라는 폴더를 생성합니다. 그럼 전체적인 폴더 구조는 이렇게 됩니다.

app
 ├── libs
 └── src
     └── main
         ├── AndroidManifest.xml
         ├── java
         ├── res
         └── jniLibs   <--

그리고 jniLibs에 so 라이브러리를 넣어주면 됩니다. 하지만 so 라이브러리는 CPU와 32/64bit 아키텍쳐에 의존적이기 때문에, 플랫폼 별로 다른 폴더에 넣어줘야 합니다.

아래 테이블은 플랫폼과 32/64bit에 따라 폴더 이름이 어떻게 설정되어야 하는지를 말해줍니다.

플랫폼 32비트 라이브러리 폴더 이름 64비트 라이브러리 폴더 이름
ARM armeabi-v7a arm64-v8a
x86 x86 x86_64

그래서 만약 ARM의 32/64bit를 모두 지원한다면 /jniLibs에 두개의 폴더를 생성하고 그 안에 so 라이브러리를 넣어야 합니다. 그럼 전체적인 폴더 구조는 아래처럼 보입니다.

app
 ├── libs
 └── src
     └── main
         ├── AndroidManifest.xml
         ├── java
         ├── res
         └── jniLibs
             ├── armeabi-v7a      <-- ARM 32bit
             │    └── *.so 파일들
             └── arm64-v8a        <-- ARM 64bit
                  └── *.so 파일들

위처럼 폴더를 만들고 파일을 넣었다면 이제 빌드해보세요. 컴파일일된 Apk를 확인해보면 so 라이브러리가 포함된 것을 확인할 수 있습니다.

Apk에 so 라이브러리(native library)가 포함되었는지 확인

빌드를 하여 Apk가 생성되면 so 라이브러리가 포함되었는지 확인할 수 있습니다. Apk파일은 zip이기 때문에 확장자를 zip으로 변경하여 압축을 풀면 /lib 폴더에 내가 넣은 so파일들이 있는 것을 확인할 수 있습니다.

하지만 안드로이드 스튜디오는 Analyze APK라는 기능을 제공합니다. 이것은 Apk에 포함된 파일을 분석하는 툴 입니다. 이 툴을 사용하면 Apk 안의 /lib 폴더에 so 라이브러리가 있는지 확인할 수 있습니다.

메뉴에서 [Build] -> [Analyze APK]를 눌러 툴을 실행합니다. 그리고 분석할 Apk를 찾아서 OK버튼을 누릅니다. 그럼 오른쪽 창에 Apk의 내부 파일들이 보입니다. /lib 폴더에 자신이 추가한 so가 있는지 확인하면 됩니다.

아래 그림은 Analyze APK로 apk를 분석한 결과입니다. 위에서 추가한 라이브러리가 모두 포함된 것을 볼 수 있습니다. analyze apk

정리

안드로이드 프로젝트에 so 라이브러리를 포함하는 방법을 알아보았습니다. 자바 라이브러리는 기본적으로 폴더가 생성되어있지만 네이티브인 so 라이브러리를 사용하려면 개별적으로 폴더를 만들어줘야 합니다. so 파일을 프로젝트에 포함시켰다면 산출물인 apk에 so가 포함되었는지 Analyze APK로 확인할 수 있습니다.

Loading script...

Related Posts

codechachaCopyright ©2019 codechacha