여러 플랫폼을 대상으로하는 응용 프로그램을 개발하기 위해 어떤 방법을 사용해야합니까?


9

여러 플랫폼을 대상으로하는 애플리케이션의 경우 주로 두 가지 개발 방식이 있습니다.

  • 자바와 같은 개발 플랫폼을 찾으십시오. 하나의 코드 솔루션이 있고 중간 런타임이 다른 플랫폼을 처리하도록합니다. 어떤 플랫폼에서라도 문제가 발생하면 코드를 약간 조정하십시오. 그러나 모두 동일하게 유지하십시오.

  • 핵심 로직과 UI를 분리하는 모듈 식 코드를 만듭니다. 동일한 코어 라이브러리를 호출 할 각 플랫폼에 대해 별도의 UI를 개발하십시오. 각 대상 플랫폼에 대해 별도로 애플리케이션을 빌드하십시오.

따라서 어느 것을 따라야합니까? 답은 " It 의존 "으로 시작 합니다. 그러나 이러한 접근 방식과 그 중 하나를 선택하기 위해 고려해야 할 요소에 대한 귀하의 의견을 듣고 싶습니다.


2
이 질문에 대해서는 "종속"을 사용하지 않고 대답 할 수있는 방법이 없습니다. 실제 플랫폼과 같은 많은 요소에 의존합니다. 독립형 데스크톱 응용 프로그램을 계획하거나 일부 웹 서비스를 사용할 계획입니까, UI 계획은 무엇입니까 (모든 플랫폼에서 동일하거나 다양합니까?) 곧. Qt 또는 Gtk 개발 모델이 첫 번째 모델에 해당되는지 생각하십니까? .Net과 Mono는 어떻습니까? 계속할까요 ...?
Paweł Dyda

@Gulshan 죄송합니다. 분명한 질문입니다. 웹 응용 프로그램이 아니거나 Adobe Air와 같은 작업을 수행 할 수없는 이유가 있습니까?
jellyfishtree

이 사이트는 주관적인 질문과 답변을위한 것이지만 수락 이유도 있습니다. 그것은 당신이 함께 연주하는 것처럼 느끼게합니다. 나는 최근에 게시 된 질문을 찾고 답이없는 경향이 있습니다.
JeffO

답변:


3

현재 Oracle / Apache / Google 문제는 제쳐두고이 목적으로 JVM을이기는 것은 여전히 ​​어렵습니다. 그것은 대부분의 플랫폼에서 보편적으로 고품질이며 보편적이며 선택할 수있는 언어가 많습니다 (Java, Clojure, Scala 등). 단일 머신 아키텍처 (VM)를 대상으로하고 특정 최종 사용자 하드웨어에 대해 너무 걱정하지 않아도됩니다.

그러나 그래픽 / 비디오 처리량이 많은 것처럼 낮은 수준의 네트워킹을 염두에 두어야 할 특정 응용 프로그램 유형이 있습니다.


2

HTML5로 가십시오. HTML5 브라우저가있는 모든 플랫폼에서 응용 프로그램을 실행할 수 있습니다. HTML5는 아직 준비가되지 않았지만 웹 애플리케이션 접근 방식이 있습니다.


2
완전한 HTML5 브라우저 기능이 없습니다.
Craig

2

Audacity 사운드 편집기에서는 wxWidget을 크로스 플랫폼 라이브러리로 사용합니다. C 라이브러리에 연결해야하고 속도와 낮은 수준의 액세스가 필요하기 때문에 JVM 접근 방식이 작동하지 않습니다. GUI 코드는 모든 플랫폼에서 동일합니다. 우리는 작은 변형에 #ifdef를 사용합니다. 그러나 크로스 플랫폼 라이브러리를 사용하더라도 한 시스템의 변경으로 인해 다른 시스템에서 작업을 수행하기가 너무 쉽기 때문에 개발자가 세 가지 플랫폼 (Mac, Windows Linux) 각각에서 작업하는 것이 필수적입니다.

필요한 성능을 얻을 수 있으면 JVM으로 이동하십시오. 당신이 할 수 없다면, QT 또는 wxWidgets를 사용하고, 나는 그것이 멋지게 보이게하는 일이 적기 때문에 wxWidgets보다 QT를 제안 할 것입니다.


1
"각 플랫폼에서 개발자가 작업하게하는 것이 필수적"인 경우 +1 한 번에 하나의 플랫폼 만 개발하면 크로스 플랫폼 프로젝트가 단일 플랫폼이됩니다.
AShelly

2

실시간 개발자로서 핵심 로직에서 사용하는 공통 API를 사용하는 2 개의 개별 플랫폼 별 모듈과 유사한 옵션을 성공적으로 사용했습니다. 그러나 내가 한 일은 네트워킹, 오디오, 데이터 스트리밍과 같은 UI가 없었습니다.이 경우 플랫폼별로 낮은 수준의 하드웨어 인터페이스입니다.

여러 가지 이유로이 방법으로 수행했습니다.

1) 각 플랫폼에서 최적의 성능을 얻으려면

2) 하나의 플랫폼에서만 제공되는 기능 활용

3) (J) 일부 플랫폼 (내장 시스템, 게임 콘솔 ...)에는 VM이 ​​없습니다.


2

그것은 당신에게 중요한 것에 달려 있습니다 :)

약 10 년 전에 크로스 플랫폼 Mac / Windows 앱에 대해이 선택에 직면했을 때, 우리는 Java, Qt, wxWidgets 등과 같은 다양한 크로스 플랫폼 옵션을 잘 살펴 보았습니다. UI는 우리에게 정말 중요했고 모든 "플랫폼 간"앱은 타협했습니다. 우리는 총알을 깨고 각 플랫폼에 대한 사용자 정의 UI를 갖춘 자체 플랫폼 간 코어를 구축했습니다 (Mac의 경우 PowerPlant 및 Windows의 MFC로 작성). 시간이 지남에 따라 우리는 이것에 꽤 익숙해졌고, "크로스 플랫폼"부분은 UI를 손상시키지 않으면 서 더 두껍게되었습니다.

우리는 이제 새로운 프로젝트에 대한이 결정을 다시보고 있습니다. 지금 옵션을 살펴보면 아마도 Qt와 함께 갈 것입니다. 무료이며 실제로 잘 자랐습니다. Java는 옵션 일 수도 있지만 실제로 성능에 영향을 줄 수는 없습니다 (3D 이미지 처리 중).

UI가 정말로 중요하다면 Qt와 같은 것을 사용하든 자신의 롤을 사용하든 각 플랫폼에서 올바르게 볼 수 있도록 많은 시간을 투자해야 할 것 같습니다. 사용자가 덜 세련된 UI를 더 많이 받아 들일 수있는 내부 또는 전문 앱의 경우 괜찮을 것입니다!


1

모두가 "크로스 플랫폼"인 Java와 같은 언어에 대해 큰 소란을 느끼지만 실제로 이야기하는 것은 한 번 컴파일 하고 어디서나 실행할 수 있다는 것 입니다. Java (또는 C # / mono)와 같은 언어에서도 일부 영역의 OS 별 세부 정보를 처리하려면 추상화 계층이 필요합니다.

C ++ 및 실제로 대부분의 언어는 크로스 플랫폼이므로 각 플랫폼을 대상으로 컴파일해야합니다.

핵심은 도구 / 언어보다는 프로세스입니다.

  1. 모든 대상 플랫폼에 대한 단위 테스트를 빌드하고 실행하는 통합 빌드 프로세스가 있는지 확인하십시오 .
  2. 코드를 체크인하기 전에 모든 개발자가 모든 대상 플랫폼에서 테스트하는지 확인하십시오. 이는 개발자가 적절한 수의 머신 / vm에 액세스 할 수 있도록하는 것을 의미합니다.
  3. 잘 추상화하십시오. 네이티브 API를 호출하는 모든 것을 추상화하십시오. 이러한 호출을 래핑하는 라이브러리를 작성하십시오.
  4. 가장 단순한 공통 분모를 제공하는 상당히 단순한 양식 UI 이외의 작업을 수행하는 경우 GUI 코드가 크로스 플랫폼이 아님을 수락하십시오. GUI / 프레젠테이션 레이어를 추상화하고 각 플랫폼마다 별도로 코딩하십시오. 그렇습니다. 크로스 플랫폼 GUI 툴킷이 있습니다. 이는 직진 앱에 적합하지만 고급 작업을 수행하는 경우 기본 플랫폼 기능으로 코딩하고 싶을 것입니다.

이 단계는 사용하는 언어 / 도구 세트 / 프레임 워크에 관계없이 동일합니다.


1

웹 활용!

진지하게, 당신이 돈을 가장 많이 원한다면 웹 응용 프로그램을 작성하십시오.

왜?

  • 웹 클라이언트는 일반적으로 많은 PC 전력을 필요로하지 않습니다.
  • 웹 클라이언트는 어디에나 있습니다. PC / MAC / Linux뿐만 아니라 전화, 모바일 장치 등에서도 사용할 수 있습니다.
  • 사용자를 위해 추가로 다운로드 할 것이 없습니다! (일반적으로 멋진 것을 원하고 Flash 또는 Silverlight를 사용하지 않는 한)
  • 모든 공통 구성 요소는 서버 측에 있으며 Java, .NET, PHP 또는 기존 구성 요소의 구성 요소 일 수 있습니다. 클라이언트는 신경 쓰지 않아야합니다!

언급 한 두 가지 접근법조차 매우 유사합니다. 웹 브라우저는 여러 기본 아키텍처에 대해 HTML을 렌더링합니다. 마찬가지로 JVM은 기본 하드웨어에 적합한 방식으로 Java 코드를 해석합니다. 그러나 웹은 단순히 더 넓은 고객 기반을 가지고 있습니다!


0

나는 모노 와 꽤 운이 좋았습니다 . Linux 컴퓨터에서와 마찬가지로 Windows 컴퓨터에서 동일한 코드를 작성할 수 있으며 대부분 두 가지에서 모두 작동합니다. 그리고 C #과 Winforms에서 이미 알고있는 기술을 사용할 수 있습니다.


어떤 UI를 사용합니까, 아니면 서버 기반 앱을 의미합니까? Winforms를 사용하는 작동하는 앱이 있기 때문에 궁금하고 Mono로 포팅했으며 훌륭하지만 "실제"winforms가 되려면 엄청난 양의 작업이 필요합니다. 아마도 GTK #가 더 좋을까요? MonoDevelop는 훌륭하지만 약간 어색합니다.
Dan Rosenstark

Mono를 사용하면 두 가지 접근 방식을 모두 따를 수 있습니다. Yar와 같이 어느 쪽을 따르고 있으며 왜? 그게 문제입니다.
Gulshan

네, 당신이 플랫폼간에 완벽한 폼 충실도를 찾고 있다는 것을 몰랐습니다. GTK #을 사용하면 얻을 수 있지만, "공통 분모"가 낮아야하므로 "pretty"를 희생 시키면됩니다. StartClass0830에 동의하는 경향이 있습니다 .HTML5는 많은 작업이 될 것이지만, 정말 멋진 크로스 플랫폼 작업을 할 수 있습니다.
Robert Harvey

0

먼저 개념 증명을 수행하십시오.

합리적으로 복잡한 응용 프로그램 인 경우 개념 증명을 작성하면 필요한 언어 기능과 프레임 워크 또는 타사 라이브러리를 활용하는 데 필요한 영역에 대한 아이디어를 얻을 수 있습니다.

필요한 언어 기능과 라이브러리는 어떤 언어를 선택해야하는지 결정합니다 (따라서 크로스 플랫폼 지원에 접근하는 방법)


0

저는 15 년 전 Java가 아직 초기 단계에 있고 이런 종류의 앱을 구축 할 준비가되지 않은 데스크톱 앱으로 시작하여 시스템을 구축했습니다. 나는 C ++에서 코어가 필요하다는 것을 알고 크기가 지정된 유형 (예 : int 또는 long 대신 int32)을 사용하는 것을 포함하여 처음부터 크로스 플랫폼이되도록 설계하여 Mac, Windows 및 UNIX (Linux 이전 버전)에서 실행할 수 있음 일).

좋은 크로스 플랫폼 UI 환경을 찾으려고 시도했을 때 XVT를 포함하여 몇 가지가있었습니다. 나는 XVT에 대한 교육을 받았고 실제 앱을 구축하기 시작했을 때 플랫폼에서 깨끗하고 자연스러운 모양과 느낌을 만들 수 없다는 것을 깨달았습니다 (Mac에서 시작). 그래서 그 아이디어를 포기하고 휴대용 코어 위에 기본 Mac (PowerPlant) UI를 만들었습니다.

몇 년 후, 우리는 Windows (MFC의 UI)로 옮겼습니다. 두 번째로 UI를 구축하는 것이 더 빨랐고, Mac과 Windows UI를 동시에 병렬로 유지 한 다음 Windows로 넘어갔습니다. 코어는 나중에 다양한 유닉스와 리눅스로 옮겨서 서버 기반 계산을 실행할 수있게되었습니다. 코어는 64 비트를 지원할 때 약간의 조정으로 포트가 잘 작동했습니다.

이제는 Mac을 사용하기 시작했고 Mac으로 돌아올 수 있기를 원하지만 앱의 크기와 복잡성 때문에 어려운 선택입니다. 이 앱의 상당 부분이 데스크탑 앱인 것이 여전히 합리적입니다. CAD 환경과 같습니다. 그러나 플랫폼 별 C / C ++ 언어로 UI를 다시 작성하고 MFC 기반 UI를 계속 유지하는 대신 전체 스택을 Java로 다시 작성하여 여러 플랫폼에서 실행할 수 있도록하는 경향이 있습니다.

C ++과 같이 Java 이외의 코어를 실행해야하는 이유가 여전히있을 수 있습니다. 그러나 초기 성능 테스트를 실행하여 실제로 필요한지 확인하고 싶습니다. 그리고 UI를 웹 서비스로 구축하고 웹 서비스를 통해 코어에 연결할 수 있는지 확인하기 위해 UI를주의 깊게 살펴볼 수 있으므로 데스크톱 응용 프로그램, 모바일 응용 프로그램, 웹 응용 프로그램 등 다양한 클라이언트를 가질 수 있습니다. C 또는 C ++로 조각이 필요한 경우 Java 계층으로 작성할 수 있습니까? 아니면 웹 서비스로?

또 다른 고려 사항-앱이 얼마나 오래 지속됩니까? 얼마나 복잡해 질까요? 이것에 대한 아이디어가 있다면, 사용중인 UI 라이브러리의 가능한 수명과 시간이 지남에 따라 사람들이 라이브러리를 유지하도록 도울 수있는 능력을 고려하십시오. 지금 생각하기는 어렵지만 생각할 가치가 있습니다.

-알렉스


JVM은 런타임 라이브러리의 이전 버전과의 호환성 측면에서 매우 안정적인 것으로 입증되었습니다. 이 시나리오를 위해 그것은 아주 잘 맞았을 것입니다 ...

0

웹앱으로 만들 수 있다면 웹앱으로 만드십시오. ExtJS 와 같은 툴킷을 사용하면 GUI처럼 보이는 크로스 브라우저 호환 사용자 인터페이스를 비교적 쉽게 만들 수 있습니다.

그렇지 않으면 Java 또는 QT + C ++ 또는 C + Wx가 모두를위한 하나의 소스를 갖는 가능한 옵션입니다.

두 번째 접근 방식은 앱이 모든 대상 플랫폼에서 기본적으로 보이고 느끼기를 원하는 경우에 적합합니다. 기본 Mac 앱은 기본 Windows 앱과 모양과 느낌이 다릅니다. 다른 스킨과 키바 인을 사용하는 것만으로는 충분하지 않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.