2008-09-16 5 views
2

조건부 컴파일을 사용하여 빌드 스크립트를 사용하여 각 장치에 별도 빌드를 만드는 대신 여러 모바일 장치 (BREW 플랫폼)에 대해 하나의 응용 프로그램을 이진 빌드 할 수 있습니까?여러 모바일 장치 용 단일 응용 프로그램 빌드

특히 여러 개의 화면 해상도로 단일 BREW 응용 프로그램 빌드를 사용할 수 있습니까?

목표는 단일 바이너리을 작성하는 것입니다. 조건부 컴파일과 똑똑한 빌드 스크립트가 하나의 코드베이스를 갖는 것만으로도 트릭을 수행 할 수 있습니다.

답변

3

예, 이전 작업 장소에서 가능했습니다. 그래도 까다 롭습니다 :

  1. 가장 낮은 공통 분모의 BREW 버전으로 컴파일하십시오. 버전 1.1은 현재 출시 된 모든 핸드셋의 기반입니다.
  2. 코드가 여러 해상도를 처리 할 수 ​​있어야합니다. 화면 너비와 높이를 감지하는 방법은 내 경험에 따라 모든 핸드셋에서 정확합니다.
  3. 모든 리소스가 모든 기기에로드되어야합니다. 이렇게하려면 특정 장치 문제를 해결할 수있는 사용자 지정 이미지 로더를 만들어야합니다. 사운드의 경우 단순한 MIDI 유형 0이 QCP를 제외한 모든 시스템에서 작동한다는 것을 알고 있습니다 (직접 경험할 필요 없음).
  4. 비트 맵 글꼴을 사용하십시오. 시스템 글꼴을 사용하는 것이 좋을 정도로 글꼴에 장치 문제가 너무 많습니다.
  5. 코드 구조를 유한 상태 기계로 설계하십시오. 나는 이것을 충분히 강조 할 수는 없으며, 많은 문제들이 실현되지 않습니다.
  6. 모든 단일 장치 문제에 대한 해결책을 마련하십시오. 이것은 어려운 부분입니다! 가능하지만이 토끼 구멍은 엄청나게 깊습니다 ...

마지막으로, 응용 프로그램이 복잡하고 고급 일수록 경로가 덜 복잡해집니다. 일부 장치 등록 정보는 런타임 (예 : 플랫폼 ID)에서 안정적으로 감지 할 수 없으므로 다중 빌드가 필요합니다.

0

또 다른 아이디어는 화면 크기에 따라 핸드셋을 2 개에서 4 개 카테고리로 나누고 빌드를 생성하는 것입니다. 훨씬 더 적은 복잡성으로 지원하려는 모든 핸드셋을 지원할 수 있으므로 훨씬 더 빠른 경로입니다.

또 다른 사항은 실행하려는 핸드셋의 BREW 버전입니다. BREW 1.1이 한 핸드셋에 있고 목표 시장에서 소규모로 소유하고 있다고 말하면, BREW 1.1을 지원하기 위해 노력하는 것이 타당하지 않습니다.

1

Javaground에서 사용되는 J2ME 대 BREW 변환을 작성했습니다. 다중 해상도, 단일 바이너리 코드를 작성하는 것이 가능합니다. 플랫폼 ID를 통해 장치를 감지하고 태그가 지정된 버그를 표시하는 일련의 플래그를 생성 할 수 있도록 장치 버그 데이터베이스가 있습니다. 예를 들어 모토로라 BREW 전화기의 대부분이 (전부는 아님) 전화를받을 때까지 들어오는 호출이 응용 프로그램을 방해하지 않는 버그가 있으므로 TAPI를 사용하여 수신 전화를 모니터링하고 hideNotify 이벤트를 생성합니다 (우리는 생성 된 코드는 순수한 C++이지만 Java를 에뮬레이트 함). BREW 버전의 런타임시 일부 검사를 수행하고 BREW 3이 아닌 BREW 2 인 경우 특정 API를 비활성화하십시오.

3D 형식의 게임은 소프트웨어에서 크기 조정을하기 때문에 해상도를 독립적으로 만드는 것이 더 쉽습니다.

또한 사운드, IMEDIA 및 ISOUNDPLAYER에 대한 2 개의 API가 있으며, ISOUNDPLAYER는 이전 API이며 모든 장치에서 지원되지만 많은 기능 (IMEDIA를 사용하여 다중 채널 오디오 만 수행 할 수 있음)이 없습니다. IMEDIA 개체를 만들고 IMEDIA 개체를 가져올 수없는 경우 다시 ISOUNDPLAYER 개체를 만듭니다.

전적으로 보편적 인 빌드의 문제점은 기능면에서 큰 차이가 있기 때문에 몇 가지 빌드가 필요하고 오래된 장치는 1MB의 힙 (및 작은 화면 크기) 이하인 경우에만 유용 할 수 있습니다. 6MB + (176x204 이상)로 많은 것을 얻을 수 있습니다.

Brew를 사용하면 새로운 장치 중 일부는 터치 스크린 (그리고 포인터 입력을 처리해야 함) 및 화면 회전이 있지만 상당히 일관된 키 값 집합 (Java와 달리)이 있습니다.

(파일을 디코딩 정말 멋진 어셈블리 언어 접두사 헤더를 작성하려는 경우 제외) 일반 모드 파일과 동일하지 않습니다 또한 파일을 의미 빅 엔디안 모드를 사용하는 일부 오래된 Nokia 휴대폰에 있습니다