etc./StackOverFlow

Android 애플리케이션의 빌드/버전 번호는 어떻게 알 수 있습니까?

청렴결백한 만능 재주꾼 2022. 3. 4. 07:55
반응형

질문자 :Fahad Ali Shaikh


내 Android 애플리케이션의 빌드 번호를 얻거나 만드는 방법을 알아야 합니다. UI에 표시할 빌드 번호가 필요합니다.

AndroidManifest.xml 뭔가를 해야 합니까?



사용하다:

 try { PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); String version = pInfo.versionName; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); }

그리고 이것을 사용하여 버전 코드를 얻을 수 있습니다

 int verCode = pInfo.versionCode;

plus-

Gradle 플러그인/Android Studio를 사용하는 경우 버전 0.7.0 부터 버전 코드와 버전 이름을 BuildConfig 에서 정적으로 사용할 수 있습니다. 다른 BuildConfig 아닌 앱의 패키지를 가져와야 합니다 .

 import com.yourpackage.BuildConfig; ... int versionCode = BuildConfig.VERSION_CODE; String versionName = BuildConfig.VERSION_NAME;

컨텍스트 개체가 필요하지 않습니다!

AndroidManifest.xml 대신 build.gradle 파일에 지정해야 합니다.

 defaultConfig { versionCode 1 versionName "1.0" }

Sam Dozor

버전 이름만 원하는 경우 약간 더 짧은 버전입니다.

 try{ String versionName = context.getPackageManager() .getPackageInfo(context.getPackageName(), 0).versionName; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); return false; }

scottyab

필요한 두 부분이 있습니다.

  • 안드로이드:버전코드
  • 안드로이드:버전이름

versionCode는 숫자이며 시장에 제출하는 모든 앱 버전은 마지막 버전보다 더 높은 숫자를 가져야 합니다.

VersionName은 문자열이며 원하는 모든 것이 될 수 있습니다. 여기에서 앱을 "1.0" 또는 "2.5" 또는 "2 Alpha EXTREME!"로 정의합니다. 또는 무엇이든.

예시:

코틀린:

 val manager = this.packageManager val info = manager.getPackageInfo(this.packageName, PackageManager.GET_ACTIVITIES) toast("PackageName = " + info.packageName + "\nVersionCode = " + info.versionCode + "\nVersionName = " + info.versionName + "\nPermissions = " + info.permissions)

자바:

 PackageManager manager = this.getPackageManager(); PackageInfo info = manager.getPackageInfo(this.getPackageName(), PackageManager.GET_ACTIVITIES); Toast.makeText(this, "PackageName = " + info.packageName + "\nVersionCode = " + info.versionCode + "\nVersionName = " + info.versionName + "\nPermissions = " + info.permissions, Toast.LENGTH_SHORT).show();

Merkidemis

Gradle 및 BuildConfig 사용

BuildConfig에서 VERSION_NAME 가져오기

 BuildConfig.VERSION_NAME

네, 이제 쉽습니다.

VERSION_NAME에 대해 빈 문자열을 반환합니까?

BuildConfig.VERSION_NAME 대해 빈 문자열이 표시되면 계속 읽으십시오.

내 Grade 빌드 파일에서 versionName 을 설정하지 않았기 때문에 BuildConfig.VERSION_NAME 에 대해 계속 빈 문자열을 얻었습니다 (Ant 에서 Gradle로 마이그레이션했습니다). 따라서 Gradle을 통해 VERSION_NAME 을 설정하고 있는지 확인하는 방법은 다음과 같습니다.

파일 build.gradle

 def versionMajor = 3 def versionMinor = 0 def versionPatch = 0 def versionBuild = 0 // Bump for dogfood builds, public betas, etc. android { defaultConfig { versionCode versionMajor * 10000 + versionMinor * 1000 + versionPatch * 100 + versionBuild versionName "${versionMajor}.${versionMinor}.${versionPatch}" } }

참고: 이것은 뛰어난 Jake Wharton의 것 입니다.

AndroidManifest.xml 에서 versionNameversionCode 제거

build.gradle 파일에 versionNameversionCode 를 설정 AndroidManifest.xml 파일이 있는 경우 이를 제거할 수도 있습니다.


Joshua Pinter

다음은 scottyab(Xavi 편집) 솔루션을 기반으로 하는 깨끗한 솔루션입니다. 메서드에서 컨텍스트를 제공하지 않는 경우 컨텍스트를 먼저 가져오는 방법을 보여줍니다. 또한 한 줄에 여러 메서드를 호출하는 대신 여러 줄을 사용합니다. 이렇게 하면 애플리케이션을 디버그해야 할 때 더 쉽게 할 수 있습니다.

 Context context = getApplicationContext(); // or activity.getApplicationContext() PackageManager packageManager = context.getPackageManager(); String packageName = context.getPackageName(); String myVersionName = "not available"; // initialize String try { myVersionName = packageManager.getPackageInfo(packageName, 0).versionName; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); }

myVersionName 에서 버전 이름을 받았으므로 TextView 또는 원하는 대로 설정할 수 있습니다.

 // Set the version name to a TextView TextView tvVersionName = (TextView) findViewById(R.id.tv_versionName); tvVersionName.setText(myVersionName);

Michael

다음을 사용하여 버전 코드로 APK 파일을 식별하는 데 사용되는 앱 버전 또는 빌드 코드를 가져옵니다. 버전 코드는 업데이트, 게시 등의 시점에서 실제 빌드 구성을 감지하는 데 사용됩니다.

 int versionCode = BuildConfig.VERSION_CODE;

버전 이름은 개발 시퀀스의 사용자 또는 개발자를 표시하는 데 사용됩니다. 원하는 대로 모든 종류의 버전 이름을 추가할 수 있습니다.

 String versionName = BuildConfig.VERSION_NAME;

Rohit Patil

BuildConfig 클래스를 사용합니다.

 String versionName = BuildConfig.VERSION_NAME; int versionCode = BuildConfig.VERSION_CODE;

파일 build.gradle (앱)

 defaultConfig { applicationId "com.myapp" minSdkVersion 19 targetSdkVersion 27 versionCode 17 versionName "1.0" }

Velayutham M

코틀린 원 라이너

 val versionCode = BuildConfig.VERSION_CODE val versionName = BuildConfig.VERSION_NAME

BuildConfig 를 클래스로 가져와야 합니다.

자바 원 라이너

 String versionCode = String.valueOf(BuildConfig.VERSION_CODE); String versionName = String.valueOf(BuildConfig.VERSION_NAME);

Gastón Saillén

PhoneGap을 사용하는 경우 사용자 정의 PhoneGap 플러그인을 만듭니다.

앱 패키지에 새 클래스를 만듭니다.

 package com.Demo; //replace with your package name import org.json.JSONArray; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import com.phonegap.api.Plugin; import com.phonegap.api.PluginResult; import com.phonegap.api.PluginResult.Status; public class PackageManagerPlugin extends Plugin { public final String ACTION_GET_VERSION_NAME = "GetVersionName"; @Override public PluginResult execute(String action, JSONArray args, String callbackId) { PluginResult result = new PluginResult(Status.INVALID_ACTION); PackageManager packageManager = this.ctx.getPackageManager(); if(action.equals(ACTION_GET_VERSION_NAME)) { try { PackageInfo packageInfo = packageManager.getPackageInfo( this.ctx.getPackageName(), 0); result = new PluginResult(Status.OK, packageInfo.versionName); } catch (NameNotFoundException nnfe) { result = new PluginResult(Status.ERROR, nnfe.getMessage()); } } return result; } }

plugins.xml에서 다음 행을 추가하십시오.

 <plugin name="PackageManagerPlugin" value="com.Demo.PackageManagerPlugin" />

deviceready 이벤트 에서 다음 코드를 추가합니다.

 var PackageManagerPlugin = function() { }; PackageManagerPlugin.prototype.getVersionName = function(successCallback, failureCallback) { return PhoneGap.exec(successCallback, failureCallback, 'PackageManagerPlugin', 'GetVersionName', []); }; PhoneGap.addConstructor(function() { PhoneGap.addPlugin('packageManager', new PackageManagerPlugin()); });

그런 다음 다음을 수행하여 versionName 속성을 가져올 수 있습니다.

 window.plugins.packageManager.getVersionName( function(versionName) { //do something with versionName }, function(errorMessage) { //do something with errorMessage } );

여기여기 에서 파생되었습니다.


Sean Hall

2020년과 마찬가지로: API 28( Android 9 (Pie))부터 "versionCode"는 더 이상 사용되지 않으므로 "longVersionCode" 를 사용할 수 있습니다.

Kotlin의 샘플 코드

 val manager = context?.packageManager val info = manager?.getPackageInfo( context?.packageName, 0 ) val versionName = info?.versionName val versionNumber = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { info?.longVersionCode } else { info?.versionCode }

Mayank Sharma

API 28( Android 9 (Pie))의 경우 PackageInfo.versionCode가 더 이상 사용되지 않으므로 아래 코드를 사용하세요.

 Context context = getApplicationContext(); PackageManager manager = context.getPackageManager(); try { PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0); myversionName = info.versionName; versionCode = (int) PackageInfoCompat.getLongVersionCode(info); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); myversionName = "Unknown-01"; }

Amir jodat

XML 콘텐츠에서 사용하려면 Gradle 파일에 아래 줄을 추가하세요.

 applicationVariants.all { variant -> variant.resValue "string", "versionName", variant.versionName }

그런 다음 다음과 같이 XML 콘텐츠에 사용합니다.

 <TextView android:gravity="center_horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/versionName" />

Irfan Raza

Xamarin 사용자의 경우 이 코드를 사용하여 버전 이름 및 코드를 가져옵니다.

  1. 버전 이름:

     public string getVersionName(){ return Application.Context.ApplicationContext.PackageManager.GetPackageInfo(Application.Context.ApplicationContext.PackageName, 0).VersionName; }
  2. 버전 코드:

     public string getVersionCode(){ return Application.Context.ApplicationContext.PackageManager.GetPackageInfo(Application.Context.ApplicationContext.PackageName, 0).VersionCode; }

Tushar patel

아니요, AndroidManifest.xml로 아무것도 할 필요가 없습니다.

기본적으로 앱의 버전 이름과 버전 코드는 앱 수준 Gradle 파일의 defaultConfig 태그 아래에 있습니다.

 defaultConfig { versionCode 1 versionName "1.0" }

참고: 앱을 플레이 스토어에 업로드하려는 경우 버전 이름으로 아무 이름이나 지정할 수 있지만 이 앱이 이미 플레이 스토어에 있는 경우 버전 코드는 현재 버전 코드와 달라야 합니다.

다음 코드 스니펫을 사용 하여 앱 어디에서나 버전 코드버전 이름을 가져오기만 하면 됩니다.

 try { PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); String version = pInfo.versionName; int verCode = pInfo.versionCode; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); }

Monir Zzaman

버전 이름 : BuildConfig.VERSION_NAME 버전 코드 : BuildConfig.VERSION_CODE


D.A.C. Nupun

항상 try catch 블록으로 수행하십시오.

 String versionName = "Version not found"; try { versionName = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName; Log.i(TAG, "Version Name: " + versionName); } catch (NameNotFoundException e) { // TODO Auto-generated catch block Log.e(TAG, "Exception Version Name: " + e.getLocalizedMessage()); }

Pratik Butani

버전 코드를 가져오는 방법은 다음과 같습니다.

 public String getAppVersion() { String versionCode = "1.0"; try { versionCode = getPackageManager().getPackageInfo(getPackageName(), 0).versionName; } catch (PackageManager.NameNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } return versionCode; }

Gevaria Purva

Preference 클래스를 사용하여 이 문제를 해결했습니다.

 package com.example.android; import android.content.Context; import android.preference.Preference; import android.util.AttributeSet; public class VersionPreference extends Preference { public VersionPreference(Context context, AttributeSet attrs) { super(context, attrs); String versionName; final PackageManager packageManager = context.getPackageManager(); if (packageManager != null) { try { PackageInfo packageInfo = packageManager.getPackageInfo(context.getPackageName(), 0); versionName = packageInfo.versionName; } catch (PackageManager.NameNotFoundException e) { versionName = null; } setSummary(versionName); } } }

Shubham Gupta

프로그래밍 versionCodeversionName 을 가져오는 몇 가지 방법이 있습니다.

  1. PackageManager 에서 버전을 가져옵니다. 이것은 대부분의 경우에 가장 좋은 방법입니다.

     try { String versionName = packageManager.getPackageInfo(packageName, 0).versionName; int versionCode = packageManager.getPackageInfo(packageName, 0).versionCode; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); }
  2. BuildConfig.java 에서 가져옵니다. 그러나 라이브러리에서 이 값에 액세스하면 이 라이브러리를 사용하는 앱 버전이 아닌 라이브러리 버전이 반환됩니다. 따라서 라이브러리가 아닌 프로젝트에서만 사용하십시오!

     String versionName = BuildConfig.VERSION_NAME; int versionCode = BuildConfig.VERSION_CODE;

라이브러리 프로젝트에서 두 번째 방법을 사용하는 것을 제외하고 몇 가지 세부 사항이 있습니다. 새로운 Android Gradle 플러그인(3.0.0 이상)에서 일부 기능이 제거되었습니다 . 따라서 지금은 다른 맛에 대해 다른 버전을 설정하는 것이 제대로 작동하지 않습니다.

잘못된 방법:

 applicationVariants.all { variant -> println('variantApp: ' + variant.getName()) def versionCode = {SOME_GENERATED_VALUE_IE_TIMESTAMP} def versionName = {SOME_GENERATED_VALUE_IE_TIMESTAMP} variant.mergedFlavor.versionCode = versionCode variant.mergedFlavor.versionName = versionName }

위의 코드는 BuildConfig 에서 default 구성에서 버전을 설정하지 않은 경우 PackageManager 0null 수신합니다. 따라서 앱의 기기 버전 코드 0

해결 방법이 있습니다 - 출력 apk 파일의 버전을 수동으로 설정하십시오.

 applicationVariants.all { variant -> println('variantApp: ' + variant.getName()) def versionCode = {SOME_GENERATED_VALUE_IE_TIMESTAMP} def versionName = {SOME_GENERATED_VALUE_IE_TIMESTAMP} variant.outputs.all { output -> output.versionCodeOverride = versionCode output.versionNameOverride = versionName } }

mohax

이 코드는 위에서 부분적으로 언급되었지만 여기에 다시 모두 포함됩니다. "NameNotFoundException"이 발생할 수 있으므로 try/catch 블록이 필요합니다.

 try { String appVersion = getPackageManager().getPackageInfo(getPackageName(), 0).versionName; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); }

이것이 누군가를 위해 일을 단순화하기를 바랍니다. :)


Jeff.H

응용 프로그램의 UI에 대한 BuildConfig 정보가 필요하지 않지만 나처럼 CI 작업 구성 또는 다른 사람을 설정하는 데 이 정보를 사용하려는 사람을 위해:

프로젝트를 성공적으로 빌드하는 한 프로젝트 디렉토리 아래에 자동으로 생성된 파일 BuildConfig.java가 있습니다.

{WORKSPACE}/build/generated/source/buildConfig/{debug|release}/{PACKAGE}/BuildConfig.java

 /** * Automatically generated file. DO NOT MODIFY */ package com.XXX.Project; public final class BuildConfig { public static final boolean DEBUG = Boolean.parseBoolean("true"); public static final String APPLICATION_ID = "com.XXX.Project"; public static final String BUILD_TYPE = "debug"; public static final String FLAVOR = ""; public static final int VERSION_CODE = 1; public static final String VERSION_NAME = "1.0.0"; }

Python 스크립트 또는 기타 도구로 필요한 정보를 분할합니다. 다음은 예입니다.

 import subprocess # Find your BuildConfig.java _BuildConfig = subprocess.check_output('find {WORKSPACE} -name BuildConfig.java', shell=True).rstrip() # Get the version name _Android_version = subprocess.check_output('grep -n "VERSION_NAME" ' + _BuildConfig, shell=True).split('"')[1] print('Android version: ' + _Android_version)

JasonChiu

package com.sqisland.android.versionview; import android.app.Activity; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.os.Bundle; import android.widget.TextView; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView textViewversionName = (TextView) findViewById(R.id.text); try { PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0); textViewversionName.setText(packageInfo.versionName); } catch (PackageManager.NameNotFoundException e) { } } }

Durul Dalkanat

이걸로 해봐:

 try { device_version = getPackageManager().getPackageInfo("com.google.android.gms", 0).versionName; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); }

Heenali Lakhani

코틀린 예시:

 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.act_signin) packageManager.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES).apply { findViewById<TextView>(R.id.text_version_name).text = versionName findViewById<TextView>(R.id.text_version_code).text = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) "$longVersionCode" else "$versionCode" } packageManager.getApplicationInfo(packageName, 0).apply{ findViewById<TextView>(R.id.text_build_date).text = SimpleDateFormat("yy-MM-dd hh:mm").format(java.io.File(sourceDir).lastModified()) } }

Alexander Gavriliuk

첫 번째:

 import android.content.pm.PackageManager.NameNotFoundException;

그런 다음 이것을 사용하십시오.

 PackageInfo pInfo = null; try { pInfo = getPackageManager().getPackageInfo(getPackageName(), 0); } catch (NameNotFoundException e) { e.printStackTrace(); } String versionName = pInfo.versionName;

meduvigo

private String GetAppVersion() { try { PackageInfo _info = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0); return _info.versionName; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); return ""; } } private int GetVersionCode() { try { PackageInfo _info = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0); return _info.versionCode; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); return -1; } }

Atif Mahmood

내부 프래그먼트 사용의 예.

 import android.content.pm.PackageManager; ....... private String VersionName; private String VersionCode; ....... Context context = getActivity().getApplicationContext(); /* Getting application version name and code */ try { VersionName = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName; /* I find it useful to convert vervion code into String, so it's ready for TextViev/server side checks */ VersionCode = Integer.toString(context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionCode); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } // Do something useful with that

Sapphire91140

PackageInfo pinfo = null; try { pinfo = getPackageManager().getPackageInfo(getPackageName(), 0); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } int versionNumber = pinfo.versionCode; String versionName = pinfo.versionName;

janardhan

버전 코드만 가져와서 앱이 업데이트되었는지 여부를 확인해야 했기 때문에 업데이트된 앱을 업데이트하려면 플레이스토어를 실행해야 했습니다. 나는 이렇게 했다.

 public class CheckForUpdate { public static final String ACTION_APP_VERSION_CHECK = "app-version-check"; public static void launchPlayStoreApp(Context context) { // getPackageName() from Context or Activity object final String appPackageName = context.getPackageName(); try { context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName))); } catch (android.content.ActivityNotFoundException anfe) { context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName))); } } public static int getRemoteVersionNumber(Context context) { int versionCode = 0; try { PackageInfo pInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); String version = pInfo.versionName; versionCode = pInfo.versionCode; } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } return versionCode; } }

그런 다음 util 클래스를 만들어 공유 기본 설정을 사용하여 버전 코드를 저장했습니다.

 public class PreferenceUtils { // This is for version code private final String APP_VERSION_CODE = "APP_VERSION_CODE"; private SharedPreferences sharedPreferencesAppVersionCode; private SharedPreferences.Editor editorAppVersionCode; private static Context mContext; public PreferenceUtils(Context context) { this.mContext = context; // This is for the app versioncode sharedPreferencesAppVersionCode = mContext.getSharedPreferences(APP_VERSION_CODE,MODE_PRIVATE); editorAppVersionCode = sharedPreferencesAppVersionCode.edit(); } public void createAppVersionCode(int versionCode) { editorAppVersionCode.putInt(APP_VERSION_CODE, versionCode); editorAppVersionCode.apply(); } public int getAppVersionCode() { return sharedPreferencesAppVersionCode.getInt(APP_VERSION_CODE,0); // As the default version code is 0 } }

Ishwor Khanal

출처 : http:www.stackoverflow.com/questions/4616095/how-can-you-get-the-build-version-number-of-your-android-application

반응형