Seize the day

POST : Android Dev Study

안드로이드 스튜디오 개발환경 구축하기

이틀간의 삽질을 정리했다.

회사에서는 이클립스를 개인적으로는 안드로이드 스튜디오를 사용할 계획...

 

 

git client 설치
  • http://git-scm.com/downloads
  • 윈도우 환경변수에 PATH에 추가
    • c:\Program Files (x86)\Git\bin\
  • git bash 콘솔을 실행하여 설정
    • git config --global user.name "내 이름"
    • git config --global user.email "내 이메일"     
JDK설치 
  • 1.7버전설치, 1.8은 proguard에서 지원하지 않음
소스트리 설치


안드로이드 스튜디오
  • c:\Android-Studio\에 설치하기
     Program files 하위에 설치할 경우 SDK 업데이트시에 관리자 쓰기 권한이 없어서 실패할 수 있음
  • ANDROID_HOME  환경변수로 추가  (gradle 빌드 스크립트에서 사용됨)
     c:\android-studio\sdk\



기존 이클립스 프로젝트 안드로이드 스튜디오로 import
  • 콘솔을 열여서 gradlew.bat tasks 를 실행해봄 
  • 릴리스 빌드 테스트
  •      메인 프로젝트의  build.gradle에 proguard설정을 추가
    • http://developer.android.com/sdk/installing/studio-build.html 참고
    • buildTypes {
              release {
                  runProguard true
                  proguardFiles getDefaultProguardFile('proguard-android.txt'), \
                  'proguard-project.txt'
                  signingConfig signingConfigs.release
              }
          }
  • 안드로이드 스튜이도에서 코드사인 키 생성,  app_key.jks로 저장
  • 메인 프로젝트의  build.gradle에 릴리스 빌드시 자동으로 코드사인하기 설정 추가
    •     // code sign 
          signingConfigs {
              release {
                  storeFile file("../app_key.jks")
                  storePassword "<storePassword>"
                  keyAlias "<projectAlias>"
                  keyPassword "<keyPassword>"
              }
          }

빌드 자동화 스크립트
  • 이클립스에서 디버그 apk 생성 (수동)
  • 안드로이드에서 디버그 apk 생성(수동)
  • 소스 처음내려받고, autobuild.cmd으로 한 방에 코드사인된 proguard 적용된 릴리스 apk 생성(자동), 로컬개발자 PC에서 개발중인 소스로 릴리스 apk 생성 가능
    • autobuild.cmd
      프로젝트를 clean하고, 빌드넘버를 증가시킨후, 릴리스 apk를 생성한다,
      apk와 proguard dump 파일을 <프로젝트>_<버전명>_release_<날짜>_<시간>.apk, .7z 파일로 압축후 deploy폴더로 복사한다. CI서버에서 매 빌드를 보관용
      -----------------
      call  gradlew.bat clean

      cd win-tools
      call incre_buildnumber.cmd
      cd ..

      call gradlew.bat assembleRelease 
      if not "%ERRORLEVEL%" == "0" goto ERROR

      cd win-tools
      call copy_apk.cmd
      cd ..
      if not "%ERRORLEVEL%" == "0" goto ERROR
      echo "All Success!"

      exit /b 0

      :ERROR
      echo autobuild.cmd failed..
      exit /b 1

      ------------------

    • incre_buildnumber.cmd
      CI서버에서나 로컬에서 빌드를 할 경우 AndroidManifest.xml를 매번 수정하는 것 보다는 빌드넘버를 사용하는 것이 좋을 것 같다.
      메니페스트의 versionName은 "1.0.1"이라면 빌드넘버는 빌드를 할 때마다 1씩 증가하고 단지 빌드를 구별하기위한 용도이지 마켓에서 버전 체크용으로는 사용되지 않는다. 
      스크립트를 호출할 때마다 build_numerber.xml 파일을 자동으로 생성하여 resource/value 폴더로 복사한다. 사용은 R.string.bumild_number로 인식된다.
      젠킨스에서 베타나 릴리스 프로젝트 구성에 따라 빌드넘버가 다르게 부여되고, 빌드넘버는 저장소에 저장되지 않는다. 
      ------------------
      set BUILDNUM=0
      if exist _buildnumber.bat call _buildnumber.bat
      set /A BUILDNUM=BUILDNUM+1
      echo new Build number is %BUILDNUM%
      echo ^<?xml version="1.0" encoding="utf-8"?^>^<resources^>^<string name="build_number"^>%BUILDNUM%^</string^>^</resources^>     > "..\LearningHabit\res\values\build_number.xml"
      echo set BUILDNUM=%BUILDNUM% > _buildnumber.bat

      REM build_number.xml
      REM <?xml version="1.0" encoding="utf-8"?><resources><string name="build_number">23</string></resources> 
          
      --------------------
      • build.gradle에 lint 옵션 추가
         lintOptions {
                checkReleaseBuilds false
                // Or, if you prefer, you can continue to check for errors in release builds,
                // but continue the build even when errors are found:
                abortOnError false
            }



    • copy_apk.cmd
    • --------------------
      call _version.bat
      SET APP_VERSION=%APP_VERSION:.=_%

      REM ':' '-' '.' 문자는 제거하고, 공백문자 ' '는 0으로 대체
      set TIMESTAMP=%DATE%_%TIME%
      SET TIMESTAMP=%TIMESTAMP::=%
      SET TIMESTAMP=%TIMESTAMP:-=%
      SET TIMESTAMP=%TIMESTAMP:.=%
      SET TIMESTAMP=%TIMESTAMP: =0%

      set filename=LearningHabit_%APP_VERSION%_release_%TIMESTAMP%.7z
      set apk_filename=LearningHabit_%APP_VERSION%_release_%TIMESTAMP%.apk

      mkdir ..\deploy
      .\7z.exe a ..\deploy\%filename%   ..\LearningHabit\build\outputs
      copy ..\LearningHabit\build\outputs\apk\LearningHabit-release.apk  ..\deploy\%apk_filename% /Y
      if not "%ERRORLEVEL%" == "0" goto ERROR
      exit /b 0

      :ERROR
      echo copy_apk.cmd failed..
      exit /b 1

      --------------------
    • _version.bat
      AndroidManifest.cml에서 버전을 가져온다. 
      --------------------
      BuildUtil.exe /get ..\LearningHabit\AndroidManifest.xml manifest/@android:versionName APP_VERSION > %temp%\__temp.bat
      call %temp%\__temp.bat
      echo %APP_VERSION%
      del %temp%\__temp.bat 

      --------------------
    • 빌드가 성공하면 .\deploy폴더에 
      LearningHabit_1_0_release_20141001_12515744.7z
      LearningHabit_1_0_release_20141001_12515744.apk

      두 파일이 생성된다. 

  • 젠킨스에서 베타, 릴리스 빌드 생성(자동)


Jenkins

설치 URL

관리 > 플러그인에서 > 설치가능 탭 > 검색(git으로 검색)
     젠킨스 시작하고 바로 접속하면 목록에 없지만 한 5분정도 지나 새로고침 하면 목록이 노출된다.
     GIT plugin 설치하면 필요한 플러그인은 자동으로 설치가 됨
          GIT client plugin  설치          
          SCM API Plugin 설치
          등등 설치됨

관리 > 환경설정에서 
     JDK 에서 
          JAVA_HOME  경로설정
               c:\Program Files\Java\jdk1.7.0_67\
     Git 에서 git.exe 경로설정
          c:\Program Files (x86)\Git\bin\git.exe
     Home 디렉토리 > 고급 버튼> 워크스페이스 폴더 변경
          d:/workspace/${ITEM_FULLNAME}
          
test 프로젝트 추가 
     - git 저장소, 인증추가하기
          무슨 이유인지 모르겠지만 bitbucket.org의 경우 소스트리의 puttyAgent에서 사용하는 ppk파일을 private key file로 지정하여야 인증이 된다. id_rsa파일이 원래 ssh private key파일인데 왜 안 되는지 모르겠음. 이것 때문에 몇 시간 삽질했다. 프로젝트 clone은 성공했지만 결국 CI에서 빌드는 실패했다. 프로젝트에서 sub module을 사용하고 있는데 젠킨스에서는 sub module을 clone하지 않는다. 이걸 할려면 Git 설정 하위에 Additional Behaviours 쪽에 sub-moulde관련을 추가해야 하는데, 로그를 보면 sub-module을 clone하면서 public key인증 오류가 난다. "ssh agent" 플러그인으로 해결해야 할 것 같은데 여기서 막혔다. 윈도즈 환경이라서 발생하는 문제일 수 있는데 해결책을 못 찼음. 나만 발생하는 것일 수 있고. CI의 워크스페이스 폴더에서 cmd로 콘솔을 열어서 sub-module을 수동으로 업데이트하고 CI서버에서 빌드하면 빌드가 성공한다.
     - Add Build step > execute window batch command
          autobuild.cmd
     - 빌드후 바이네리 배포, (ftp 등으로 다른 웹서버나 릴시스 서버에 배포) -> 이건 나중에. 

참고


 

top

posted at

2014. 10. 2. 13:39


CONTENTS

Seize the day
BLOG main image
김대정의 앱 개발 노트와 사는 이야기
RSS 2.0Tattertools
공지
아카이브
최근 글 최근 댓글
카테고리 태그 구름사이트 링크