카테고리 글 보관함: Develope

[iFive Mini3 Retina] 2.0.9기반 FNF기반 앱/위젯 제거 펌웨어

안녕하세요. 이스트픽입니다.




http://pan.baidu.com/s/1sjvwcZN




현재 Mini3R의 최신 펌웨어는 2.1.1입니다만, 2.0.9를 베이스로 한 이유는…


2.1.0이후부터 epub파일이 일부 리더(리디북스, 네이버북스 등…)에서… 강제로 두쪽보기가 되어 버려서…


(네이버북스에서 두쪽보기하면 네쪽보기가 됩니다…) 



더불어, 클리앙등의 커뮤니티 앱의 본문도 깨알같이 나와서 쓰기 참 힘들었기 때문에 2.0.9기반으로 잡았습니다.


1. 첫 화면 수정도 못하게 만들어 놓은 FNF제 Launcher3기반 런쳐 제거


2. FNF기본 위젯 제거


3. FNF 날씨 앱 제거


4. FNF 날짜/시간 관련 앱 제거


5. 갤러리 -> Android 기본 갤러리로 변동


6. 카메라 -> Android 기본 카메라 앱으로 변동


7. 구글 프레임워크, 서비스 버전 최신으로…(기본/몇 안되지만 추가된 구글 앱들을 최신버전으로…)


8. 구글 나우 런쳐, 북스, 무비, 유투브 기본 설치(Gapps를 통째로 설치해 넣으려다가 system파티션 용량 문제로… 파티션을 건드릴까하다 패스했습니다.)


9. 잠금화면의 이미지 제거


10. 기본 언어를 한국어, 기본 시간대를 서울로.(하지만, 초기화 시에는 SetupWizard가 실행되도록 해 놓았기 때문에 별 의미 없을지도…)


11. 부팅 애니메이션을 넥서스5의 것으로(사실 아무거나 상관 없었습니다… 기본 부팅 화면이 너무 눈아프게 깜빡이는 바람에… 끄기에는 허전하고…)


12. OpenWnn(일본어 입력기), PinyinIME(중문평음입력기) 제거. 한글 키보드가 딱히 화면에 맞는게 없어서 높이 조절이 용이한 도돌 키보드를 추가해 놓았습니다.


* 첫 실행시, SetupWizard에서 조금 오래 걸릴 수 있습니다. 원래 언어 설정하는 월컴 스크린 후에 네트워크를 찾는 부분이 있는데,


이 부분을 그냥 수정 없이 썼더니 3G/LTE를 찾겠다고 발악을…. 그냥 쭉 기다리시면 Wifi설정화면으로 넘어갑니다.


* 그리고 설정도중 PicoTTS가 오류를 뿜을 텐데 무시해 주시기 바랍니다.


* 설치방법은 순정 펌웨어 리스토어 하듯, FNF에서 제공하는 RKDeviceManage를 이용하시면 됩니다.


* ART모드는 사용하지 않으시는게… 대충 넣었더니 Google서비스가 오류를 뿜습니다


* 카메라앱의 파노라마 기능은 동작하지 않습니다.(누르면 죽어버립니다.)



이걸로 넥서스 같은 기분을…은 무슨….




이걸 만든 이유는 락스크린 이미지가 거슬린다 + 중국계마켓(AnZhi마켓, FNF시장) 필요 없음 등 입니다




편하게 복원하려고 img파일로 만든김에 그냥 공개 하였습니다.


* 이 펌웨어를 사용함으로 발생하는 문제점에 대해서는 저는 절대 책임을 지지 않습니다.


 



 


 



 

ImageDownloader를 사용할때, statuscode가 302라 이미지 출력이 안될때…

그냥 이것도 저를 위한 메모입니다만, 혹시 저같이 초보인 다른 분들이 헤매실까봐 공개로 해 놓습니다.


NO_ASYNC_TASK일때는 상관 없는데(NO_ASYNC_TASK쓸일은 캐시때문이겠지만…), 


NO_DOWNLOADED_DRAWABLE이나 CORRET 사용시입니다.


페이스북api같이 프로필 사진등을 리다이렉션 해주는 주소로 줄때 이러한일이 발생하는데요.




ImageDownloader클래스의 Bitmap downloadBitmap(String url) 메서드를 수정해 주시면 됩니다.

    Bitmap downloadBitmap(String url) {
final int IO_BUFFER_SIZE = 4 * 1024;

// AndroidHttpClient is not allowed to be used from the main thread
final HttpClient client = (mode == Mode.NO_ASYNC_TASK) ? new DefaultHttpClient() :
AndroidHttpClient.newInstance(“Android”);
final HttpGet getRequest = new HttpGet(url);

try {
HttpResponse response = client.execute(getRequest);
final int statusCode = response.getStatusLine().getStatusCode();
if (statusCode == 301 || statusCode == 302)
{
Header redirect = response.getFirstHeader(“Location”);
if (client instanceof AndroidHttpClient)
((AndroidHttpClient)client).close();
return downloadBitmap(redirect.getValue());
}
if (statusCode != HttpStatus.SC_OK) {
Log.w(“ImageDownloader”, “Error ” + statusCode +
” while retrieving bitmap from ” + url);
return null;
}

final HttpEntity entity = response.getEntity();
if (entity != null) {
InputStream inputStream = null;
try {
inputStream = entity.getContent();
// return BitmapFactory.decodeStream(inputStream);
// Bug on slow connections, fixed in future release.
return BitmapFactory.decodeStream(new FlushedInputStream(inputStream));
} finally {
if (inputStream != null) {
inputStream.close();
}
entity.consumeContent();
}
}
} catch (IOException e) {
getRequest.abort();
Log.w(LOG_TAG, “I/O error while retrieving bitmap from ” + url, e);
} catch (IllegalStateException e) {
getRequest.abort();
Log.w(LOG_TAG, “Incorrect URL: ” + url);
} catch (Exception e) {
getRequest.abort();
Log.w(LOG_TAG, “Error while retrieving bitmap from ” + url, e);
} finally {
if ((client instanceof AndroidHttpClient)) {
((AndroidHttpClient) client).close();
}
}
return null;
}


강조된 부분이 추가된 부분입니다. (Line 12 ~ 18)


 저도 잘 모르는지라, 질문하셔도 답은 못할 수 있습니다. 




참고 :




minSdkVersion에 따라 구글맵(맵뷰) 해상력 차이가 있군요.

저같이 SDK 버전별 API 변경사항따위 읽지 않으면 이렇게 되는구만요.

뭐 저같이 당황하시는 분들이 있을까봐…(없겠지만…) 메모 차원으로 남겨 놓습니다.

androidmanifest.xml 을 보면 아래 같은 항목이 있지요…

<uses-sdk android:minSdkVersion=”3″ />

하위 호환성 땜시 일부러 낮게 써 놓았는데(3이면 1.5고 4면 1.6이던가요…)

뿌연놈이 3으로 설정된 녀석… 빠릿한놈이 4로 설정된 녀석입니다. 참고로 줌팩터는 18로 동일하게 설정했습니다.

어디까지나 참고용으로…

요즘 개발하시는 분들은 뭐… 4아니면 5로 쓰시겠지만…

블랙베리 프로그램 개발관련 메모…

뭐, 제가 필요한대로 끄적거리는겁니다만…

필요하신분들이 계실수도 있으니까, 공개로 해 두겠습니다. 대부분 링크이기도 하고…

1. BlackBerry JDE 4.6.0 API Reference
http://www.blackberry.com/developers/docs/4.6.0api/index.html

2. BlackBerry – BlackBerry Developer Zone
http://na.blackberry.com/eng/developers/

3. BlackBerry Technical Knowledge CenterDeveloper
http://www.blackberry.com/knowledgecenterpublic/livelink.exe

4. BlackBerry Support Community Forums
http://supportforums.blackberry.com/rim/?category.id=BlackBerryDevelopment

5. BlackBerry – Software Downloads (SK텔레콤용, 한글)
https://www.blackberry.com/Downloads/entry.do?code=8396B14C5DFF55D13EEA57487BF8ED26

6. 블랙베리 시뮬레이터 기종별/버전별/캐리어별 다운로드
http://na.blackberry.com/eng/developers/resources/simulators.jsp

7. 실제 장비에서 디버그를 하기 위해서는 장비의 OS버전과 시뮬레이터의 OS버전이 완전히 같아야 한다.
(이건 시도중… 장비 버전이 4.6.0.307였는데, 이것땜시 216로 내리고 시뮬레이터도 4.6.216을 받고 있는 중입니다. 되는지에 대해서는 나중에 쓰겠습니다. 이클립스 플러그인에 있는 시뮬레이터는 버전이 4.6.0.92… 그래서 4.6.0.92를 구해서 설치하는것이 확실하겠지만… SK텔레콤 데이터를 과연 정상 수신할지에 대해서는 모르기 때문에…)

코드를 요로코롬 짜버리면 어쩌자는거야!!!

베트남쪽이랑 열심히 하다가 모두 이쪽으로 이관되었는데, 특정 메서드에서 값이 모두 0을 뱉어내길래 봤더니만…

저도 자바는 할 줄도 모르면서 하고 있습니다만…

다음 구문이 안된다는것쯤은 알고 있습니다.

  System.arraycopy(_buff, 0, Bytes.toBytes(flag,Global.USE_BIGENDIAN), 0 , 4);
  System.arraycopy(_buff, 4, Bytes.toBytes(StartPos.x,Global.USE_BIGENDIAN), 0 , 4);
  System.arraycopy(_buff, 8, Bytes.toBytes(StartPos.y,Global.USE_BIGENDIAN), 0 , 4);
  System.arraycopy(_buff, 12, Bytes.toBytes(EndPos.x,Global.USE_BIGENDIAN), 0 , 4);
  System.arraycopy(_buff, 16, Bytes.toBytes(EndPos.y,Global.USE_BIGENDIAN), 0 , 4);
  System.arraycopy(_buff, 20, Bytes.toBytes(ViaNum,Global.USE_BIGENDIAN), 0 , 4);

c의 strcpy나 memcpy는 다르게 이녀석은 src가 앞에가고 dst가 뒤에가잖습니까…

그런데, java는 잘 모르는제가 어쩌겠습니까… 한참 뒤져보고 다음으로 수정…

  flag = Bytes.toInt(_buff[idx++], _buff[idx++], _buff[idx++], _buff[idx++], Global.USE_BIGENDIAN);
  StartPos.x = Bytes.toInt(_buff[idx++], _buff[idx++], _buff[idx++], _buff[idx++], Global.USE_BIGENDIAN);
  StartPos.y = Bytes.toInt(_buff[idx++], _buff[idx++], _buff[idx++], _buff[idx++], Global.USE_BIGENDIAN);
  EndPos.x = Bytes.toInt(_buff[idx++], _buff[idx++], _buff[idx++], _buff[idx++], Global.USE_BIGENDIAN);
  EndPos.y = Bytes.toInt(_buff[idx++], _buff[idx++], _buff[idx++], _buff[idx++], Global.USE_BIGENDIAN);
  ViaNum = Bytes.toInt(_buff[idx++], _buff[idx++], _buff[idx++], _buff[idx++], Global.USE_BIGENDIAN);

되는구나…(Bytes클래스는 베트남에서 만들어서 보내준거입니다.)

ㅡㅡ; 음… 심오하구나… 프로그래밍이라는건…

블랙베리 시뮬레이터에서 한글 입력기 설치 안될때 – 메모

뭐, 단순히 저를 위한 메모입니다만…


혹시나 필요하신분들도 계실거 같아서 일단 공개 해놓습니다. 뭐 아시는분은 다 아시겠지만…

제가 사용하는 환경은 JDE 4.6.0(9000 시뮬레이터를 사용하지요)입니다만, 다른 기기들도 마찬가지일듯…

4.7이나 5.0b에서는 어떨지 모르지만 4.6에서는 한글 폰트는 잘 깔리는데(예쁘지는 않지만…) 입력기가 아래와 같이 설치를 거부하는 경우가 있습니다.

특히… 한글입력기가 잘 설치되었다가도, clean한번 해주면 안되는 경우도…

뭐… 사용할 수 없는 응용 프로그램이 필요하다면, 강제로 읽어놓으면(아니면 읽은것 처럼) 하면 될거 같아서 다음과 같은 방법을 사용했습니다.


시뮬레이터 폴더에 9000.xml(뭐 이건 어떤기종 시뮬레이터냐에 따라 다르겠지요) 을 열어서… 아래와 같이 한줄 추가했습니다.

<Application>net.rim.platform.lang.ko</Application>
 

그럼 위와같이 추가되거나 업데이트 됩니다라고 뜹니다.

(한글폰트는 이런짓 안해도 그냥 설치되지만요…)

여기서 당황하지 말아야 할 점은… 설치가 끝나면 아래와같이…


Exception이 뜹니다만… 가볍게 무시하고 시뮬레이터를 종료합니다.

그냥 입력기를 설치하지 않고 이런식으로 입력기를 설치하면… 로컬라이제이션에 ‘한글’이 추가됩니다.

보통은 US나 UK만 나오지요.




여기까지 팁 같지도 않은 팁이었습니다.

한국에서는 블랙베리 어플리케이션 개발하시는분은 몇 없는건가요? 아니면 한글입력기가 필요없는 프로그램만 만드시는건지…

ps. 지난번 교육때 몇가지 기능에 대해 물었을때는 무조건 JDE 5.0에서 나온다고 해놓구선… 막상 JDE 5.0(베타이긴 하지만) API보면 별 차이도 없는거 같아요 ㅡㅡ;

ps2. 맥용 이클립스 플러그인이나 맥용 JDE는 언제 만들어 줄려는겨…