PlayStore에 등록된 앱은 VersionCode와 VersionName의 두가지 속성을 가지고 있다.
VersionCode는 정수값을 이용하는데, 플레이 스토어 내부적으로 상위 버전을 구분하는데 사용되고
, VersionName은 플레이 스토어에서 사용자에게 보여주기 위한 값으로 사용된다.
1 2 3 4 | package = "com.android.example" android:versionCode = "0" android:versionName = "0.0.0.0" > |
보통 AndroidManifest.xml에 위와 같이 정의하여 사용하는데,
안드로이드 스튜디오에서는 Gradle scripts의 Build.gradle(Module:app)에 정의된 아래 값에 의해 manifest에 정의된 값이 무시된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | android { compileSdkVersion 21 buildToolsVersion "21.1.2" defaultConfig { applicationId "com.android.example" minSdkVersion 14 targetSdkVersion 21 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } |
자동화된 빌드 툴을 쓰지 않고 일일히 버전코드와 버전네임을 관리하는 것은 귀찮은 일인데,
이럴때 간단하게 버전 코드를 업데이트 해줄 방법은 다음과 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | apply plugin: 'com.android.application' import java.util.regex.Pattern android { compileSdkVersion 21 buildToolsVersion "21.1.2" defaultConfig { applicationId "com.android.example" minSdkVersion 14 targetSdkVersion 21 } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:21.0.3' } task('increaseVersionCode') << { def manifestFile = file("src/main/AndroidManifest.xml") def pattern = Pattern.compile("versionCode=\"(\\d+)\"") def manifestText = manifestFile.getText() def matcher = pattern.matcher(manifestText) matcher.find() def versionCode = Integer.parseInt(matcher.group(1)) def manifestContent = matcher.replaceAll("versionCode=\"" + ++versionCode + "\"") manifestFile.write(manifestContent) } task('incrementVersionName') << { def manifestFile = file("src/main/AndroidManifest.xml") def patternVersionNumber = Pattern.compile("versionName=\"(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)\"") def manifestText = manifestFile.getText() def matcherVersionNumber = patternVersionNumber.matcher(manifestText) matcherVersionNumber.find() def majorVersion = Integer.parseInt(matcherVersionNumber.group(1)) def minorVersion = Integer.parseInt(matcherVersionNumber.group(2)) def pointVersion = Integer.parseInt(matcherVersionNumber.group(3)) def buildVersion = Integer.parseInt(matcherVersionNumber.group(4)) def mNextVersionName = majorVersion + "." + minorVersion + "." + pointVersion + "." + (buildVersion + 1) def manifestContent = matcherVersionNumber.replaceAll("versionName=\"" + mNextVersionName + "\"") manifestFile.write(manifestContent) } tasks.whenTaskAdded { task -> if (task.name == 'generateReleaseBuildConfig' || task.name == 'generateDebugBuildConfig') { task.dependsOn 'increaseVersionCode' task.dependsOn 'incrementVersionName' } } |
default config의 versionCode/versionName를 삭제한 후, Build.gradle에 위와 같이 task 구문을 추가해 주면
빌드 시마다 Manifest의 VersionCode가 +1씩 증가하게되고, VersionName은 0.0.0.0 (Major.Minor.Point.Build 버전) 순으로 형성되어
빌드 시마다 빌드버전이 +1씩 증가된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); PackageInfo pInfo = null ; try { pInfo = getPackageManager().getPackageInfo( this .getPackageName(), 0 ); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } int versionCode = pInfo.versionCode; String versionName = pInfo.versionName; TextView versionCodeTextView = (TextView) findViewById(R.id.versionCode); versionCodeTextView.setText( "VersionCode:" +Integer.toString(versionCode)); TextView versionNameTextView = (TextView) findViewById(R.id.versionName); versionNameTextView.setText( "VersionName:" +versionName); } } |
매니페스트 상에서도 바로바로 업데이트 되는 것을 볼 수 있지만 위와 같이 버전명과 버전코드를 호출해서 확인도 가능하다.
'IT_Programming > Android_Java' 카테고리의 다른 글
Android WEAR 에만 NOTIFICATION 띄우기 (0) | 2015.06.23 |
---|---|
안드로이드 여러 APK 를 하나의 어플리케이션으로 관리하기 (0) | 2015.06.23 |
Multidex를 사용할 수 없는 Eclipse에서 JAR에 dex를 추가하여 메소드 65536개 오류 방지하기 (0) | 2015.06.23 |
[Android] jar, apk의 메소드 아이디 카운트 체크 (0) | 2015.06.23 |
[펌] 안드로이드 회전하는 뷰 만들기 (0) | 2015.06.08 |