개인적으로 이해한 내용을 정리함.


자바는 포인터 개념이 없다.

비유하면 자바의 변수는 통이고 통안의 내용물을 메소드로 전달해주는 것.


# int, char 같은 primitive 들은 통(변수)안의 내용물이 값이므로 call by value 효과가 난다.


# 객체 변수는 안의 내용물이 주소이기 때문에 call by reference 효과가 난다.


# String은 call by value 효과가 난다.


String 자체는 객체지만 자바에서 특별 취급을 받아 그렇단다. 끝.


심심하여 그림첨부









선 해결책 후 설명 : project.properties 파일의 라이브러리 참조 경로를 상대경로로 바꾼다.





Github에서든 어디서든 남의 라이브러리를 가져와서 써볼라고

import를 한 후, 내project- 오른클릭- properties-android-library 탭- Add 하여

그 라이브러리를 내 프로젝트에 등록을 종종 할 일이 생긴다.

이때 거의 항상 처음에는 녹색 체크표시가 뜨며 기분좋게 된 듯 하다가

다시 properties 들어가보면 빨간색 엑스표시 (x) 가 뜨며 library 참조를 실패했음을 기분나쁘게 보여준다.

처음에 이걸 겪고 삽질을 하다보면. 이건 뭐.. 답이없다.

버그는 에러메시지라도 주지 빨간 엑스표시 보고 뭐어쩌라고..



에러




내프로젝트 - project.properties 파일을 보면 

# Project target.

target=android-21

android.library.reference.1=..\\appcompat_v7

android.library.reference.2=C:/Users/[사용자명]/Desktop/[남의 라이브러리 폴더]


요딴게 써있다.

잘 돌아가는 라이브러리 작성자가 만든 예제 프로젝트의 project.properties 을 봤다.
android.library.reference.1= ..\\ [폴더] 
이거 비슷하게 있다.

그렇다.


안되는 놈은 절대경로였고, 되는 놈은 상대경로였다.


라이브러리 폴더를 내 프로젝트폴더 안의 androidMenifesto 파일이 있는 곳에 두었다. 

( 한 수준 위 폴더에 놓으면 import할때 이미 있는 이름이라며 실패하기에..)


그러고 빨간엑스 라이브러리 지우고, 다시 라이브러리 세팅하면 성공. 녹색 체크가 당당하여라..

(원래 자동으로 되지만 혹시 안된다면 메뉴-project-clean)



두둥....두번째 에러 사냥

다 하고나니 Console에 아래와 같은 에러가 또 뜬다. 


[2014-12-25 01:48:43 - Test1] Found 3 versions of android-support-v4.jar in the dependency list,

[2014-12-25 01:48:43 - Test1] but not all the versions are identical (check is based on SHA-1 only at this time).

[2014-12-25 01:48:43 - Test1] All versions of the libraries must be the same at this time.

[2014-12-25 01:48:43 - Test1] Versions found are:

[2014-12-25 01:48:43 - Test1] Path: D:\develop\Android\Test1\Test1\libs\android-support-v4.jar

[2014-12-25 01:48:43 - Test1] Length: 995386

[2014-12-25 01:48:43 - Test1] SHA-1: a13f8fe2c278737e2f0b6fcf00f6b2ae4034aacf

[2014-12-25 01:48:43 - Test1] Path: D:\develop\Android\Test1\Test1\WScratchViewLibrary\libs\android-support-v4.jar

[2014-12-25 01:48:43 - Test1] Length: 385685

[2014-12-25 01:48:43 - Test1] SHA-1: 48c94ae70fa65718b382098237806a5909bb096e

[2014-12-25 01:48:43 - Test1] Path: D:\develop\Android\Test1\appcompat_v7\libs\android-support-v4.jar

[2014-12-25 01:48:43 - Test1] Length: 995386

[2014-12-25 01:48:43 - Test1] SHA-1: a13f8fe2c278737e2f0b6fcf00f6b2ae4034aacf

[2014-12-25 01:48:43 - Test1] Jar mismatch! Fix your dependencies



======

당황하지 말고 영어를 해석해보자.
android-support-v4.jar 파일이 세개가 발견됐는데 SHA-1으로 파일이 동등한지 검사해보니
다른놈이 하나 껴있다는 내용이다.
이거 dependancy 설정 만지는 다른 해결책이 있는 것 같은데 잘 모르겠어서,
막가파 내 방식대로 해결했다.

1. 딴사람의 라이브러리 폴더-libs의 android-support-v4.jar 파일을 지운다.
2. 내 프로젝트 폴더-libs의 android-support-v4.jar 파일을 복사하여 딴사람의 라이브러리 폴더-libs에 붙여넣기
3. project-clean

해결되었다. 이 조치로 인해 아직까지 큰 문제는 없었으나, 향후 발생할 문제에 대해서는 책임지지 않기로 한다. (무책임)

p.s. 포스팅으로 보기엔 따박따박 해결책을 바로 찾은걸로 보이나 실제로는 수시간의 개삽질을 했음을 알립니다.



선 해결책 : WebChromeClient의 onReceivedTitle() 콜백 메서드를 사용한다.




안드로이드 API 의 폭이 매우 넓기 때문에 다양한 해결책이 있을 수 있지만,

개인적으로 막혔던 부분을 해결하는 과정을 적어본다.


<시행착오>

구글 검색, 스택오버플로우 검색을 하면서 두가지 해결책을 시도해봤다.

WebViewClient의 콜백 메서드인 onPageStarted, onPageFinished인데, 이름에서 보이듯이

웹페이지 로딩 시작시와, 로딩 완료시에 호출되는 메서드다.

이 메서드 안에 title = view.getTitle(); 를 이용해서 title 가져오기 시도했으나

onPageStarted에서는 아무런 제목도 반환되지 않았고,

onPageFinished는 페이지 로딩이 완료를 기다려야 돼서,바로 제목처리를 할 수 없었다.

   



<최종 해결책>

WebChromeClient의 onReceivedTitle() 콜백 메서드를 사용한다.

새로운 제목이 들어오는 순간 호출되기 때문에 딜레이가 없다.


String title = new String();


 class webViewChrome extends WebChromeClient {

        

        @Override

        public void onReceivedTitle(WebView view, String title) {

            super.onReceivedTitle(view, title);

            if (!TextUtils.isEmpty(title)) {

            본인액티비티명.title = title;

            }

        }


}


http://stackoverflow.com/questions/18794638/android-webview-getfavicon-returning-null




선결론 : jar 파일 복사만 해주면 3분만에 해결됨.


안드로이드 개발을 갓 시작했을 때, 하루종일 고생시켰던 문제가 있는데,

프로젝트를 새로 생성 하자마자 아래 에러가 떴기 때문이다.


Errors (3 items)

The project cannot be built until build path errors are resolved

The project cannot be built until build path errors are resolved

The container 'Android Dependencies' references non existing library 'D:\develop\Android\tryandlearn\appcompat_v7\bin\appcompat_v7.jar'  Build path  Build Path Problem





당시에는 아무것도 몰라서 stackoverflow에서 몇몇 방법이랍시고 적어둔 걸 해봤었다.

라이브러리 잡고, 빌드패스 만지작한 후 메뉴-project-clean 반복. 결과는 전부 실패였다.

그래서 SDK와 딸려나온 이클립스 싹다 지우고, 기존에 있던 이클립스에 안드로이드 다운받아서

어쩌다가 되니까 그냥 넘어갔었다.


그런데 지금 새로 프로젝트를 생성한 뒤 또 에러메시지가 뜨는걸 보고 당황했으나,

침착하게 영어를 해석하고 빡!

안드로이드\프로젝명\appcompat_v7\bin 폴더로 가서 appcompat_v7.jar 파일이 없는걸 확인했다.

좀 뒤져보니 \bin 폴더가 아니라 \libs 폴더에 비슷한 이름 파일 두개가 있더라.

그래서 android-support-v7-appcompat.jar 이 파일을

\bin 폴더로 복사해주고 이름을 appcompat-v7로 변경해주었다. (걍 에러 메시지에서 나타난 대로)

그랬더니 해결됨.


예전에 하루종일 고생했던 걸 3분만에 해결하고나니 좀 허무하다 ㅋㅋㅋ





[결론]

안드로이드\프로젝명\appcompat_v7\libs 폴더의 android-support-v7-appcompat.jar 파일을

안드로이드\프로젝명\appcompat_v7\bin 폴더로 복사한 후, 

이름을 appcopat_v7.jar로 변경해주고,

메뉴-project-clean 빡 해주면 끝.



슈퍼맨








이클립스로 안드로이드 개발 중,

Ctrl+F11 실행하면 아래 Console 창에 아래와 같은 메시지가 뜰 때가 있다.


The connection to adb is down, and a severe error has occured.

You must restart adb and Eclipse.

Please ensure that adb is correctly located at '(작업폴더)\tools\adb.exe' and can be executed.



[이때 해결책]


1. 이클립스를 종료한다.

2. 도스창 CMD에서 (안드로이드 SDK 설치된 폴더) / platform-tools/ 폴더를 찾아간다.

3. adb kill-server 입력

4. adb start-server 입력

5. 에러 없이 ADB서버가 구동되면 된거임.

6. 이클립스 재실행해서 다시 연결 시도.


* 위의 방법으로도 안되면 재부팅후 다시 해본다.




출처 : http://stackoverflow.com/questions/4072706/the-connection-to-adb-is-down-and-a-severe-error-has-occured

+ Recent posts