2011년 12월 23일 금요일

android screen button 사용하기

ICS에 Screen button이 가능하도록 수정해 보겠습니다.

frameworks/base/core/res/res/values/config.xml 에 보면 
   



config_showNavigationBar을 true가 되면 아래 보시는 것 처럼 screen button이 나옵니다.

보통 저 파일은 device 밑에 overlay폴더로 관리합니다.

device/hardkernel/odroid7/overlay/frameworks/base/core/res/res/values/config.xml
이 파일을 수정하시면 됩니다.





xda 사이트 참고하였습니다.
http://forum.xda-developers.com/showthread.php?t=1364757


2011년 12월 22일 목요일

android Airplane mode uncheck 안되는 문제...

modem이 없는 android 시스템에서 airplane 모드를 체크하면 다시 uncheck되지 않는 문제가 있습니다.

airplane의 설정이 ril-daemon과 상호 작용하여야 되는지 ril-daemon이 없거나 modem이 없는데 ril-daemon만 동작하면 이런 현상이 있습니다.

그래서 android/package/app/settings/src/com/android/settings/AirplaneModeEnabler.java를 아래와 같이 수정 합니다.


 85     private void setAirplaneModeOn(boolean enabling) {
 86         //codewalker
 87         if (SystemProperties.get("init.svc.ril-daemon").equals("running")) {
 88             mCheckBoxPref.setEnabled(false);
 89             mCheckBoxPref.setSummary(enabling ? R.string.airplane_mode_turning_on
 90                 : R.string.airplane_mode_turning_off);
 91         } else {
 92             mCheckBoxPref.setChecked(true);
 93             mCheckBoxPref.setSummary(null);
 94         }

init.svc.ril-daemon property로 ril-daemon 동작 여부를 확인 할 수 있습니다.

그리고 init.rc에 ril-daemon을 제거 합니다.

#service ril-daemon /system/bin/rild -l /system/lib/libreference-ril.so
#    socket rild stream 660 root radio
#    socket rild-debug stream 660 radio system
#    user root
#    group radio cache inet misc audio sdcard_rw



android screen timeout 무한대로 설정하기

아래 링크를 보면 screen timeout를 무한대로 만드는 방법이 있습니다.

http://www.aesop.or.kr/34931
sqlite3 /data/data/com.android.providers.settings/databases/settings.db "INSERT INTO system (name, value) VALUES ('screen_off_timeout', -1);"


settings app를 수정하여 무한대로 설정 할 수 있도록 수정 해 보겠습니다.


android/pacakge/app/Settings/res/values/arrays.xml을 -1 item을 추가 합니다.



 74 
 75    
 76    
 77         15 seconds
 78         30 seconds
 79         1 minute
 80         2 minutes
 81         10 minutes
 82         30 minutes
 83         off
 84    
 85     
 86    
 87    
 88        
 89         15000
 90        
 91         30000
 92        
 93         60000
 94        
 95         120000
 96        
 97         600000
 98        
 99         1800000
100        
101         -1
102    


그럼 아래와 같이 UI 화면이 구성이 되고 off를 선택 하시면 -1 값이 db에 입력 되어 screen timeout이 안 걸립니다.


2011년 12월 1일 목요일

Unable to create netlink socket: Protocol not supported


D/dalvikvm(   55): GC_EXPLICIT freed 27K, 50% free 1044K/2048K, paused 0ms+0ms
I/Netd    (   91): Netd 1.0 starting
E/Netd    (   91): Unable to create netlink socket: Protocol not supported
E/Netd    (   91): Unable to open quota2 logging socket
E/Netd    (   91): Unable to start DnsProxyListener (Protocol not supported)

E/SocketListener(   53): Obtaining file descriptor socket 'dnsproxyd' failed: Protocol not supported



odroid-7에 ICS Porting중인데 위와 같은 메세지가 나오면서 문제가 되는데 해결 방법을 못 찾고 있다.

kernel에 netlink(netfilter)와 IPv6, quota 관련 feature을 켜도 해결이 안되네요.

system/netd/NetlinkManager.cpp를 보면 socket에서 error를 return하고 error message가 
Protocol not supported 면 kernel configure만 맞춰주면 될 듯한데...

 63     nladdr.nl_groups = groups;
 64 
 65     if ((*sock = socket(PF_NETLINK, SOCK_DGRAM, netlinkFamily)) < 0) {
 66         LOGE("Unable to create netlink socket: %s", strerror(errno));
 67         return NULL;
 68     }

하루 종일 googling해도 답이 없고 XDA 역시 위에 문제만 나와 있고 해결 방법이 없어요...


http://www.groupsrv.com/linux/about152575.html

위에 설명에 의하면
16이 af_netlink이고 커널 메세지를 보면 아래와 같다... 그럼 netlink protocol이 등록된 것 아닌지...

0.606927] NET: Registered protocol family 16

검색하다 아래 페이지를 찾았는데 kernel이 3.0 여야되는 것 처럼 보인다.

http://android.modaco.com/topic/330834-advent-vega-kernel-source-code-now-available/page__st__820

부팅 log도 보면 /proc/net/xt_qtaguid/stats 노드를 찾는다.
xt_qtaguid.c는 3.0 커널에 만 존재하는 파일이다.

F/BatteryStatsImpl(  122): Caused by: java.io.FileNotFoundException: /proc/net/xt_qtaguid/stats: open failed: ENOENT (No such file or directory)

2011년 11월 30일 수요일

android OpenJDK vs Sun JDK build

Ubuntu 11.10 업데이트 후 자동으로 설치되었는지 확인은 되지 않지만 OpenJDK가 설치 되어 있습니다.

android build시 gingerbread까지는 OpenJDK로 build하여도 문제가 없는데 ICS build시 아래와 같은 에러가 발생합니다.


error: error reading out/target/common/obj/JAVA_LIBRARIES/core-tests_intermediates/javalib.jar; invalid header field
1 error
make: *** [out/target/common/obj/APPS/FrameworksCoreSystemPropertiesTests_intermediates/classes-full-debug.jar] 오류 41

googling 하여 보니 OpenJDK로 build는 가능하나 Sun JDK를 사용하기를 권장하는 것 같습니다.

synatic에서 OpenJDK를 삭제하시고 Sun JDK로 설치하시고


[~/projects/ICS]$ sudo update-alternatives --config jar
[sudo] password for codewalker:
대체 항목 jar에 대해 (/usr/bin/jar 제공) 2개 선택이 있습니다.

  선택       경로                           우선순  상태
------------------------------------------------------------
* 0            /usr/bin/fastjar                  100       자동 모드
  1            /usr/bin/fastjar                  100       수동 모드
  2            /usr/lib/jvm/java-6-sun/bin/jar   63        수동 모드

기본 사항[*]을 사용하려면 엔터, 다른 것을 사용하려면 번호를 입력하십시오: 2

jar도 위와 같이 java-6-sun/bin/jar를 선택하십시오.



http://groups.google.com/group/android-building/browse_thread/thread/f82cc424d451e409/91e29dac50ee1970?show_docid=91e29dac50ee1970

아직도 ICS AOSP가 빌드가 되지 않고 있습니다.


Preparing output jar [/home/codewalker/projects/ICS/out/target/common/obj/APPS/WAPPushManager_intermediates/proguard.classes.jar]
  Copying resources from program jar [/home/codewalker/projects/ICS/out/target/common/obj/APPS/WAPPushManager_intermediates/classes.jar]
target Java: FrameworksServicesTests (out/target/common/obj/APPS/FrameworksServicesTests_intermediates/classes)
target Dex: android.core.tests.libcore.package.com.no-core-tests-res
target Dex: android.core.tests.libcore.package.dalvik.no-core-tests-res
target Dex: android.core.tests.libcore.package.libcore.no-core-tests-res
target Dex: android.core.tests.libcore.package.org.no-core-tests-res
target Dex: android.core.tests.libcore.package.sun.no-core-tests-res
target Dex: android.core.tests.libcore.package.tests.no-core-tests-res

이 단계에서 top을 해 보면 java가 몇개 돌고 있고 메모리를 거의 다 사용하고 있어서 시스템이 거의 동작하지 않고 build 역시 안되는 것 같습니다. 여기서 해결이 안되네요. ㅡㅡ;

https://groups.google.com/group/android-building/browse_thread/thread/1d01d0cd635c7f9e

여기 설명대로 -j 옵션을 없애니 컴파일이 계속되네요. 이해가 안가네요.

결과 Ubuntu 11.10 최신 버전을 사용하고 있었는데 OS가 문제가 있어서 다시 설치해야 하서 결국 Google에서 recommend하는 10.04로 재설치 하였습니다.

그런데 package/app들 build하다가 아래 링크의 설명 처럼 에러가 발생합니다.


fix "bad class file error" android build error



http://rxwen.blogspot.com/2011/08/fix-bad-class-file-error-android-build.html

eclipse를 설치하고 나면 jar가 fastjar로 바뀝니다.
그래서 결국 android ICS build 하려면 jar를 다시 설정해 주셔야 합니다.

2011년 11월 29일 화요일

2011년 11월 28일 월요일

ubuntu 11.10에서 android(Gingerbread) build error...


ubuntu 11.10으로 업데이트 후 gcc 버전을 확인 해 보면 아래와 같습니다.


[~/projects/ICS/device/samsung]$ gcc --version
gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

그래서 android build 시 두가지 에러가 발생합니다.


In file included from external/oprofile/libpp/arrange_profiles.cpp:24:0:
external/oprofile/libpp/format_output.h:94:22: error: reference ‘counts’ cannot be declared ‘mutable’ [-fpermissive]
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/liboprofile_pp_intermediates/arrange_profiles.o] 오류 1
make: *** 끝나지 않은 작업을 기다리고 있습니다....
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/liboprofile_pp_intermediates/format_output.o] 오류 1
true


frameworks/base/libs/utils/Android.mk
LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS)
LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS) -fpermissive





error: "_FORTIFY_SOURCE" redefined [-Werror]



build/core/combo/HOST_linux-x86.mk line 61:

-HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0

+HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0