IT_Programming/Dev Tools

Android Studio Tips: Project 설정

JJun ™ 2015. 3. 30. 11:10



 출처: https://www.davidlab.net/ko/tech/android-studio-tips-project-settings/




Android 개발을 위한 IDE가 Eclipse 기반에서 IntelliJ 기반으로 넘어오면서 달라진 점은 Build System의 변화입니다.
기존에는 Ant를 Build Systlem으로 사용했지만, IntelliJ 기반의 Android Studio에서는 Gradle을 Build System으로 사용합니다.
Gradle은 Ant와 Maven의 장점을 모두 포함한 Build System입니다. 확장성이 뛰어나고, Library Dependency로 인한 번거로운 작업을 줄여줍니다.

이번 Post에서는 Android Studio에서 생성한 Gradle 기반의 Android Project의 Project 설정과 관련된 몇 가지 Tip을 소개합니다.



1. APK 이름 변경


Project를 Build하면 Build된 APK는 app/build/outputs/apk에 위치합니다.

기본적으로 생성된 APK는 app-*.apk와 같은 이름을 가지게 되는데 이것을 변경하기 위해서는 다음과 같이 app/build.gradle을 수정합니다.1

android {
defaultConfig {
project.ext.set("archivesBaseName", "appname");
}
}
view rawbuild.gradle hosted with ❤ by GitHub

appname에 바꾸고자 하는 APK 이름을 입력하고 Build하면 APK의 이름이 appname-*.apk와 같이 변경됩니다.

또한, APK 이름에 Version 정보를 추가하고 싶다면 다음과 같이 입력하면 됩니다.2

android {
defaultConfig {
versionName "0.1"
}
applicationVariants.all { variant ->
variant.outputs.each { output ->
output.outputFile = new File(
output.outputFile.parent,
output.outputFile.name.replace(".apk", "-${variant.versionName}.apk"))
}
}
}
view rawbuild.gradle hosted with ❤ by GitHub

위와 같이 app/build.gradle을 수정하고 Build하면, build.gradle에 설정된 versionName이 APK 이름에 추가됩니다. (ex. app-debug-0.1.apk)




2. ProGuard 설정


ProGuard는 Java Code를 위한 최적화 및 난독화 Utility입니다. 이것을 사용하면 약간의 성능 향상이 가능하며
Reverse Engineering을 어렵게 만들기 때문에 App 배포를 위한 Build를 수행할 때 같이 실행해 주면 좋습니다.

이것을 적용하기 위해서는 app/build.gradle을 다음과 같이 수정합니다.

android {
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
view rawbuild.gradle hosted with ❤ by GitHub

위와 같이 입력하면 release Build 시에만 ProGuard가 적용이 됩니다.
기본적인 Proguard 설정은 Android SDK에 포함된 proguard-android.txt에 지정되어 있기 때문에 추가적인 설정은 필요하지 않습니다.
하지만 Runtime에 ClassNotFoundException이 발생한다면 app/proguard-rules.pro를 열어서 해당 Class에 최적화 및 난독화가 실행되지 않도록 
-keep Option을 사용한 설정을 추가해 주면 됩니다.3

-keep public class MyClass


MyClass에 ClassNotFoundException이 발생한 Class의 이름을 넣어주면 Runtime에 발생하는 Error를 해결할 수 있습니다.
그리고 Project에 적용된 Library와 관련하여 Proguard 설정 시 문제가 발생하는 경우가 있습니다.
이 경우에는 Google 검색을 통하여 해당 Library 적용과 관련된 ProGuard Rule을 찾아 app/proguard-rules.pro에 추가하고 Build하면 됩니다.




3. App Signing 설정


Android는 모든 App에 대하여 인증서로 Sign할 것을 요구합니다. Android는 해당 App에 Sign된 인증서로 App의 제작자인지 확인함으로써
변형된 App의 설치를 방지합니다.4 때문에 App을 배포할 시에는 반드시 App Signing이 필요합니다.
이번 항목에서는 App Signing을 Android Studio Project에 적용하는 방법을 알아봅니다.



3.1 Keystore 및 Private Key 생성


App Signing을 위해서는 먼저 Keystore와 Private Key를 생성해야 합니다.
Keystore는 Private Key를 저장하기 위한 저장소로 JDK의 keytool이란 도구를 이용하여 생성할 수 있습니다.

다음과 같이 입력하여 Keystore와 Private Key를 생성합니다.

$ keytool -genkey -v -keystore $HOME/.android/.keystore -alias Release -keyalg RSA -keysize 2048 -validity 10000
$ chmod 600 $HOME/.android/.keystore

위의 keytool 명령을 통해 $HOME/.android/.keystore라는 이름으로 Keystore가 생성되고 Release라는 이름의 Private Key가 생성됩니다.

생성된 Keystore는 만약을 대비하여 Cloud나 다른 저장매체에 Backup해 두는 것이 좋습니다.




3.2 Release Build 시 App Signing 적용


생성한 Private Key를 App Singing을 위해 Project에 설정하기 위해서는 먼저 다음과 같이 Gradle을 위한 Properties File을 생성하여
민감한 정보를 Project와 별도로 저장합니다.5

$ vi $HOME/.gradle/gradle.properties
RELEASE_STORE_FILE=.android/.keystore
RELEASE_STORE_PASSWORD=password
RELEASE_KEY_ALIAS=Release
RELEASE_KEY_PASSWORD=password
$ chmod 600 $HOME/.gradle/gradle.properties
view raw03-change-perm.sh hosted with ❤ by GitHub


gradle.properties의 각 Property는 다음과 같은 의미를 가집니다.

  • RELEASE_STORE_FILE: Keystore File의 경로. build.gradle과의 연동을 위해서 사용자의 Home Directory로 부터의 상대 경로를 입력합니다.
  • RELEASE_STORE_PASSWORD: keytool 실행 시 입력한 Keystore의 Password
  • RELEASE_KEY_ALIAS: keytool 명령 실행 시 -alias Option으로 입력한 Private Key의 이름
  • RELEASE_KEY_PASSWORD: keytool 실행 시 입력한 Private Key의 Password


이렇게 민감한 정보를 따로 구분해 놓으면 build.gradle에 Password를 입력하지 않기 때문에 안전하고,
Keystore의 위치나 Private Key의 Alias도 Build하는 System의 상황에 따라 변경할 수 있기 때문에 편리합니다.

그리고 이제 app/build.gradle을 다음과 같이 수정하여 App Signing을 위한 설정을 합니다.

android {
signingConfigs {
release {
storeFile new File(System.properties['user.home'], RELEASE_STORE_FILE)
storePassword RELEASE_STORE_PASSWORD
keyAlias RELEASE_KEY_ALIAS
keyPassword RELEASE_KEY_PASSWORD
}
}
buildTypes {
release {
signingConfig signingConfigs.release
}
}
}
view rawbuild.gradle hosted with ❤ by GitHub

위와 같이 설정하면 생성한 Keystore와 Private Key를 이용하여 release Build 시에 App Signing이 수행됩니다.

Android Studio

build.gradle을 수정한 후 App 배포를 위한 release Build를 하기 위해서는 Gradle Tasks Tool Window에서 assembleRelese Task를
Double-click하면 됩니다.




4. Command-line Build 설정


Android Studio으로 생성한 Project를 Command-line에서 Build하려면,
먼저 다음과 같이 Project Home Directory의 local.properties에 Android SDK 경로를 지정해야 합니다.

$ vi local.properties
sdk.dir=/home/davidhyk/Android/Sdk


그리고 다음과 같이 입력하여 Project에 포함된 Gradle Wrapper를 이용하여 Build하면 됩니다.

$ ./gradlew assemble
view rawbuild.sh hosted with ❤ by GitHub



Tested Environments

  • Ubuntu 16.04 LTS: oracle-java8-installer-8u91, android-studio-2.1.2, gradle-2.10
  • Mac OS X 10.11.5: Oracle JDK 1.8.0_91, Android Studio 2.1.2, Gradle 2.10



Image Sources



References