"단순히 C / C ++로 프로그래밍하는 것을 선호"하기 때문에 Android 앱을 C / C ++로 작성하면 안되는 이유는 무엇입니까? [닫은]


86

업데이트 됨 (명확성과 모호성을 줄이기 위해) :

저는 안드로이드 앱을 다루기 시작할 것입니다. 나는 NDK를 사용하여 C ++로 작성하려고 계획하고 있었지만 (C ++에 더 많은 경험이 있고 Java보다 선호하기 때문에) Android NDK 페이지 에서 다음을 발견했습니다 .

NDK는 앱에 필수적인 경우에만 사용해야합니다. 단순히 C / C ++로 프로그래밍하는 것을 선호하기 때문이 아닙니다.

직업에 맞는 한 선호하는 언어를 사용해야한다는 인상을 받았습니다. 누군가가 안드로이드 개발에 C / C ++를 사용하지 않는 것이 왜 그렇게 강력하게 권고되는지 설명 할 수 있습니까?


실물:

저는 모바일 앱, 특히 현재 휴대 전화의 OS 인 Android를 다루기 시작할 것이며, 앱을 C ++ (또는 적어도 코어에서 Java로 래핑)로 작성하는 것이 허용 가능한 옵션인지 궁금합니다.

약간의 배경 지식, 저는 3 개의 C ++ 과정 (입문, 중급, OOP, 봄에 STL 과정 수강)을 수강하고 Java 과정 (중급) 1 개만 수강 한 컴퓨터 과학 전공입니다. 이 때문에 C ++에 더 익숙하고 Java보다 선호합니다. Android NDK 페이지 에서 다음을 발견했습니다 .

Android에서 기본 코드를 사용하면 일반적으로 성능이 눈에 띄게 향상되지는 않지만 항상 앱 복잡성이 증가합니다. 일반적으로 단순히 C / C ++로 프로그래밍하는 것을 선호하기 때문에 NDK가 앱에 필수적인 경우에만 NDK를 사용해야합니다 .

  • 직업에 맞는 언어와 익숙한 언어를 사용해야한다는 인상을 받았습니다.
  • C ++를 지원하지만 Java는 지원하지 않는 iOS와 같은 다른 모바일 플랫폼으로 애플리케이션을 이식하고 싶을 수 있습니다.
  • Java는 고급 언어이므로 개발 속도가 빨라야하지만 거의 모든 것을 다시 배워야하기 때문에 개발 속도가 느려질 것 같습니다 (언어에 대해 하나의 수업 만 들었으므로)

어떤 조언이라도 대단히 감사하겠습니다.

추신 :이 주제에 대한 많은 답변은 수년 전의 답변이며 NDK를 언급하는 후속 답변은 거의 없으며 Android 2.3 이상에서 전체 네이티브 앱을 개발할 수 있습니다.


1
"Acceptable"은 이상한 단어입니다 – 확실히 가능 합니다. NDK 를 통해 ...
ildjarn

1
총알을 깨물고 Java를 배우는 것이 더 나을 것입니다. Android 툴킷은 실제로 Java에서 사용하기위한 것이며, 이미 C ++를 알고 있으면 절약 할 수있는 시간이 소비되고 일부는 C ++에서 모든 Android 항목이 작동하도록 만드는 방법을 알아 내려고합니다. :) 학습 기회로 생각
제레미 Friesner에게

개인적으로 저는 Jeremy가 말한대로 총알을 깨물고 Java로 무엇을해야하는지 간단히 배웁니다. 상대적으로 빨리 배우는 것이 실제로 그렇게 큰 문제 는 아닙니다 .
OmniOwl 2012

첫 번째로, C ++는 친숙 함과 상관없이 Java만큼이나 거의 작업 (Android 용으로 개발)에 적합하지 않습니다. 두 번째로, Android가 Linux 임에도 불구하고 Android와 데스크톱 앱 간에는 큰 차이가 있습니다. 수명주기가 다르며 프로세스 대신 활동을 처리해야합니다. 이는 일반 데스크톱 개발과 완전히 다른 개발 방법입니다. 세 번째로, C ++로 Android SDK를 배우는 것은 자바에서 먼저 배우고 (Java를 배우고 나서) C ++로 전환하는 것보다 훨씬 더 오래 걸립니다.
옥수숫대

1
너무 많은 사람들이 "C / C ++"라는 용어를 그 이름의 단일 언어가있는 것처럼 사용합니다. C와 C ++는 서로 다른 (비록 밀접한 관련이 있지만) 두 언어라는 사실을 알고 있기를 바랍니다. C가 아니라 C ++ 인 것 같습니다.
Keith Thompson

답변:


107

이렇게 생각해보세요. Java SDK를 사용하여 개발자가 사용할 수있는 API를 100 % 활용하는 완전한 작동 애플리케이션을 구축 할 수 있습니다. API 관점에서 SDK로 수행 할 수없는 NDK로 수행 할 수있는 작업은 없습니다. NDK는 더 높은 성능을 제공합니다.

이제 그것을 반대로보십시오. NDK에서 애플리케이션을 100 % 작성하기로 선택한 경우에도 모든 기능을 갖춘 애플리케이션을 작성할 수 있지만 액세스 할 수있는 프레임 워크 API의 수가 제한됩니다. 기본 계층에서 모든 Android 프레임 워크에 액세스 할 수있는 것은 아닙니다. 대부분의 API는 Java 전용입니다. 즉 모든 API를한다는 것은 아니다 당신이 해야 할 수는 NDK에서 사용할 수없는,하지만 어디 근처 ALL 하는 API가 노출되어있다.

이 외에도 NDK는 배포 크기를 확장하는 플랫폼 별 코드를 도입합니다. 지원하려는 모든 기기 아키텍처에 대해 네이티브 코드는 모두 동일한 APK에 패키징 된 .so 파일 (armv5, armv7 및 x86 용)에 빌드되어야합니다. 애플리케이션을 배포 할 때 각 아키텍처에 대해 별도의 APK를 빌드하는 작업을 수행하지 않는 한 이러한 실행 코드 복제는 앱의 크기를 3 배로 만듭니다 (예 : '팻 바이너리'). 따라서 APK의 크기가 크게 늘어나는 것을 원하지 않으면 배포 프로세스가 조금 더 작업이됩니다.

다시 말하지만,이 중 어느 것도 사용자가 선택한 작업을 수행하는 것을 금지하는 것은 아니지만, Google이 Java를 대부분의 코드에 대해 "선호하는"방법으로 설명하고 저항이 가장 적은 경로로 설명하는 이유를 지적합니다. 나는 그것이 문서가 왜 그렇게 표현되었는지에 대해 약간의 빛을 비추 길 바랍니다.


1
대단히 감사합니다! 관점의 변화는 제가 놓친 큰 부분이었습니다. NDK에 API가 부족하다는 사실을 몰랐습니다. 나는 또한 분포의 크기에 대해 생각하지 않았습니다. 그러나 이제 마음에 들었으므로 (특히 C ++에는 모든 표준 라이브러리가 포함되어야하지만 Java의 표준 라이브러리는 이미 장치에 있기 때문에) 많은 의미가 있습니다. .so파일 에 대해 조금 설명해 주 시겠습니까? 지원되는 각 하드웨어 아키텍처에 대해 별도의 네이티브 코드 컴파일이 필요하다는 것을 알고 있으므로 각 .so파일에 별도의 컴파일이 있습니까?
로건 Besecker

43
NDK의 제한은 실제로 유감입니다. 주로 배터리 수명을 고려하여 모바일 플랫폼 용 고성능 코드를 작성하고 싶습니다. 모바일 플랫폼의 기본 문제 . 왜 더 잘 지원하지 않습니까? # ᴅɪꜱʟɪᴋᴇ
콘라드 루돌프

2
@LoganBesecker NDK 도구 모음은 .so지원하기로 선택한 각 아키텍처에 대해 코드를으로 크로스 컴파일 하고 (이것은 메이크 파일에 의해 제어 됨) 모든 파일이 APK의 libs / 디렉토리에 배치됩니다. APK가 설치되면 적절한 항목 만 .so선택되지만 모두 초기 APK에 있어야합니다.
devunwired 2012

1
@KonradRudolph는 ndk로 앱의 일부를 작성할 수 있으며, Google은 Android의 성능이 중요한 부분을 위해이 작업을 수행합니다. 매우 특정한 경우를 제외하고는 C ++ 대 자바는 Android 개발과 관련이 없으며 특히 ART가 출시되고 있습니다. API, 특히 배터리 (GPS, 네트워크)를 소모하는 API를 올바르게 사용하려면주의해야합니다.
Teovald

1
Java는 더 느립니다. JVM을로드해야하며 바이트 코드는 매우 효율적이지만 "네이티브"가 아니므로 응용 프로그램에 따라 눈에 띄게 나타날 수 있습니다. 자바를 선택한 이유는 특히 인터프리터에서 실행되기 때문입니다. 가비지 수집기는 메모리 문제를 줄이고 앱 간 영향을 줄입니다. 또한 Java 언어 (상세하지만)는 개발자가 도입 한 C ++ 오류를 제거합니다.
Daniel

25

인생에서 하나의 앱만 개발하려는 경우 NDK를 사용하세요.

평생 동안 하나 이상의 애플리케이션을 개발하려는 의도로 Android 개발을 배우는 것을 목표로하고 있고 이들 모두를 적절히 지원할 수 있기를 원하는 경우, Java를 배우면 장기적으로 더 잘할 수 있습니다. 대신 Android의 Java SDK를 사용하십시오.


이 논리는 실제적으로 많은 의미가 있습니다.
vvnraman

8

King의 프로그래머는 게임 로직에 C ++를 사용합니다. 그리고 그들은 매출액으로 잘 판단하는 것 같습니다.

제 경험상 C ++는 문제 해결사를위한 것이고 Java는 문제를 피하는 사람을위한 것입니다. 저는 어느 언어를 좋아하지만 좋은 코드를 작성하면 C ++는 상당히 보람이 있습니다. 그러나 거기에 도달하는 데 몇 분의 마법이 필요할 수 있습니다.

일반적으로 Python 또는 R로 작업을 수행하는 데이터 과학자에게 C ++를 추천 할 수도 있습니다. C ++는 성능이 좋든별로 든 똑같이 할 수 있지만 언어에있어 천재 여야합니다. 그렇기 때문에 C ++를 원하는 사람에게 절대 추천 하지 않는 것입니다. 그들이 원하는 치료에 대해주의를 기울일 것입니다.


2
C ++ 고유의 문제를 해결하는 데 소비하는 시간은 앱의 실제 기능을 구축하는 데 소비 할 수있는 시간입니다.
user45623 2010

4

이 흥미로운 기사는 http://betanews.com/2014/07/22/why-c-is-the-perfect-choice-for-modern-app-development/ 에서 찾았습니다.

C ++는 플랫폼 독립성을 위해 특별히 제작되었으며 존재하는 모든 단일 운영 체제에서 발견됩니다. 일반적인 모바일 사용자는 Android 앱이 Objective-C로 작성된 Java 및 iOS 앱이라는 것을 알 수 있지만 많은 사람들이 모르는 것은 장치의 메모리에 다른 것보다 더 많은 C / C ++ 코드가 있다는 것입니다. C / C ++는 소형 장치 (예 : 하드웨어와 상호 작용하는 커널 및 일반적인 런타임 라이브러리) 및 이러한 장치를 활성화하는 통신 네트워크의 기술 대부분을 구동합니다. 개발 팀에게 더 중요한 것은 모든 장치 및 플랫폼에서 수행해야하는 모든 작업을위한 C / C ++ 인터페이스 및 라이브러리가 있다는 것입니다. Android NDK 도구 세트는 원래 게임 개발 팀이 Java 및 Android Java 런타임 Dalvik ( Android Java 코드가 실행됩니다. 모든 Android 서비스를 사용할 수 있도록 정기적으로 개선되었습니다.


3

메인 앱에 자바를 사용한다고 말하고 싶습니다. 그러나 이식해야하는 C ++ 코드가 있거나 C ++로 효율적으로 구현되는 라이브러리가있는 경우 해당 비트에 ndk를 사용합니다.


4
그렇다면 왜 자바를 사용해야합니까?
Vladislav Rastrusny

3

일반적인 안드로이드 개발에 C ++를 사용하지 않을 이유가 없습니다. 다른 OS가 있습니다. 자바를 배우거나 배우지 않고 작업하는 동안 더 실망스럽고 복잡 할 것입니다!


3

가장 중요한 고려 사항은 컴파일 된 Java 코드가 모든 Android 장치에서 변경되지 않고 실행되는 반면 네이티브 코드는 모든 대상 플랫폼에 대해 컴파일되어야한다는 것입니다.

Java와 Android 모두에 대한 일반적인 의도는 모든 앱을 Java로 작성하지 않고 대부분을 작성하고 다른 옵션이 없을 때만 기본 기능을 사용하는 것입니다. 따라서 앱 작성에 대한 모든 것이 Java에서 그렇게 할 수 있습니다.

자바로 작성함으로써 네이티브 세계와 자바 세계를 연결하는 과정에서 많은 어려움을 피할 수 있습니다.

또한, 당신이 잠수하고 Java를 배우면 큰 도움이 될 것입니다. Android 앱이 더 좋을뿐만 아니라 OO에 대해 상당히 다른 접근 방식에 노출되고 더 나은 프로그래머가 될 것입니다.

여기에 Java로 작성하여 모든 보안 위험을 피할 수 있다는 사실을 추가하십시오.

제 생각에 이것은 쉬운 일입니다. Java를 사용하십시오.


2
"... 그리고 다른 옵션이 없을 때만 네이티브를 사용하라". 다른 옵션이 없을 때는 언제입니까? Android의 모든 것은 Java를 통해 달성 할 수 있습니다!
CinCout
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.