Android 용 C 또는 C ++로 애플리케이션을 작성 하시겠습니까? [닫은]


286

게임을 Android로 개발 / 이식하려고하지만 C로되어 있으며 Android는 Java를 지원하지만 C 앱을 얻을 수있는 방법이 있어야한다고 확신합니다. 누구든지 이것을 달성하는 방법을 알고 있습니까?


당신이 전화 AFAIK를 탈옥하는 경우에만.
Cogsy 2016 년

64
iPhone을 탈옥하지 않습니까?
Robert Gould

1
G1은 기본적으로 루트 액세스를 허용하지 않으며 'Android'환경 외부에서 실행할 수있는 것과 관련하여 많은 제한이 있습니다. 안드로이드 내에서 네이티브 코드를 실행하는 방법을 찾는 데 큰 희망이 없습니다.
Cogsy 2016 년

2
하지만 마켓 플레이스에서 DOOM for Android를 다운로드했습니다. 그래서 그것을 행할 수 있어야한다
로버트 굴드

4
안드로이드에 대한 DOOM은 자바로 작성 code.google.com/p/doom-for-android/source/browse/#svn/trunk
마르코 Mustapic을

답변:


247

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


5
이제 C #과 .Net은 어떻습니까? –)
Avi

4
.net 지원이 계속 진행되는 것을 볼 수 없음
vickirk


2
이 링크를 참조하시기 바랍니다 androidsnippets.wordpress.com/2012/08/30/...
KK_07k11A0585

2
자 마린 밖으로 .NET / C # 코드와 안드로이드 확인을위한
bbqchickenrobot

41

안드로이드 NDK는 당신은 C와 C ++ 같은 언어를 사용하는 네이티브 코드에서 앱의 일부를 구현할 수있는 도구 모음입니다. 특정 유형의 앱의 경우 해당 언어로 작성된 코드 라이브러리를 재사용하는 데 도움이 될 수 있습니다.

기본 개발을 시작하는 방법에 대한 자세한 내용은 이 링크를 참조하십시오 .

샘플 응용 프로그램은 여기 에서 찾을 수 있습니다 .


1
또는 2009, 2010, 2011, 2012 또는 2013
Christopher Berman

19

일반적으로 다음을 수행해야합니다.

  1. Google Android NDK를 설치하십시오. libs, 헤더, makfile 예제 및 gcc 툴체인이 포함되어 있습니다.
  2. ARM 용 C 코드에서 실행 파일을 빌드하고 필요한 경우 제공된 라이브러리와 최적화하고 링크하십시오.
  3. 제공된 adb 인터페이스를 사용하여 전화에 연결하고 실행 파일을 테스트하십시오.

앱을 판매하려는 경우 :

  1. C 코드에서 라이브러리를 빌드하십시오.
  2. 이 라이브러리를 사용할 간단한 Java 코드를 작성하십시오.
  3. 이 라이브러리를 응용 프로그램 패키지 파일에 포함
  4. 앱 테스트
  5. 그것을 팔거나 무료로 배포하십시오

나는 NDK의 새로운 사람이며 Android에서 Clan을 실행하고 싶습니다 .ref 링크가 있습니까?
Parag Chauhan

14

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 사본을 얻을 수 있다고 들었습니다.


12

공식적인 입장 이것이 당신이 "원하는"것이 아니라는 것 같습니다 . 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에 헤더 파일이 묻혀있을 수 있지만 문서가 스케치 / 누락되었을 수 있습니다. 그러나 나는 그것을 할 수 있다고 생각합니다!

그것이 도움이 되길 바랍니다. 기록을 위해, 나는 기본 안드로이드 앱을 작성하지 않았습니다-몇 가지 간단한 관리되는 앱.

앤디


4
다운 보팅. NDK는 현재 Android 네이티브 코드의 공식 컴파일러 인 것으로 보입니다. 이 답변을 쓸모 없게 만듭니다.
unixman83

8

nestedvm 을 사용 하여 C (또는 다른 GCC 언어)를 Java 바이트 코드로 변환하고이를 포트의 기초로 사용할 수 있습니다. 예를 들어 Android 포트 Simon Tathams 휴대용 퍼즐 모음을 참조하십시오 .

이 방법은 NDK에 의해 사용되지 않을 것으로 예상되지만 일부 네트워크 또는 사람들이 전화를 업그레이드 할 수없는 경우에는 그렇지 않을 수 있습니다.


1
NDK가 더 이상 사용되지 않지만 NDK의 대안으로 +1입니다.
tobsen

중첩 된 VM이 더 많은 장치와 호환되지 않습니까?
charo

8

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 소스 코드를 사용한 크로스 컴파일


7

아마도 당신은 이것을 찾고 있습니까?

http://www.mosync.com/

c ++를 사용하여 여러 모바일 플랫폼을 개발하기위한 중간 계층입니다.


2
링크를 찾을 수 없습니다. 사이트 소유자가 복권에서 이기고 아내와 이혼하여 바하마로 이사하는 경우를 대비하여 원래 게시물의 일부 내용을 답변에 넣는 것이 좋습니다.
Zuzlx

7

이것을 보면 가능할 것 같습니다 :

"사실 Java 언어 만 지원한다고해서 다른 언어로 응용 프로그램을 개발할 수 없다는 것은 아닙니다. 이것은 많은 개발자, 해커 및 모바일 응용 프로그램 개발 전문가들에 의해 입증되었습니다. Edgelib의 회사 인 Elements Interactive BV의 직원 라이브러리는 Android 플랫폼에서 네이티브 C ++ 애플리케이션을 성공적으로 실행했지만 현재 디스플레이 및 사운드에 여전히 많은 문제가 있습니다. 여기에는 S-Tris2 게임 및 Edgelib의 3D 애니메이션 데모가 포함됩니다. "







2

튜토리얼은 아니지만 훌륭한 개발 도구는 Ideaworks Labs의 Airplay SDK입니다. (최근에 " Marmelade "로 브랜드 변경 ) C / C ++를 사용하여 Windows Mobile, iPhone, Android 용 앱을 빌드 할 수 있습니다. 내가 싫어하는 유일한 구성 요소는 GUI 작성기-버그가 많지만 항상 메모장으로 대체 할 수 있습니다.


2

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 테스트

./테스트

안녕 팔!



2

네이티브 C / c ++ 파일 우분투의 libstdc ++. *는 x86 (또는 x86_64) 바이너리이지만 안드로이드 장치와 에뮬레이터는 ARM입니다. 물론, 올바른 soname을 설정하더라도 어쨌든 작동하지 않습니다. 이것은 아무데도 이끌지 않는 매우 순진한 방법입니다. Android는 C ++에 대한 지원이 매우 제한적이므로 예외, 표준 C ++ 라이브러리 (STL 포함) 및 RTTI가 없습니다. 이러한 기능이 필요한 경우 다음의 사용자 정의 NDK 배포를 사용하십시오.

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컴파일 할 수 있습니다


1

Android의 다음 SDK 버전에서 C / C ++ 라이브러리를 허용 할 계획이 있습니다 (Codename Eclair?). 현재까지는 Java Java SDK를 통해 불가능합니다. 그러나 HUGE 오픈 소스 프로젝트를 가져 와서 자신의 라이브러리를 굴린 다음 자신의 장치를 플래시 할 수는 있지만 라이브러리를 사용하려는 사람은 사용자 정의 빌드도 플래시해야합니다.


-7

짧은 대답 : 할 수 없습니다.

@ Backslash17 : 기사와 설치 지침이있는 다음 링크를 살펴보면 회사가 작업 한 모든 것은 안드로이드 프레임 워크를 무시하고 에뮬레이터에서 자체 컴파일 된 실행 파일을 시작하는 것입니다. 에뮬레이터가 있으면 텔넷으로 연결하고 리눅스 쉘을 가질 수 있습니다. 리눅스 프로그램을 실행하는 것은 물론 사소한 일입니다. 그러나 그것은 탈옥 (일명 루트 액세스)이없고 시장에서 제공 할 수없는 전화에서는 작동하지 않습니다.

Google이 다른 기회를 열거 나 누군가가 언어 X를 Dalvik 바이트 코드 (Dalvik은 Android 프로그램을 실행하는 VM 임)로 컴파일하는 사용자 정의 컴파일러를 작성하지 않으면 기본 코드를 작성할 수 없습니다.


그렇기 때문에 내가 쓴 것 같습니다. 믿고 참조하십시오!
backslash17
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.