2017-04-17 1 views
0

현재 Ant/ndk-build에서 Gradle/CMake로 프로젝트를 마이그레이션 중입니다. Android Studio에서 컴파일하는 것이 아니라 명령 줄에서 컴파일하고 있습니다. 이미 큰 프로젝트를 Gradle로 성공적으로 마이그레이션했습니다. 하지만 지금은 완성 된 APK가 아닌 최종 객체가 공유 객체 인 라이브러리 프로젝트를 마이그레이션해야합니다.Android 용 공유 객체 작성

그래서 APK가 발생하지는 않지만 공유 객체에만있는 Android 프로젝트를 컴파일하는 가장 좋은 방법은 무엇입니까? Gradle은 항상 나를 위해 APK를 컴파일하는 것처럼 보이지만이 경우에는 필요하지 않습니다. 그래서 난 그냥 here 설명한대로 CMake 사용해야합니까? 하지만 아마도 모든 SDK/NDK 업데이트로 변경 될 수있는 모든 종류의 내부 경로를 전달해야하기 때문에 복잡해 보입니다. CMake는 Gradle이 자동으로 자동으로 관리 할 수 ​​있도록 업데이트 할 것입니다.

Android Studio를 사용하지 않고 명령 줄에서 Android 용 공유 객체를 컴파일하는 가장 좋은 방법은 무엇입니까? Gradle을 라이브러리 모드로 전환하여 APK를 어셈블하지 않는 방법이 있습니까?

+0

"요람은 항상 나를 위해 APK를 컴파일하는 것처럼 보이지만이 경우에는 필요하지 않습니다."- 아니요. Gradle은 Gradle 플러그인을 통해 컴파일하도록 지시 한 내용을 컴파일합니다. "도서관 모드로 Gradle을 삽입하는 방법이 있을지 모릅니다."- Android 라이브러리 모듈은 https://developer.android.com/studio/projects/android-library.html을 참조하십시오. – CommonsWare

+0

좋아,하지만 공유 객체를 컴파일하기 위해 특별히 고안된 플러그인이 있습니까? 아니면 여기에서 어떻게해야합니까? 연결된 Android 라이브러리 플러그인은 내가 원하지 않는 AAR 파일을 만들기 때문에 유용하지 않습니다. 난 그냥 * .c 파일을 추가 작업이 일어나지 않고 공유 객체로 컴파일하려고합니다. – Andreas

+1

"* .c 파일 묶음을 추가 작업이없는 공유 객체로 컴파일하려고합니다."- 현대 Android 패턴은 공유 객체를 포함하는 AAR을 생성하는 것입니다 (사용하는 JNI 코드와 함께).), AAR은 적절한 메타 데이터 (예 : 버전 정보, 전이 의존성)가있는 아티팩트 저장소에 넣을 수 있습니다. 그것이 당신이 원하는 것이 아니라면, 그것은 당신의 선택입니다. 그러나 AFAIK Android Studio는 당신이 원하는 것을 지원하지 않으며, 나는 Gradle로 그것을하기위한 레시피가 없습니다. – CommonsWare

답변

1

프로젝트의 루트 디렉토리에서 gradlew buildNative을 실행하십시오. * .c 파일을 빌드합니다. 이것은 NDK 래퍼 일 뿐이므로 app/src/main/jni 디렉토리에서 ndk-build을 실행하는 것과 동일한 출력을 생성합니다.

소스 파일, 헤더 파일 및 메이크 파일이 app/src/main/jni 인 것으로 가정합니다. 결과는 * .so 파일이됩니다.

+0

좋아,하지만 여전히'ndk-build'에 의존하고있다. 최적으로, 나는 Gradle과 CMake만을 사용하고'ndk-build'는 사용하지 않는 솔루션을 원합니다. – Andreas

+0

'ndk-build'를 사용합니다, 예. 하지만 CMake를 사용하고'gradle buildNative'를 실행하면 CMake 스크립트를 랩핑하고 .so 파일을 생성 할 수 있다고 생각합니다. 나는 몇 주 전에 Android 프로젝트를 만들기 위해 게시물에서 언급 한 것과 동일한 [CMake 링크] (https://developer.android.com/ndk/guides/cmake.html)를 사용했습니다. 그것은 좋은 가이드입니다. – Martin

+0

맞아. 잘 돌아 가야 해. 감사! – Andreas

관련 문제