Android 용 C 또는 C ++로 애플리케이션을 작성 하시겠습니까? [닫은]
게임을 Android로 개발 / 이식하려고하지만 C로되어 있으며 Android는 Java를 지원하지만 C 앱을 얻을 수있는 방법이 있어야한다고 확신합니다. 누구든지 이것을 달성하는 방법을 알고 있습니까?
Google을 통해이 기능을 사용하는 사람은 SDK 1.6부터 Android에는 공식 네이티브 SDK가 있습니다.
https://developer.android.com/ndk/downloads/index.html 에서 Android NDK (Native Development Kit)를 다운로드 할 수 있습니다.
또한 NDK에 대한 블로그 게시물이 있습니다 :
http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html
안드로이드 NDK는 당신은 C와 C ++ 같은 언어를 사용하는 네이티브 코드에서 앱의 일부를 구현할 수있는 도구 모음입니다. 특정 유형의 앱의 경우 해당 언어로 작성된 코드 라이브러리를 재사용하는 데 도움이 될 수 있습니다.
기본 개발을 시작하는 방법에 대한 자세한 내용은 이 링크를 참조하십시오 .
일반적으로 다음을 수행해야합니다.
- Google Android NDK를 설치하십시오. libs, 헤더, makfile 예제 및 gcc 툴체인이 포함되어 있습니다.
- ARM 용 C 코드에서 실행 파일을 빌드하고 필요한 경우 제공된 라이브러리와 최적화하고 링크하십시오.
- 제공된 adb 인터페이스를 사용하여 전화에 연결하고 실행 파일을 테스트하십시오.
앱을 판매하려는 경우 :
- C 코드에서 라이브러리를 빌드하십시오.
- 이 라이브러리를 사용할 간단한 Java 코드를 작성하십시오.
- 이 라이브러리를 응용 프로그램 패키지 파일에 포함
- 앱 테스트
- 그것을 팔거나 무료로 배포하십시오
Google은 http://www.youtube.com/watch?v=Z5whfaLH1-E(00:07:30 )에 따라 NDK (Native Development Kit)를 출시했습니다 .
정보가 아직 공개되지 않았다고 Google 그룹 페이지 ( http://groups.google.com/group/android-ndk ) 에서 정보가 업데이트 되기를 바랍니다.
어디에서 간단한 다운로드를받을 수 있는지 잘 모르겠지만 도넛 브랜치 아래 Google Git 저장소에서 NDK 사본을 얻을 수 있다고 들었습니다.
공식적인 입장 은 이것이 당신이 "원하는"것이 아니라는 것 같습니다 . Android 개발자 목록 에서이 스레드 를 참조하십시오 . Google은 다양한 기기 (CPU, 디스플레이 등)에서 실행되는 Android를 예상합니다. 따라서 개발을 가능하게하는 가장 좋은 방법은 Dalvik VM을 대상으로하는 (이동식) 관리 코드를 사용하는 것입니다. 이러한 이유로 Android SDK는 C / C ++를 지원하지 않습니다.
그러나이 페이지를 살펴보십시오 .
Android에는 Android 시스템의 다양한 구성 요소에서 사용하는 C / C ++ 라이브러리 세트가 포함되어 있습니다. 이러한 기능은 Android 애플리케이션 프레임 워크를 통해 개발자에게 노출됩니다.
관리되는 응용 프로그램 프레임 워크는 이러한 라이브러리의 최상위 계층에있는 것으로 보입니다. 이 페이지에서는 C / C ++ 라이브러리 (표준 C 라이브러리, 미디어, 3D, SQL Lite 등)를 나열합니다.
따라서 C / C ++를 적절한 CPU (G1의 경우 ARM)로 컴파일하는 컴파일러 체인 만 있으면됩니다. 이 작업을 수행하는 방법에 대한 간단한 지침이 여기 있습니다 .
내가 모르는 것은이 라이브러리가 제공하는 API에 대한 설명을 어디에서 찾을 수 있는지입니다. SDK에 헤더 파일이 묻혀있을 수 있지만 문서가 스케치 / 누락되었을 수 있습니다. 그러나 나는 그것을 할 수 있다고 생각합니다!
그것이 도움이 되길 바랍니다. 기록을 위해, 나는 기본 안드로이드 앱을 작성하지 않았습니다-몇 가지 간단한 관리되는 앱.
앤디
nestedvm 을 사용 하여 C (또는 다른 GCC 언어)를 Java 바이트 코드로 변환하고이를 포트의 기초로 사용할 수 있습니다. 예를 들어 Android 포트 Simon Tathams 휴대용 퍼즐 모음을 참조하십시오 .
이 방법은 NDK에 의해 사용되지 않을 것으로 예상되지만 일부 네트워크 또는 사람들이 전화를 업그레이드 할 수없는 경우에는 그렇지 않을 수 있습니다.
Google은 이미 Google I / O 2011을 시작했습니다 . C 및 C ++ 게임을 Android 세션으로 가져 오기 ( http://www.youtube.com/watch?v=5yorhsSPFG4)
c로 응용 프로그램을 작성하고 안드로이드를 위해 c ++로 NDK를 사용하는 것을 이해하는 것이 좋습니다.
콘솔 기반의 기본 게임을 크로스 컴파일하고 안드로이드에서 실행하려면 이 기사 에서 동일한 3 가지 방법을 보여주었습니다.
1 : 독립형 툴체인을 사용한 정적 컴파일
2 : Android NDK의 툴체인을 사용한 크로스 컴파일
3 : AOSP 소스 코드를 사용한 크로스 컴파일
아마도 당신은 이것을 찾고 있습니까?
c ++를 사용하여 여러 모바일 플랫폼을 개발하기위한 중간 계층입니다.
이것을 보면 가능할 것 같습니다 :
- http://openhandsetmagazine.com/2007/11/running-c-native-applications-on-android-the-final-point/ (현재 WayBack Machine을 통해서만 사용 가능)
"자바 언어 만 지원된다고해서 다른 언어로 응용 프로그램을 개발할 수 없다는 것은 아닙니다. 이것은 많은 개발자, 해커 및 모바일 용 응용 프로그램 개발 전문가에 의해 입증되었습니다. Edgelib의 회사 인 Elements Interactive BV의 직원 라이브러리는 Android 플랫폼에서 네이티브 C ++ 애플리케이션을 성공적으로 실행했지만 현재 디스플레이 및 사운드에 여전히 많은 문제가 있습니다. 여기에는 S-Tris2 게임 및 Edgelib의 3D 애니메이션 데모가 포함됩니다. "
2009 년 이후이 문제에 대한 개발이 진행되고 있습니다. Android 용
Necessitas -Qt (C ++ 프레임 워크) 비디오
시작하기 .
한 번 봐 가지고 구글 NDK 그룹 이 약속 외모의 NDK의 첫 번째 버전은 1H2009에서 사용할 수 있습니다.
업데이트 : 그리고 http://android-developers.blogspot.com/2009/06/introducing-android-15-ndk-release-1.html
NDK가 공식 Java API를 완전히 제공하는지 잘 모르겠습니다.
에서 http://developer.android.com/sdk/ndk/index.html#overview :
NDK를 사용하면 기본 전용 응용 프로그램을 개발할 수 없습니다. Android의 기본 런타임은 Dalvik 가상 머신으로 남아 있습니다.
구글은 NDK를 출시했다.
여기에서 찾을 수 있습니다 : http://developer.android.com/sdk/ndk/1.5_r1/index.html
c4droid를 다운로드 한 다음 GCC 플러그인을 설치하고 SD에 설치할 수 있습니다. 쉘에서 GCC 바이너리가있는 디렉토리로 이동 한 다음 호출하여 온보드 실행 파일을 만듭니다.
찾기 / 이름 gcc
/mnt/sdcard/Android/data/com.n0n3m4.droidc/files/gcc/bin/arm-linux-androideabi-gcc
고양이> test.c
#include<stdio.h>
int main(){
printf("hello arm!\n");
return 0;
}
./arm-linux-androideabi-gcc test.c -o 테스트
./테스트
안녕 팔!
이 블로그 게시물은 좋은 출발점이 될 수 있습니다. http://benno.id.au/blog/2007/11/13/android-native-apps 불행히도, 중요한 내용은 "독자에게 연습으로 남겨 두었습니다".
튜토리얼은 모르지만 좋은 개발 도구는 Ideaworks Labs의 Airplay SDK입니다. (최근에 " Marmelade "로 브랜드 변경 ) C / C ++를 사용하여 Windows Mobile, iPhone, Android 용 앱을 빌드 할 수 있습니다. 내가 싫어하는 유일한 구성 요소는 GUI 작성기-버그가 많지만 항상 메모장으로 대체 할 수 있습니다.
이 3 단계는이 게시물에 저장하고 저장하는 것이 좋습니다.
3) http://mindtherobot.com/blog/452/android-beginners-ndk-setup-step-by-step/
네이티브 C / c ++ 파일 우분투의 libstdc ++. *는 x86 (또는 x86_64) 바이너리이지만 안드로이드 장치와 에뮬레이터는 ARM입니다. 물론, 올바른 soname을 설정하더라도 어쨌든 작동하지 않습니다. 이것은 아무데도 이끌지 않는 매우 순진한 방법입니다. Android는 C ++에 대한 지원이 매우 제한적이므로 예외, 표준 C ++ 라이브러리 (STL 포함) 및 RTTI가 없습니다. 그러한 기능이 필요하면
http://crystax.net/android/ndk.php- 위에 나열된 전체 C ++ 기능을 지원합니다.
오류가 발생한 이유 : '__cxa_end_cleanup'링크 오류에 대한 정의되지 않은 참조. 안드로이드 stlport
시각. libstdc + +에 대한 링크가 없기 때문입니다. A. 틀렸다.
정적 라이브러리를 사용하기 때문에 전체 libstdc + +를 연결해야합니다. 수
http://crystax.net/android/ndk.php 여기에서 패키지를 다운로드하십시오
소스 \ cxx-stl \ gnu-libstdc + + \ libs \ armeabi 디렉토리.
자체 libstdc + + 지원에 대한 Android는 제한되어 있으며 완전한 libstdc + +에 연결되어 있어야합니다. 직업.
Android.mk에서 파일 추가 LOCAL_LDFLAGS = $ (LOCAL_PATH) / libs / libcurl.a \
$ (LOCAL_PATH) / libs / liblua.a \
`$ (LOCAL_PATH) / libs / libstdc + +. A`
그리고 LOCAL_CPPFLAGS + =-lstdc + +-fexceptions
컴파일 할 수 있습니다
Android의 다음 SDK 버전에서 C / C ++ 라이브러리를 허용 할 계획이 있습니다 (Codename Eclair?). 현재까지는 Java Java SDK를 통해 불가능합니다. 그러나 HUGE 오픈 소스 프로젝트를 가져 와서 자신의 라이브러리를 굴린 다음 자신의 장치를 플래시 할 수는 있지만 라이브러리를 사용하려는 사람은 사용자 정의 빌드도 플래시해야합니다.
짧은 대답 : 할 수 없습니다.
@ Backslash17 : 기사와 설치 지침이있는 다음 링크를 살펴보면 회사가 작업 한 모든 것은 안드로이드 프레임 워크를 무시하고 에뮬레이터에서 자체 컴파일 된 실행 파일을 시작하는 것입니다. 에뮬레이터가 있으면 텔넷으로 연결하고 리눅스 쉘을 가질 수 있습니다. 리눅스 프로그램을 실행하는 것은 물론 사소한 일입니다. 그러나 그것은 탈옥 (일명 루트 액세스)이없고 시장에서 제공 할 수없는 전화에서는 작동하지 않습니다.
Google이 다른 기회를 열거 나 누군가가 언어 X를 Dalvik 바이트 코드 (Dalvik은 Android 프로그램을 실행하는 VM 임)로 컴파일하는 사용자 정의 컴파일러를 작성하지 않으면 기본 코드를 작성할 수 없습니다.
참고 URL : https://stackoverflow.com/questions/1002164/write-applications-in-c-or-c-for-android
'Programing' 카테고리의 다른 글
Internet Explorer 7에서 절대적으로 배치 된 부모의 백분율 너비 자식 요소 (0) | 2020.03.22 |
---|---|
어떤 float <integer 비교가 다른 것들보다 4 배 느린 이유는 무엇입니까? (0) | 2020.03.22 |
NULL, '\ 0'과 0의 차이점은 무엇입니까? (0) | 2020.03.22 |
개인 최종 정적 속성 대 개인 최종 속성 (0) | 2020.03.22 |
MySQL에서 utf8mb4와 utf8 문자셋의 차이점은 무엇입니까? (0) | 2020.03.22 |