2013-08-05 8 views
13

최근 qt를 사용하여 Android 앱을 작성합니다.
하지만 큰 질문이 있습니다. 특정 활동을 호출하는 등의 네이티브 안드로이드 APIS를 사용하거나 호출 할 수 있습니까?[Native] : Android 용 Qt에서 Java 함수 및 제 3 자 라이브러리 사용

예를 들어, Android SDK에서 나는 java의 연락처를 호출합니다.
인 텐트 intent = 새로운 인 텐트 (Intent.ACTION_PICK, ContactsContracts.Contacts.CONTENT_URI); startActivityForResult (인 텐트, PICK_CONTACT);

Java 안드로이드 SDK API에 대한 일부 C++ 래퍼 라이브러리가 있습니까?

(Java로 작성된) 일부 특수 구성 요소가 필요하면 내 Qt Android 프로그램에서 사용할 수 있습니까?
"pure qt"와 "standard java"또는 "C++ android NDK"의 페이지/활동이 혼합 된 프로그램을 만드시겠습니까?

(MOSYNC 프레임 워크 경험이 있기 때문에이 질문을합니다.하지만 좋은 라이브러리 였지만 자체 라이브러리로 제한되어 있으므로 외부 라이브러리 또는 Android 표준 API를 사용할 수 없습니다 ...)

미리 감사드립니다.

편집 : 내가 내 Qt는 프로젝트의 '어떤'안드로이드 자바 타사 라이브러리를 사용할 수 있습니다 ( http://qt-project.org/doc/qt-5/qtandroidextras-index.html) JNI의 개선에 따라 , 나는 질문이? Java SDK 프로젝트에서 이러한 라이브러리를 사용하고 있습니까?

+2

QT는 래퍼 기능이 있어야하는 android NDK를 사용합니까? 그렇습니까? –

+1

예 세바스찬, NDK가 있지만 QT에도 Android sdk/ndk를 사용하는 래퍼가 있음을 의미하지는 않습니다. – paykoob

+0

안드로이드 관련 기능을위한 특별한 래퍼가 없다고 생각합니다. 이것은 여전히 ​​NDK 호출로 구현해야합니다. QT는 UI 및 기본 io 작업, 객체 관리 등을 위해 작동하는 표준 "QT"기능을 갖습니다. 그러나 특별한 안드로이드 기능에 액세스하는 것은 여전히 ​​고려하지 않을 것입니다. –

답변

-1

Android NDK를 사용하여 C/C++로 프로그래밍 할 수 있습니다. 정적 라이브러리에서 C++ 코드베이스를 래핑하고 Java 래퍼 & JNI를 통해로드해야합니다.

표준 NDK는 RTTI를 지원하지 않으며 std :: string 등과 같이 표준 C++의 많은 기능을 사용할 수 없습니다.이 문제를 해결하기 위해 NDK를 다시 컴파일 할 수 있습니다. Dmitry Moskalchuk은 http://www.crystax.net/android/ndk-r3.php에서 이것을 지원하는 수정 된 NDK 버전을 제공합니다. 이 수정 된 버전은 ARM 프로세서에서 실행되는 모든 Android 폰에서 작동합니다.

참고 : JNI 호출은 실적을 많이 저하시킬 수 있습니다. C/C++로 프로그램하는 법을 안다면 Java는 그렇게 어려운 것이 아닙니다. Java의 장점은 Android를 실행하는 모든 장치에서 응용 프로그램을 실행할 수 있다는 것입니다. NDK 응용 프로그램은 컴파일 된 아키텍처에 따라 다릅니다.

+2

NDK는 RTTI, 예외 및 STL을 지원합니다. 참조 : http://developer.android.com/tools/sdk/ndk/index.html – Frohnzie

9

JNI를 통해 C++ 코드에서 Java 코드를 호출해야합니다. 이 C + + 래퍼 라이브러리에 대해 알고하지 않습니다. JNI_OnLoad에서 Java VM을 가져와야 할 때 Java 메소드를 호출하려면 스레드를 VM에 연결해야하며 원하는 클래스를 찾고 메소드를 호출하는 데 사용할 수있는 JNIEnv를 제공해야합니다 그 위에. This link이 세부 정보를 제공해야합니다.

크로스 플랫폼 지원이 필요하고 Android, Linux, Windows 등에 동일한 애플리케이션을 배포하려는 경우 QT를 사용하여 Android 애플리케이션을 개발할 가치가 있는지 여부에 관한 질문입니다. Android 만 개발하는 경우 그렇다면 내 경험에 따르면 Android를 직접 사용하는 것이 더 쉽고 빠릅니다.

3

"Android 용 Qt"의 진행 방법을 잘 모르겠습니다. 그러나이 시점에서이 아이디어는 공식적으로 KDE 팀 (K Desktop Environment)에서 지원합니다. 그들은 그것을 KDE Necessitas 프로젝트라고 부릅니다. 그리고 그들은 2012 년 10 월에이 프로젝트의 첫 베타 버전을 발표했습니다.

기본적으로 Necessitas SDK를 설치할 때 이러한 것들이 설치 될 것입니다.

  1. Qt Creator - Android 용으로 최적화 된 Qt IDE.
  2. Android NDK - Qt 코드에서 공유 객체를 작성하는 경우.
  3. Android SDK - Qt 지원으로 맞춤 설정. 사용자 정의 된 Qt는 창조주를 사용

, 당신은

  1. 는 안드로이드 UI 프로젝트를 만들 수 있습니다.
  2. 통합 된 Qt 디자이너에서 UI를 디자인하십시오.
  3. .so 파일을 빌드하고 Java 코드로 랩핑하려면 C++ 코드를 컴파일하십시오.
  4. APK를 만들고 배포하십시오.
  5. APK를 디버그하십시오.

안드로이드에 대한 Qt의 주요 관심사는 UI에 관한 것입니다. UI는 KDE 4.x의 고유 한 모양과 느낌을 가지고 있습니다 (데스크탑에서 실행되는 것과 동일). 안드로이드 UI 테마 (Holo 등)는 아직 완전히 사용할 수 없습니다.

이 프로젝트는 아직 베타 버전이므로 안드로이드 네이티브 기능에 대한 래퍼 클래스/기능을 사용할 수 있는지 확실하지 않습니다. 자세한 내용은 공식 문서를 참조하십시오.

희망이 도움이됩니다.

+0

감사합니다. @gnuanu, 실제로 저는 공식적인 언급을 얻기 위해이 질문을합니다! – paykoob