Android 안드로이드2014. 8. 3. 10:31

개발자는 안드로이드 소스를 수정하면서 앱 버전 version을 올린다. 


판올림이라고도 한다. 안드로이드 어플 버전과 그 소스 버젼, 즉 앱 버전을 어떻게 표현하는 가를 알아보자. 사용가능 변수가 두 가지 있다. versionCode와 versionName이 그것이다.


AndroidManifest.xml파일 manifest 엘리먼트에서 아래 두 줄을 발견할 수 있다.

android:versionCode="4"

android:versionName="1.04"


versionCode는 개발자가 볼 수 있다.

시스템에서 버젼의 업데이트가 되었나를 확인하는 용도로 정수형입니다.

최초 시작할 때는 1이고, 업데이트할 때마다 1씩 증가시켜주면 됩니다.

이전과 지금의 상대적인 버전 값을 보여 줍니다. 


versionName는 객발자와 사용자가 볼 수 있는 문자열이다. 

안드로이드 내부 시스템에서 특수한 목적으로 사용하지 않으므로 어떠한 형태로도 표시가능하다.

홈화면 > 설정 > 앱(설정) > 해당 App상세화면 을 따라가면 화면 상단 좌측 홈 위치에서 어플App 이름 바로 아래 있는 숫자를 볼 수 있다. 주로 소숫저으로 보여지나 숫자가 아닌 문자로 취급한다.

Posted by 코드버무려
Android 안드로이드2014. 8. 2. 22:34

안드로이드에서 버튼을 만드는 방법


  • RalativeLayout, TextView,  ImageView, LinearLayout에 android:clickable="true"를 추가하면 버튼이 된다. Button 만으로 Button 을 만들 필요는 없다.

  • 버튼이미지 하나만으로 누름효과 적용하기
    • http://shiki.me/blog/android-button-background-image-pressedhighlighted-and-disabled-states-without-using-multiple-images/

  • 버튼이미지 두 개로 누름효과 적용하기
    1. res\drawable (없으면 만드다) 에 눌림효과를 줄 button_effect.xml파일을 넣는다.
    2. button_effect.xml에 소스를 추가
      1. 눌림과 안눌림 2개효과 적용할 때
        •  <?xml version="1.0" encoding="utf-8"?>
        • <selector xmlns:android="http://schemas.android.com/apk/res/android">

          •  <item android:state_pressed="true" android:drawable="@drawable/pressed_button" />

          •  <item android:drawable="@drawable/normal_button" /> 

        • </selector>

        • 효과를 줄 버튼 이미지가 있는 drawable-hdpi폴더 (또는 drawable-xhdpi,  ... )에 버튼 이미지 파일 normal_button, 

        • pressed_button을 추가해준다.

      2. 눌림과 안눌림. 포커스 3개효과 적용할 대
        • <?xml version="1.0" encoding="utf-8"?>

        • <selector xmlns:android="http://schemas.android.com/apk/res/android">

          •  <item android:state_pressed="true" android:drawable="@drawable/pressed_button" />

          •  <item android:state_focused="true" android:drawable="@drawable/focused_button" />

          •  <item android:drawable="@drawable/normal_button" /> 

        • </selector>

        • 효과를 줄 버튼 이미지가 있는 drawable-hdpi폴더 (또는 drawable-xhdpi,  ... )에 버튼 이미지 normal_button, pressed_button, focused_button을 추가해준다.

      3. 눌림효과가 적용될 activity_buttontest.xml로 가서

      4.     <Button

                android:id="@+id/button1"

                android:layout_width="302dp"

                android:layout_height="105dp"

                android:layout_centerHorizontal="true"

                android:layout_marginTop="144dp"

                android:background="@drawable/normal_button" />

      5. 위과 같은 부분을 찾는다.

      6. android:background의 값 "@drawable/normal_button"을 "@drawable/button_effect"으로 바꾼다

  • 주의할 점은 기존 android:background="@drawable/ ~ "에서 "~" 부분에 이미지 파일이 있었으나 버튼 효과를 줄 때는 xml파일로 바꾸주는 것이다.


Posted by 코드버무려
Android 안드로이드2014. 8. 2. 22:27


LinearLayout 으로 설정했을 경우 Button, TextView에서 android:layout_weight 를 사용할 수 있다. 

layout_weight 속성은 레이아웃을 배치한 후 남는 여백을 비율에 따라 나눈다. 이때 버튼과 텍스트뷰는 layout_height에서 wrap_content 또는 0dp 만을 사용할 수 있다. 다른 것을 사용할 경우 결과를 알기 어렵다.

android:layout_height="wrap_content"

android:layout_height="0dp"


layout_weight="0" 과 layout_weight="1"으로 대부분 레이아웃을 만들 수 있다.


linear_weight값이 '0'이면, 지정한 값을 반드시 차지한다. 즉 자신의 고유한 크기만큼은 꼭 가져간다.'1'이상이면 형제 뷰와의 비율에 따라 부모의 영역을 균등하게 배분한다. 가령 linear_weight 값을 3:1:3로 지정하면, 화면의 비율을 3;1:3 만큼 차지하게 된다.

 parent에 weight_sum을 1이고, child에 layout_weight 을 0 .8로 주면.. 80%를 차지한다.

Posted by 코드버무려
Android 안드로이드2014. 8. 2. 16:05

http://santerminal.tistory.com/30 에서 몇 시간을 보내고 아직까지도 해결을 못하고 있다. 계속해서 여기 저기 알아본 결과 사라지는 R.java와 관련이 있는 것 같다는 생각이다. ADK는 최신 버젼이고 꾸준히 update를 해왔으므로...


어거지로 R.java를 사용했다는 생각을 지울 수가 없다.

자동 생성되는 R.java 파일을 건들지 않기로 했다. 서베이를 한 결과 Project > Clean...를 하면 R.java를 자동으로 해결해준다고 한다. 일부는 그렇단다.

그 전에 프로젝트 팀과 사용했던 경로 환경을 똑같이 설정했다. workspace가 놓인 D드라이브를 C로 바꿨다. 안드로이드 앱에 AdMob 광고 달기( http://santerminal.tistory.com/30 )에서 설명한 것과 같이 그대로 다시 진행했다. 

우선 android-support-v7-appcompat를 임포트하고 현 프로젝트에 Library 라이브러리 연결하니 R.java가 사라졌다. 억지로 R.java를 두지 않을 예정이 었기에 무시하고 google-play-services_lib를 라이브러리에 2차로 집어 넣었다.

순식간에 사라졌던 R.java가 나타났다. Project > Clean...는 할 필요가 없었다. 컴파일도 이상 없이 진행되고 정상작동하는 앱을 볼 수 있었다. 흐믓했다.

원래 경로와 달라진 것이 문제였다. 상대경로, 절대경로, 경로 참조 등......

이제 부터 코딩 시작이다. 대략 5시간 동안 프로젝트 코딩 수정하는 일은 시작도 못하고 해메다가 지금 시작할 여건이 마련되었다. 몇 시간 휴식하고 와서 진행할 예정이다.



Posted by 코드버무려
Android 안드로이드2014. 8. 2. 13:36

팀원과 진행했던 프로젝트를 넘겨받아 추가 코딩을 할 예정이었다. 컴파일 하려고 프로젝트 import를 시도 했다. 임포트를 했으나 에러가 떠 있다. res폴더와 일부 소스에 빨간색 네모 x표시가 뜬 것이다.


라이브러리 연결이 필요한 시점이다.

본격적으로 진행하기 전에 반드시 한는 것이 있다. 이전 개발툴과 하위 호환을 위해서 기계적으로 연결시켜주는 android-support-v7-appcompat 라이브러리를 추가하는 것이다. 해당 프로젝트에서 오른쪽 버튼을 클리하고 properties > Android > 오른쪽 부분 Library > Add에서 android-support-v7-appcompat를 추가 한다.


평소와는 다른 이상한 일이 발생했다.

gen\project name(프로젝트 명)\R.java가 사라져버리고 프로젝트 전반에 새로운 빨간X 표시가 떴다. 오류를 확인하면 R.java를 참조하는 코드에서 나온다. 프로젝트를 지우고 다시 반복해도 똑같이 일어났다. 그래서 프로젝트를 임포드하고 android-support-v7-appcompat 라이브러리를 추가하기 전에 위 폴더로 가서 R.java를 R-copy.java로 복사해 놓았다. R.java가 사라진 시점에 R-copy.java를 원래 파일이름으로 변경해 주었던니 빨간X 표시느 사라졌다.


현재까지 구글 광고를 달기위한 직접적인 작업은 시작도 못했다. 대략 2시간이 지나가는 시점이다.


다음으로 안드로이드 개발툴을 설치한 lib폴더에서 google-play-services.jar가 있다. 내가 설치한 폴더는 

adt-bundle-windows-x86-20140702\sdk\extras\google\google_play_services\libproject\google-play-services_lib\libs 와 같다.


마지막으로 구글 광고 AdMob을 프로젝트에 추가해 보자. 

해당 프로젝트에서 오른쪽 버튼을 클리하고 properties > Java Build Path > Libraries > Add External JARs... 를 쭉 따락 간다. 위 문단에서 알려준 구글 안드로이드 개발툴 마지막 폴더 libs에서 google-play-services.jar 파일을 발견할 수 있다. 선택해주면 된다.

google-play-services.jar 라이브러리 파일을 이클립스에서 구글 광고 AdMob를 추가하려는 프로젝트의 libs 폴더에 끌어 놓기 한다.


안드로이드매니패스트 AndroidManifest.xml 파일에 코드 몇 줄이 더 필요하다.

  1. application 엘리먼트 하위에 아래 코드를 추가한다. 
    • <activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
    • <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />
  2. manifest 엘리먼트 
    • <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    • <uses-permission android:name="android.permission.INTERNET"/>


여기까지 하고도 에러가 남아있다. 다른 에러를 잡으면 다른 에러가 생기는 중이다. 에러 있는 폴더를 확인하니 안드로이드메너페스트 AndroidManifest xml 파일이다. 막 새로 추가한 코드에서 나오는 오류이다. 이클립스가 "@integer/google_play_services_version"에 문제가 있다고 빨간물결무늬 밑줄로 쫙 그어서 알려준다. 

Error: No resource found that matches the given name (at 'value' with value '@integer/google_play_services_version') 라고 코드 좌측에 떠있는 빨간 동그라미를 클릭하면 에러메시지를 확인할 수 있다.


수 많은 구글링과 테스트를 끝으로 위에서 행했던 작업이 문제였다.

해당 프로젝트에서 오른쪽 버튼을 클리하고 properties > Java Build Path > Libraries > Add External JARs... 를 쭉 따락 간다. 위 문단에서 알려준 구글 안드로이드 개발툴 마지막 폴더 libs에서 google-play-services.jar 파일을 발견할 수 있다. 선택해주면 된다.
google-play-services.jar 라이브러리 파일을 이클립스에서 구글 광고 AdMob를 추가하려는 프로젝트의 libs 폴더에 끌어 놓기 한다.  ]

와 같이 하면 안된다. File>Import에서 C:\Android\adt-bundle-windows-x86-20140702\sdk\extras\google\google_play_services\libproject\google-play-services_lib 를 잡아주면 된다. 좌측 프로젝트 트리에 google-play-services_lib 프로젝트를 볼 수 있다.

구글 애드몹을 달려는 자신 프로젝트 오른족 클릭하고 properties > Android > 오른쪽 부분 Library > Add에서 google-play-services_lib를 선택하면 모든 적색x표시가 사라진다.

마지막으로 대망의 컴파일을 하자. 



약간 시간이 흐르고 .... 또 다른 에러가 발 생한다. 소스에는 어떤 에러 표시도 볼 수 없고 그렇다고 앱이 실행도 되지 않는다.

Your project contains error(s), please fix them before running your application. 

여기까지 대략 4시간 이상 시간을 사용했다.



참고 사이트

https://developers.google.com/mobile-ads-sdk/docs/

Posted by 코드버무려