마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 개발 할 때 c언어 필요할까요

+1 추천
JNI 사용 할 때 C언어를 사용하는 걸로 알고 있습니다

JNI 사용용도가 보안 말고도 하드웨어적으로 더 가까이 접근하기위함??? 도 있나요?
꿀빠는개미 (1,020 포인트) 님이 2014년 7월 17일 질문

2개의 답변

0 추천
 
채택된 답변
어짜피 jvm에 올라가는데 c로 짠다고 속도가 빨라지는건 아니라고봅니다.

실제로 jni로 연동해서 개발한 앱들보니깐 성능이 더떨어지는거같더군요.

 

제가보기엔 JNI 사용 용도중에 몇가지는,

1. C개발자가 자바를 잘 몰라도 C로 개발한뒤에 붙일 수 있다.

2. 수십년간 쌓아왔던 C 라이브러리를 자바에서 쓸수있다.

3. 자바에서 접근 불가능한 하드웨어 제어를 할 수 있다.

 

뭐 이정도인거같은데,

일단 C로 개발된거를 자바에서 쓸수있다는것 자체가 큰 매리트가 있는게 아닌가 생각이되네요.
기초개발자 (24,060 포인트) 님이 2014년 7월 17일 답변
꿀빠는개미님이 2014년 7월 17일 채택됨
로우레벨 프로세스를 만든 모듈은 자바로 만들어진 모듈보다 확실히 성능은 좋았습니다. c 로 만들었다고 무조건 빠른 건 아니지만 일반적으론 빠르다는 거죠. 당연히 핵심을 알고 만들어야 겠지만요.
안드로이드에 구현된 java 자체가 JNI를 통해 실제 C로 구현되어 있는데... jni 어플이 더 느린것은. 최적화 이슈라고 밖에 할 수 없을 듯 한데요...
jvm에서 호출만 될 뿐, jvm에서 동작하는 것도 아니고요...

http://blog.cnagune.pe.kr/2014/02/java-render-script-ndk-12.html 에 다른 분이 조사해 주신 값이 있듯이 자바보다 c, NEON이 빠릅니다.
상황에따라서, 로직에따라서 다를수도 있겠죠.
최적화로 잘만짠다면 c가 빠를수도있긴하겠지만, 구글검색으로 해봐도 사실상 리소스가 많이 들어가는 방대한 프로그래밍엔 오히려 객체지향쪽이 속도가 빠르다고 나오는곳도 있습니다.
저역시 매우 무거운 작업을 C쪽에서 컨트롤하면서 안드로이드에서 호출만하는 방식으로 했었구요,
성능이 잘 안나와서 자바 네이티브로 다시 제작을 했습니다.
로직문제라고말하면 할말은없지만 상황에따라 다르지않나 생각이드네요.
+1 추천
하드웨어 제어 말고도 아래와 같은 사항이 장점인 듯 합니다.

1. 속도가 java보다 c가 빠릅니다. NEON 같은 명령어나 어셈블리어를 사용하면 더 빠르고요..

2. C로 이미 구현된 모듈을 별도 개발 필요 없이 사용가능합니다.

3. java의 경우 디컴파일을 하면,  프로가드 등으로 난독화를 했더라도, 시간이 걸릴 뿐 원래 소스가 유출될 가능성이 높지만.

상대적으로 C는 디컴파일  난이도가 높아 유출될 가능성이 적습니다.

4 일부긴 하지만 자바 API 사용시 걸리는 권한 문제 우회가 가능합니다.
사악미소 (65,330 포인트) 님이 2014년 7월 17일 답변
...