2012-11-15 2 views
0

MIPS 디바이스 용으로 빌드해야하는 독점 JNI 애플리케이션이 있습니다. "Initializing a Build Environment", NDK 문서의 일부, 일부 Google 그룹스 스레드 및 수많은 StackOverflow 질문을 읽었지만 아직 내 대답이 부족합니다.JNI 애플리케이션 용 Android 빌드 환경 설정

지금까지 Google의 repo 스크립트를 사용하여 Android 소스를 확인한 결과 ~/AndroidSource 이하였습니다. 또한 SDK는 ~/AndroidSDK 아래에, NDK는 ~/AndroidNDK 아래에 별도로 다운로드했습니다. 빌드하려고하는 코드는 별도의 위치에 있습니다. SDK 및 NDK 바이너리가 내 경로에 있습니다. 빌드를 위해 필자는 Android 소스 트리 아래에있는 NDK와 두 가지 버전의 NDK를 사용하려고 시도했으며 여러 가지 문제를 경험했습니다. 현재 설치에는 Android 소스와 별도로 다운로드 한 NDK r8b가 사용됩니다.

응용 프로그램의 Android.mkjni/Android.mk이 있습니다. 그러나 후자의 몇 가지 지시문은 경로에 대해

frameworks/base/include 
system/core/include 

접두사가없는 경로를 가리 킵니다. 나는 이것들이 안드로이드 소스에있는 각각의 디렉토리를 가리 키기위한 것이라고 생각했기 때문에, 그것들을 현재 디렉토리로 심볼릭 링크했다. 좀 더 symlinking과 makefile과 소스 해킹을 한 후에, 나는 컴파일 할 애플리케이션을 얻었지만, 현재 누락 된 메소드 본문에 대한 많은 참조로 연결 단계에 머물러있다. 전체 시간 동안 내가 뭔가 잘못하고있는 것을 알았습니다.

Linux x86_64 호스트에 관한 모든 우려 사항이 있습니다.

그래서 제 질문은 :

JNI 응용 프로그램을위한 빌드 환경을 설정하는 적절한 방법은 무엇입니까? 어떤 환경 변수, 심볼릭 링크 및/또는 경로 확장을 설정해야합니까? 한 번 또는 각 ndk-build 호출 전에 모든 스크립트를 호출해야합니까?

또한 잘못된 개념이나 용어로 나를 고칠 수 있으면 기쁩니다.

답변

1

AOSP를 심볼릭 링크 wiyh 스 당신의 접근 방식 트리가 올바른지 확인하십시오. 지금 필요한 것은 MIPS 용으로 컴파일 된 시스템 라이브러리입니다. 그 (것)들을 얻는 가장 쉬운 방법은 표적 장치 (또는 에뮬레이터 심상)에서 adb pull에 그들이다. 그러나 AOSP 빌드의 일부로이 라이브러리를 직접 빌드 할 수도 있습니다 (다운로드 한 소스 트리에 대한 빌드 지침 참조).

그래도 문제가 해결되지 않으면 ndk-build을 매개 변수 V=1과 함께 실행하고 링크 명령과 그 결과를 게시하십시오.

+0

필자가 가지고 있던 연결 문제는 응용 프로그램 코드를 기반으로 구축 될 라이브러리가 아니라 장치에 미리 빌드 된 라이브러리와 관련이 있지만 지금은 테스트 할 수 없습니다. 해당 응용 프로그램에서 더 이상 작업하지 않으며 내 로컬 Android 소스가 대상과 일치하지 않습니다. 그러나, 나는 그것을 "올바른 방법"종류의 대답을 찾고있었습니다. – mcmlxxxvi

+0

include 경로에'frameworks/base/include'와'system/core/include'가 있다면'-lutils'와'-lcutils'가있을 것입니다. 이 두 라이브러리는 실제로 유비쿼터스이지만 NDK와 함께 제공되는 "안정적인 API"의 일부는 아닙니다. –

1

내 빌드 (YMMV)에서 다음을 사용합니다.

  • arm-linux-androideabi-gcc은 컴파일러 또는 링커 (PATH에 있어야 함)로 명시 적으로 호출하십시오.
  • NDK_PLATFORM =/경로 /에/안드로이드 NDK-R */플랫폼/안드로이드-14 링커에 컴파일러
  • 패스 -I"$(NDK_PLATFORM)/arch-arm/usr/include"
  • 패스 -nostdlib -L"$(NDK_PLATFORM)/arch-arm/usr/lib/" -lgcc -lc -lm
+0

나는 길을 가고 싶지는 않지만 링커 플래그가 유용하게 보입니다. 앞으로 빌드를 위해 살펴 보겠습니다. – mcmlxxxvi

+0

@mcmlxxxvi : 우선,'arm-linux-androideabi-gcc'를'mipsel-linux-androideabi-gcc'로,'arch-asm'을'arch-mips'로 바꿔야합니다.둘째,이 방법은 프로젝트에서 실제로 사용되는 경우 공용 헤더와 라이브러리를 보완 할 수 없습니다. 셋째, 정규'ndk-build'는 컴파일러와 링커 모두에게 정확하고 일관된 매개 변수를 제공합니다. –