기본 콘텐츠로 건너뛰기

라벨이 android인 게시물 표시

LG G Pro 2 Custom Rom +Rooting 기록

선 루팅 https://forum.xda-developers.com/lg-g3/general/guide-root-lg-firmwares-kitkat-lollipop-t3056951 1.2버전 스크립트 모드로. echo Looking for LG serial port.. echo. adb.exe wait-for-device 여기에서 정체 상태여서 강제로 adb kill-server 했더니 알아서 재부팅하심. 폰에선 "펌웨어 업데이트"화면이 나오고 Phone found at COM5! Rooting phone.. If you don't see the SuperSu installer script runs within about a minute, then the root failed. Author : blog.lvu.kr SPECIAL COMMAND : ENTER, LEAVE ## 이런 상황이 됨. #이 느린 속도로 하나씩 증가하고 있음. 한 시간 기다려도 성과없음. 뭐 몇번해봐도 안되고 결국 불안하긴 하지만 kingroot.net  로 설치 롤리팝이니까  https://drive.google.com/file/d/0B4kfGU1z_PClQ3AyM2lKOGR1S3M/view  이걸 받아서 압축 풀기. d838recovery.bat 만 있어서 당황스럽긴한데 실행하고 1번 하니까 리커버리 모드 진입까진 잘 되는 듯. adb sideload 라는게 있어서 해봄. Advance에서 adb sideload 선택하고 USB연결한 PC에서 adb sideload RR-N-v5.8.5-20171010-d838-Final.zip 하니까 착착 잘 진행됨. 이제 흉측한 U+LTE 가 없어짐. ㅇㅋ 군더더기 없고 깔끔한데 남은 건 gapps 를 설치해야함. http://opengapps.org/  를 권해줘서 갔는데 지옥 느림. ARM + 7.1 + stock 이 기본이...

Android 에서 DDP 라이브러리를 사용하자.

Meteor는 자체적으로 Cordova 를 통한 iOS/Android 앱을 지원한다. 하지만, Hybrid 앱은 역시 Native에 비해 예측 못할 변수가 많고 성능도 그다지 좋지 않다. DDP를 사용하여 Native Android 앱과 Meteor 서버를 연결해보자. 새 프로젝트를 만들고 File/Project Structure (cmd+;) 으로 들어가서 하단 +를 누르면 Library Dependency File Dependency Module Dependency 세개 나온다. Choose Library Dependency 창에서 ddp 하고 엔터쳐보자. 지금 현재는 3개 정도 나오는데 com.keysolutions:android-ddp-client:1.0.2.0 이걸 써서 할거다. 선택하고 OK 해서 추가하자. activity_main.xml 에 버튼 하나 만들고  AndroidManifest.xml 에     <uses-permission android:name="android.permission.INTERNET" />     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 이 두 개의 permission 이 있는지 확인하자. 없으면 추가. <application>이랑 나란히 놓으면 된다. 준비 해야할 class 는 일단 두개인데 하나는 어플리케이션 전체에서 DDP 연결을 책임질 MyApplication (Application을 상속받은 클래스)와 DDP에서 subscription 처리를 해줄 LoginDDPState(DDPStateSingleton을 상속받은 클래스)이다. 물론 이름은 임의로 정했다. 먼저 MyApplication.java 를 보자 package com.appsoul...

Fuse 설치/사용기

Fuse라는 툴을 twitter 에서 계속 광고를 하고 있고 나는 twitter가 안 망했으면 하는 1人이므로 눌러줬다. Sketch 하고 연동되고 Transition Animation 및 속도에 민감하다고 한다. html 같은 독자적 xml 구조를 사용하고 로직은 js로 돌아가는 구조. titanium 보고 있나? 매력적인 요소는 많다. 실 기기 동시 AutoReload 라던가 Layout, Transition 등에 목숨 건다던가 Sketch랑 Artboard 1:1 연동 등등. 다리가 후달거린다. 일단 설치하고 App을 만들어보자. 커맨드 라인으로 쓰는 법을 알기 위해 fuse 라고 쳤더니 어랍쇼? 이런게 바로 뜨네. 커맨드 라인은 지원하지만 Dashboard 도 됩니다라는 거냐. New 눌러보자. 이름을 정하고 만들었더니 Sublime 열기가 있다. Sublime 3 설치하고 다시 실행. 호오. 친절하네. 엔터엔터 설정하니 플러긴도 막 깔아줌. 친절친절. 프리뷰 띄워보자. 시뮬레이터랑 iOS/Android 실기기를 지원하나보다. 일단 Local먼저. 연결연결 로딩로딩. 간지간지! 아이폰 연결도 해보자. 이건 시간 좀 걸리네. Xcode를 띄워준다. 헤더 파일이 좀 많네. 프레임웍들은 거의 대부분 다 쓰는 듯.  바람직한 뜨리 샷 내친김에 안드로이드도 가자. 실기기 연결하고. fuse install android 하면 호로홀호롷로로~~ 5.0.1 설치한다 오오. 엔진이 C++로 되있으니 NDK도 깔아야겠지. 끝. 안드로이드는 프리뷰를 처음 할때 좀 느리다. 지겨워도 끊지 말고 기다리면 뜬다. 기본 예제의 MainView.ux (확장자가 무려 ux - 0-!!!) 를 보니 Panel 안에 Page들이 세 개 있고 그 안에 있는 Text들을 좀 수정해보았다...

Meteor 1.0 - LocalMarket example - Direcctory 구조 분석

드디어 Meteor가 1.0을 찍었다. 감동 ;ㅅ;)/ Todo가 예쁘게 바뀐 건 봤고 새로운 예제 앱이 생겼다. 그 이름은 바로 LocalMarket. 동영상을 찍어서 보여주고 싶지만 귀찮기도 하고 어짜피 meteor create --example localmarket 치면 다 알테니까. 이전까지 실험적이었던 Mobile 정확히 말해 Cordova 와의 통합이 아주 멋지게 이루어졌다. 실행 옵션이 좀 많아졌는데 meteor run : 그냥 Meteor 웹서버만 기동. 이하 아래의 것들도 기본적으로 Meteor 서버를 실행한다. meteor run android meteor run ios : 안드로이드, iOS 시뮬레이션을 실행한다. 안드로이드의 경우 Hardware Accelerated Execution Manager (Intel HAXM) 을 설치한다. meteor run android-device meteor run ios-device : 실제 iOS/Android 장비에서 실행한다. 실행에 대해선 어짜피 해보면 되니까 여기쯤 해두고 Web과 Mobile(android/iOS)간의 차이를 어떻게 극복했는지가 궁금한 거니까 디렉토리 구조를 살펴보기로 하자. 먼저 디렉토리 구조를 보자. client 는 사용자가 실제로 보는 html+css+js+기타등등이고 server 는 backend 쪽인 것까지는 기존과 동일하다. lib는 client/server 양쪽에서 실행되는 Collection, Router등등의 코드가 있다. client 쪽에선 lib 아래에 jquery.touchwipe.js 를 쓴게 보인다. 그리고 head.html을 따로 분리하여 공통 헤더를 만들어 놓았고 init.js 에선 사용자가 앱/웹을 실행시 Geolocation.currentLocation(); 를 사용하여 위치정보를 수집할 수 있도록 해놓았다. package 는 atmosphere가 아닌 프로젝트별 custom...

Arduino+Bluetooth 연결 후 터미널에서 테스트하기

Arduino를 보고 있다. Bluetooth 모듈하고 연결은 tx,rx를 서로 교차연결하고 전원만 받아주면 만사 오케이더라. 이렇게 해서 이렇게 하긴 했는데 테스트 하기 위해선 nc 같은 터미널로 하면 쓸 수 없을까 싶었는데 그냥 screen 명령을 쓰면 되더라. Bluetooth Pairing 후 $ ls /dev/tty.* /dev/tty.Bluetooth-Incoming-Port /dev/tty.HC-06-DevB /dev/tty.Bluetooth-Modem 해보니 테스트 용으로 쓰고 있는 HC-06-DevB가 보이더라. $ screen /dev/tty.HC-06-DevB  으로 접근하면 시리얼 터미널로 돌입한다. 에코가 있으면 에코를 쏠테고 아니면 그냥 받아준다. 뒤에 전송속도를 써서 $ screen /dev/tty.HC-06-DevB 9600 이렇게 접근도 가능하다. 커맨드를 치고 enter를 치면 텍스트를 전달한다. 테스트를 마치고 나갈땐 ctrl+a, ctrl+\ 를 입력하면  Really quit and kill all your windows [y/n] 하고 물어본다. y를 눌러서 나가면 된다.

Cordova(구 phonegap)로 android 앱을 만들 때 GPS 정보를 잘 못 받아온다면.

어떤 폰에선 되고 어떤 폰에선 안되고 되다가도 안되고 하도 현상이 여러가지라서 거의 2주동안 붙잡고 씨름했는데 허무한 결말. navigator.geolocation.getCurrentPosition(success, failure, option); 에서 option에 {   timeout: 10000 } 만 줘서 하니 잘 된다. iOS는 뭐 아무렇게나 해도 잘되는데 Android에선 enableHighAccuracy : true 옵션을 주면 안된다. 나머지는 config.xml에     <feature name="Geolocation">         <param name="android-package" value="org.apache.cordova.geolocation.GeoBroker" />     </feature> 이런게 있는지 platforms/android/AndroidManifest.xml에 가 있는지 ....     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />     <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> 권한이 잘 들어갔는지 정도만 신경 써주면 된다.

android(armv7)에 node.js 올리기. (Rockchip RK3188/MK809C)

http://masashi-k.blogspot.kr/2013/08/nodejs-on-android.html 이쪽 글을 참조했다. 환경은 일단 RK3188 계열인 MK809C로 시도해보았다. 먼저 루팅이 되어있고 Linux Installer나 Debian Tool kit등으로 리눅스를 설치했고 터미널 클라이언트나 SSH를 통해 접근 가능한 상태라고 가정한다. 현재 node.js의 안정(stable) 버전은 v0.10.23이므로 해당 소스를 다운받자. http://nodejs.org/download/ 에 들어가서 http://nodejs.org/dist/v0.10.23/node-v0.10.23.tar.gz 직접 소스를 받으면 된다. $ wget  http://nodejs.org/dist/v0.10.23/node-v0.10.23.tar.gz 으로 받자. $ tar xzf node-v0.10.23.tar.gz $ cd node-v0.10.23 해서 빌드 준비를 하자. $ ./configure --without-snapshot --dest-cpu=arm --dest-os=linux 로 먼저 빌드 환경을 잡고 바로 make 하기전에 thumb inter-working 관련 오류를 피하기 위해 macro-assembler-arm.cc 파일의 일부를 수정한다. 압축푼 경로를 기준으로 vi ./deps/v8/src/arm/macro-assembler-arm.cc 파일을 열어 60라인 근처를 수정하자. #if defined(USE_THUMB_INTERWORK) && !defined(CAN_USE_THUMB_INSTRUCTIONS) # error "For thumb inter-working we require an architecture which supports blx" #endif 아마 이런 부분이 있을 것이다. # error 부분 줄을 삭제하거나 // 처리 하자. ( http://...

Genymotion 에서 Unroot/Root 상태 전환하기 위한 쉬운 방법.

Genymotion은 지옥 성능의 안드로이드 에뮬에 비해 확실히 쾌적하고 아름다운 툴이다. 최근 롬을 보면 기본 Su 설치 상태로 나오는데 일부 Root을 검사하는 앱에서 사용 제한이 걸리곤 한다. 멀티터치 같은 걸 시뮬하기 위해서 DroidMote를 사용한다던가 하는 용도를 봤을땐 Root가 필요하고 여러가지 이유로 개발환경에선 Root/Unroot를 다 쓸 수 있으면 좋다. Genymotion Configuration 아이콘을 찍고 Save 버튼 위 Always allow su access (bypass Superuser app)에 체크박스를 켜준다. Save 하면 아마 재부팅을 한다고 할 것이다. 재부팅하자. 요즘은 SuperSu 가 간단하니 SuperSu를 스토어에서 받자. 몇몇 가지를 묻는데 특별한 롬을 쓰느냐 물을 때 Normal 이랑 충돌이 있으니 기존 Su앱을 지우겠느냐에서 등등 상식적인 걸 체크하고 SuperSu를 다시 실행. 이제부턴 설정창에서 Su를 간편하게 껐다 켰다 할 수 있다.

intelliJ에서 actionscript3 사용시 외부 파일 문제.

source code 안에서 [Embed]를 사용하는 방법도 있지만 리소스를 실시간으로 로딩하여 초기 기동시간을 앞당기고 싶어서 Loader를 사용하여 swf를 실시간 로딩하였으나 데스크탑에뮬/iOS/Android가 각각 다르게 작동.     private var stageLoader:Loader; ..     stageLoader = new Loader();     stageLoader.load(new URLRequest("NoiseInfoSession01.swf")); 이런식으로 로드를 하려고 했더니 Error #2044: Unhandled IOErrorEvent:. text=Error #2035: URL Not Found. 오류 나신다. Project structure 에서 source를 추가했다. 기본은 src 폴더만 잡혀있는데 오른쪽 tree에서 loader에서 부를 swf가 있는 경로인 flash를 찍고 상단에 그 상단에 Sources 라고 써있는 부분을 클릭하면 Source Folders에 추가된다. 하지만 이게 전부가 아니다. 이 상태로는 장치에서 돌렸을때 역시 누락이 발생해서 URL오류가 난다. URL 경로가 잘못되었나 싶어서 봤더니 아니다. 아예 패키징할때 빠지는 현상이다. Android 와 iOS 탭 각각에 똑같이 추가할 파일들을 Path to file or folder 목록에 넣어주자. iPhone 5 대응용 Default-568h@2x.png 스플래시 파일도 동일한 요령으로 추가하면 된다. 보통 gitignore 할때 *.iml을 빼주곤 하는데 as3를 할땐 그래선 안된다. 위의 설정이 iml 파일안에 들어가므로 반드시 git 목록에 추가해놓자. 요약 1. 외부 파일은 Modules에서 Android/iOS 각각 추가 2. 데스크탑 에뮬을 위해 해당 폴더를 Sources에도 추가 3. i...

go로 android notification server를 만들었다.

내가 처한 갑갑한 상황은 이런 것이었다. 1. Android 용 notification server + client 를 구현해야한다. 2. 서비스 서버는 내가 손을 댈수 없지만 windows+asp 기반으로 되어있다. 3. 내 컴퓨터는 OS X다 (....) 4. 소스가 노출되는 형태의 결과물은 안된다(script류 X) 5. 서버 구동을 위해 별도의 프로그램을 설치할 수 없다 (java 안됨) 6. exe 파일을 만들어야한다. 그것도 OS X에서 7. C/C++로? 8. 테스트 용으로 디플로이도 해야할 것 같다. 그래서 떠올린 것이 go. 유지보수도 겸해서 천치도 읽을 수 있게 짜고 싶었다. go-gcm package를 일단 써서 후지고 빠르게 만들자. https://gist.github.com/acidsound/5121536#file-tinygcmserver-go // +build !appengine package main   /* * Usage: ./TinyGCMServer.go <API_KEY> <Server URL(:port)> * Test: curl -d "<NOTIFICATION MESSAGE>" http://serverURL/sendMessage?target=<REGISTRATION_ID> */ import ( "fmt" "github.com/googollee/go-gcm" "io/ioutil" "net/http" "os" )   var API_KEY string   func main () { serverURL := "localhost:8000" if len ( os . Args ) > 1 { API_KE...

Android/iOS mobile web debugging

Google Chrome 이나 Firefox, Safari 그리고 아쉽지만 그런대로 Internet Explorer까지 모두 개발자 도구를 지원하여 DOM 구조를 보거나 요청별 응답시간을 추적하거나 CSS를 살펴보거나 할 수 있다. 이건 너무 편하고 당연해서 우리가 모바일 환경(Android/iOS)에서 같은 환경을 사용할 수 없는게 모바일 웹 개발의 어려운 점이기도 한데. 역시 찾아보니 방법이 있다. 먼저 iOS 같은 경우는 설정 > Safari > 고급 > 웹속성 을 켜주면 iOS장비와 Safari가 깔린 컴퓨터를 서로 연결하여 개발자용 메뉴 > (해당 기기 이름) 을 통해 접근가능하다. 물론 컴퓨터용 Safari에서 미리 환경>고급>메뉴 막대에서 개발자용 메뉴 보기 를 체크해줘야한다. 그리고 Android의 경우 Chrome for Android 가 있다면 좀 더 좋은 환경을 제공한다. https://developers.google.com/chrome/mobile/docs/debugging  내용 참조. USB 연결 후 adb devices 에서 장비 연결을 확인하고 Chrome for Anroid 에서 Settings > Advanced > Developer tools 로 들어가 Enable USB Web debugging 를 체크 그다음 adb forward tcp:9222 localabstract:chrome_devtools_remote 를 실행해서 9222 포트를 연결하고 크롬에서 localhost:9222를 띄워서 디버깅할 창을 선택하면 된다. https://developers.google.com/chrome-developer-tools/docs/timeline 도 같이 쓸 수 있따. 센스가 있는 분들이라면 iOS건 Android건 에뮬/시뮬을 통해서도 할 수 있지 않을까라고 생각할 수도 있을텐데 맞다. iOS Simulator나 AndroVM...

Android 4.0.3 ICS Ice Cream sandwich / iOS 5 에서 WebView 를 사용할 때 주의할 점

잘돌던 앱이 갤럭시S2에서 갑자기 안돈다고 한다. 뭔가 해서 봤더니 shouldOverrideUrlLoading 이 제대로 작동하지 않는 것을 발견. 콘솔로 찍어보니까 통신용 커스텀 프로토콜 이름을 nativeCall://doSomething 과 같이 카멜노테이션 식으로 대소문자를 혼용했는데 이것이 실제로 해당 method 안에선 url 이 소문자로 들어가서 생기는 현상이었음. 결론: shouldOverrideUrlLoading 을 사용할땐 소문자만 쓰자. 추가: iOS 5.0 에서도 동일한 현상이 있다는 제보가 있습니다 :)

느려터진 안드로이드 에뮬은 버리고 VM을 쓰자.

iOS개발 환경이 안드로이드보다 우월점은 여러가지가 있겠지만 개인적으로 가장 큰부분이라고 생각하는 점이 iOS Simulator 의 넘사벽 속도다. 사실 iOS 의 경우 Emulator 가 아니라 Simulator 라는 훼이크를 써서 그런건데. 하드웨어+소프트웨어를 같이 하는 회사만이 쓸 수 있는 필살기라 볼 수 있다. 반면 안드로이드의 경우 ARM 에뮬레이터를 사용하는데 이게 참 못만들었다. 플스에뮬이나 GBA에뮬 반정도만 만들어도 써줄텐데 아직 갈길이 멀다. 그래서 구시렁 거리면서 하드웨어를 연결해서 테스트를 하고 있는데 역시 USB연결하는 건 불편하고 apk 를 전송하는 과정도 그다지 빠르지 않아서 개발 생산성이 월등히 나아지지는 않는다. 루팅을 하면 wifi 를 통해 apk 를 인스톨 할 수 있다고 해서 몇 가지를 해보았으나 잘 모르겠지만 인스톨까진 잘 되었는데 디버깅 모드로 실행이 되지 않아 그만두었다. 게다가 전송속도도 USB보다 wifi가 느리고 맘에 들지 않더라. 그러던중 stackoverflow.com(늘 신세지고 있습니다) 에서 "VM으로 안드로이드를 띄워서 adb connect 하면 좋아!" 라는 글에 눈이 번쩍. 시행착오를 몇번 했지만 의외로 간단하더라. 1. VMWare건 VirtualBox건 상관없다. VM호스트를 준비하자. 2. http://www.android-x86.org/download 로 가서  Deprecated x86 2.2 generic  을 받자. Q) 왜 Deprecated 인 2.2 generic 을 받나요. Deprecated는 쓰면 안되는 거 아님? A) http://mariuz.android-dev.ro/vm.iso.7z 도 있다고 한다. http://www.android-x86.org/download 에 있는 요즘 것들은 죄다 안된다. 3. 죄다 일단 Default 설정에 yes yes 하고 설치한다. 한글 문서가 필요한 분은 ...

JSONObject 전용 CustomView Adapter를 만들었다.

질보다 양이 우선하는 허접안드로이드 프로그램 의뢰를 처리해주고 있다. 어찌나 기능들이 다양한지 덕분에 스터디는 제대로 하네 ㅎㅎ 하다보니 리스트들이 엄청 많은데 SimpleAdapter 로 대충 하려고 했더니 요리조리 잘도 빠져들 나가서 커스텀 시리즈를 하나씩 종류별로 다 만들고 있다. SimpleAdapter를 선호하는 편인데 Hash Map 에만 넣어주면 이미지건 뭐건 알아서 잘 해주니까 좋다. myAdapter = new SimpleAdapter(this, groupData, R.layout.couponlist, new String[] { "title", "desc" }, new int[] { R.id.textViewListTitle, R.id.textViewListDesc }); mListView.setAdapter(myAdapter); 대략 이런식. 1.context 를 주고, 2.Map의 ArrayList 형을 받고, 3.리스트를 표현할 Layout을 정하고 4.리스트에 값을 가져올 Map의 키와 5. 그 키값에 대응하는 List안의 View들을 대응 이것만으로 오케이 물론 이것마저도 사실 지저분하고 더러운 코드로 보이지만 자바에선 이정도면 짧은 코드인편 그런데 이걸 Custom으로 구현하면 갑자기 일이 커진다. http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List4.html 나는 짜증나서 이짓 못하겠다. 일단 서버나 array.xml 등등에서 JSON을 다루는 일이 대부분이라서 SQLite DatabaseAdapter (어라 이것도 만들었네)에서도 그냥 죄다 키발키발(key:val)해버렸다. 하나 만들고 리팩토링하면서 생각해봐야지 하고 촥 만들고 보니 Custom ListAdapter라고 해봤자. 결국 getView 만...