কীভাবে আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশনটির বিল্ড / সংস্করণ নম্বর পাবেন?


1284

আমার অ্যান্ড্রয়েড অ্যাপ্লিকেশনটির জন্য কীভাবে একটি বিল্ড নম্বর পাবেন বা করবেন তা আমার খুঁজে বের করতে হবে। ইউআইতে প্রদর্শনের জন্য আমার বিল্ড নম্বরটি দরকার।

আমাকে কিছু করতে হবে AndroidManifest.xml?


2
নিশ্চিত নয়, তবে আমি মনে করি আপনি এন্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল ফাইল বিশ্লেষণ করে এটি পেতে পারেন।
সুনীত কুমার গুপ্ত

1
অনুরূপ করা: stackoverflow.com/questions/4471025/...
xpto

সংস্করণ কোডটি ব্যবহার করতে int versionCode = BuildConfig.VERSION_CODE;এবং সংস্করণটির নাম পেতেString versionName = BuildConfig.VERSION_NAME;
লুকাশ

উত্তর:


2039

ব্যবহার করুন:

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

এবং আপনি এটি ব্যবহার করে সংস্করণ কোডটি পেতে পারেন

int verCode = pInfo.versionCode;

52
@ ফেলিক্স আপনি প্রসঙ্গের বাইরে getPackageManager () কল করতে পারবেন না, সুতরাং getapplicationContext () (অথবা প্রসঙ্গটি উত্তীর্ণ) প্রয়োজন হতে পারে।
সভার করুন

2
আপনি যদি কিছু স্থির পদ্ধতির ভিতরে এই নম্বরটি প্রয়োজন যেখানে আপনি প্রসঙ্গটি পাস করতে পারবেন না? আমার পক্ষে খারাপ নকশা?
গুব্যাট্রন

35
আর করতে ভুলবেন না try... catch..যখনgetPackageInfo()
anticafe

4
আমার নীচের উত্তর গুব্যাট্রন এই মানগুলি স্থিতিশীলভাবে পুনরুদ্ধার করতে দেয়।
স্যাম ডোজর

25
আপনি যদি কেবলমাত্র অ্যাপ্লিকেশনটির সংস্করণ পেতে চান তবে এটি দুটি সংযুক্ত। এখানেBuildConfig.VERSION_** প্রস্তাবিত হিসাবে আপনার ব্যবহার করা উচিত ।
টিমো বহর

1912

আপনি যদি গ্রেডল প্লাগইন / অ্যান্ড্রয়েড স্টুডিও ব্যবহার করছেন তবে সংস্করণ ০.7.০ হিসাবে সংস্করণ কোড এবং সংস্করণ নামটি স্ট্যাটিকভাবে পাওয়া যায় BuildConfigআপনি নিজের অ্যাপ্লিকেশনটির প্যাকেজটি আমদানি করেছেন এবং অন্যটি নয় তা নিশ্চিত করুনBuildConfig :

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

কোনও প্রসঙ্গের প্রয়োজন নেই!

build.gradleএগুলির পরিবর্তে আপনার ফাইলে সেগুলি নির্দিষ্ট করে দেওয়ার বিষয়টি নিশ্চিত করুন AndroidManifest.xml

defaultConfig {
    versionCode 1
    versionName "1.0"
}

177
এটি আসলে সমস্ত প্রসঙ্গ এবং প্যাকেজ ম্যানেজারের চেয়ে অনেক ভাল, আপনাকে ধন্যবাদ।
সুপারজুগি

16
প্রকৃতপক্ষে অ্যান্ড্রয়েড স্টুডিও চালু হওয়ার পরে এটিই সেরা সমাধান !!! আমার পক্ষ থেকে +1
ধ্রুবিল প্যাটেল

15
এটি খুব নির্ভরযোগ্য নয়। সংস্করণ নাম বেশিরভাগ সময় খালি স্ট্রিং হিসাবে প্রদর্শিত হয়।
বিনয় বাবু

20
@ বিনয়বাবু versionNameআপনার build.gradleফাইলটিতে আপনার অ্যাপ্লিকেশনটির জন্য নির্দিষ্ট করে থাকলে এটি কখনই খালি স্ট্রিং হিসাবে দেখাবে না ।
স্যাম ডোজোর

39
এটি কাজ করার জন্য আপনাকে সঠিক প্যাকেজটি আমদানি করতে হবে:import com.yourapppackage.android.BuildConfig
এরিক বি।

435

আপনি যদি কেবল সংস্করণের নাম চান তবে সামান্য সংক্ষিপ্ত সংস্করণ।

String versionName = context.getPackageManager()
    .getPackageInfo(context.getPackageName(), 0).versionName;

81
চমৎকার। এটি সম্ভবত নেমনাটফাউন্ডএক্সসেপ্টের জন্য চেষ্টা / ধরার সাথে ঘিরে থাকা উচিত।
ইগোরগানাপলস্কি

6
+1 আমি আপনার সমাধানটি কার্যকর করেছি যা দুর্দান্ত কাজ করে! যাইহোক, এই সমাধানটি চেষ্টা করে দেখে ধরা উচিত যেমন ইগর বলেছিলেন এবং এটি ভাল অনুশীলন (উদাহরণস্বরূপ ডিবাগিংয়ের জন্য) প্রসঙ্গকে ফোন করার পরিবর্তে প্রতিটি পদ্ধতি কলকে আলাদা লাইনে রেখে দেওয়া উচিত me একটি এক লাইনে। অতএব আমি নীচে
মাইকেল

1
এটিই সঠিক সমাধান, ধন্যবাদ;) তবে, @ ইগরগানাপলস্কির পরামর্শ অনুসারে, এটি চেষ্টা /
ধর

2
গ্র্যাডল ব্যবহারকারীদের জন্য - একটি সহজ সমাধান রয়েছে। আমার উত্তর নীচে দেখুন।
স্যাম ডোজর

1
@ ইরভিনাস আমি এই জাতীয় জিনিসগুলি ধরার জন্য জেনেরিক ব্যতিক্রম ব্যবহার করার ধারণার সাথে আন্তরিকভাবে একমত নই। আরও সূক্ষ্ম-ব্যতিক্রমযুক্ত ব্যতিক্রমগুলি সম্ভাব্য ত্রুটিগুলি সম্পর্কে বিকাশকারীদের বোঝার প্রকাশ করে।
ইগোরগানাপলস্কি

173

আপনার প্রয়োজন দুটি অংশ রয়েছে: অ্যান্ড্রয়েড: সংস্করণকোড অ্যান্ড্রয়েড: সংস্করণ নাম

সংস্করণকোড একটি নম্বর এবং আপনি বাজারে জমা দেওয়া অ্যাপ্লিকেশনটির প্রতিটি সংস্করণে শেষের পরে একটি উচ্চতর নম্বর থাকা দরকার।

ভার্সননেম একটি স্ট্রিং, এবং আপনি যা হতে চান তা হতে পারে। আপনি এখানে আপনার অ্যাপ্লিকেশনটিকে "1.0" বা "2.5" বা "2 আলফা এক্সট্রেম হিসাবে সংজ্ঞা দিয়েছেন! বা যাই হোক না কেন.

উদাহরণ:

Kotlin:

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();

6
অ্যান্ড্রয়েডের অফিসিয়াল বিবরণ android:versionCodeএবং android:versionNameএটি এখানে পাওয়া যাবে: developer.android.com/tools/publishing/…
জেফ্রো

2
এই ক্ষেত্রে প্রসঙ্গটি .ie ক্রিয়াকলাপ, পরিষেবা .etc
পেটারচাউলা

3
আপনি যখন কিছু নমুনা কোডটি পেস্টারের পরামিতিগুলির অর্থ ব্যাখ্যা করার জন্য দরকারী তখন .... সমস্ত লোকেরা বুঝতে পারে this.getPackageName()যে 0আপনি কীভাবে উপস্থাপিত তার অর্থ সম্পর্কে কোনও ধারণা নেই
রাফায়েল লিমা

অ্যান্ড্রয়েড স্টুডিওর দাবি
সংস্করণকোড অবমূল্যায়ন

1
@ রোমানঘেরটা এটি এপিআই ২৮-এর মতোই you এখানে অন্য উত্তরের আপডেট পদ্ধতি রয়েছে।
Merkidemis

145

গ্রেডল এবং বিল্ডকনফিগ ব্যবহার করে

বিল্ডকনফিগ থেকে VERSION_NAME প্রাপ্ত করা

BuildConfig.VERSION_NAME

হ্যাঁ, এটি এখন এত সহজ।

এটি কি VERSION_NAME এর জন্য একটি খালি স্ট্রিং ফিরিয়ে দিচ্ছে?

আপনি যদি খালি স্ট্রিং পেয়ে থাকেন BuildConfig.VERSION_NAMEতবে পড়ুন।

আমি একটি খালি স্ট্রিং BuildConfig.VERSION_NAMEপাচ্ছি কারণ আমি versionNameআমার গ্রেড বিল্ড ফাইলটিতে সেট করছিলাম না (আমি এএনটি থেকে গ্রেডলে স্থানান্তরিত হয়েছি)। সুতরাং, আপনি 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}"
  }

}

দ্রষ্টব্য: এটি মাস্টারফুল জ্যাক ওয়ার্টনের কাছ থেকে ।

অপসারণ versionNameএবং versionCodeথেকেAndroidManifest.xml

আর যেহেতু আপনি সেট করেছি versionNameএবং versionCodebuild.gradleএখন ফাইল, আপনি তাদের আপনার থেকে অপসারণ করতে পারেন AndroidManifest.xmlফাইল, যদি তারা আছে।


5
আপনি যতক্ষণ না অ্যাপ্লিকেশন প্রকল্প থেকে বিল্ডকনফিগ অ্যাক্সেস করছেন, অ্যাপ্লিকেশন প্রকল্পে ব্যবহৃত লাইব্রেরি নয় ততক্ষণ এটি দুর্দান্ত কাজ করে। অন্যথায়, আপনি লাইব্রেরি প্রকল্পের জন্য বিল্ডকনফিগ পাবেন, অ্যাপ্লিকেশনটি নয়।
জন কামিংস

@ জনক্যামিংস আকর্ষণীয় ... এটির কথা ভাবেন নি।
জোশুয়া পিন্টার 22

কিছুতেই কাজ করছে না versionName "1.2", এবং BuildConfig.VERSION_NAMEফিরে আসবে empty। এপিআই> 21
সজটিন

অনুসরণ হিসাবে, আমরা যথাযথভাবে versionCodeএবং versionNameযথাযথভাবে একটি স্থিতিশীল পূর্ণসংখ্যার এবং একটি স্ট্যাটিক স্ট্রিংয়ের পক্ষে এই পদ্ধতিটি ব্যবহার বন্ধ করে দিয়েছি । কেবলমাত্র কোড পুশের মতো কিছু সরঞ্জাম আপনার build.gradleফাইলটিকে বিশ্লেষণ করে আপনার সংস্করণ নম্বর পাওয়ার চেষ্টা করে এবং এগুলি একটি গতিশীল মান পূর্ণ করতে পারে না।
জোশুয়া পিন্টার

@ জোশুয়াপিন্টার প্যাকেজম্যানেজারটি সত্যই নিরাপদ বিকল্প। আপনি যদি বিভাজনের জন্য সংস্করণ কোড ওভাররাইডগুলি ব্যবহার করেন তবে বিল্ডকনফিগ ধ্রুবকটি এখনও মূল (স্বাদযুক্ত হলেও) মান ধারণ করে।
ইউজেন পেচানেক

54

স্কটিয়াব (জাভি সম্পাদিত) এর সমাধানের উপর ভিত্তি করে এখানে একটি পরিষ্কার সমাধান দিন । এটি আপনার পদ্ধতি দ্বারা সরবরাহ না করা থাকলে প্রথমে প্রসঙ্গটি কীভাবে পাবেন তা দেখায়। তদাতিরিক্ত এটি প্রতি লাইনে একাধিক পদ্ধতি কল করার পরিবর্তে একাধিক লাইন ব্যবহার করে। আপনার অ্যাপ্লিকেশনটি যখন ডিবাগ করতে হয় তখন এটি সহজ করে তোলে।

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, আপনি এটি কোনও পাঠ্য ভিউতে বা আপনার পছন্দ মতো সেট করতে পারেন ..

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

আপনি কি মনে করেন যে এনএনএফইকে সত্যিই ফেলে দেওয়া যেতে পারে? প্যাকেজ ম্যানেজারটিতে কোনও চলমান অ্যাপ্লিকেশন না পাওয়া অদ্ভুত হবে :)
TWiStErRob

আমি আপনার সাথে রয়েছি যে এটি অদ্ভুত হতে পারে তবে এটি এই পদ্ধতির ডিফল্ট ব্যতিক্রম - এপিআই দেখুন : এটি বলছে Throws PackageManager.NameNotFoundException if a package with the given name can not be found on the system.। যাইহোক, আমি এর জন্য কোনও দৃশ্য কল্পনা করতে পারি না!
মাইকেল

38

অ্যাপ্লিকেশন সংস্করণ পেতে বা বিল্ড কোড যা এপিকে এর সংস্করণ কোড দ্বারা সনাক্ত করতে ব্যবহৃত হয়। সংস্করণ কোডটি আপডেট, প্রকাশনা ইত্যাদির সময় প্রকৃত বিল্ড কনফিগারেশন সনাক্ত করতে ব্যবহৃত হয়

int versionCode = BuildConfig.VERSION_CODE;

সংস্করণ নাম ব্যবহারকারীদের বা বিকাশ অনুক্রমের বিকাশকারীদের দেখানোর জন্য ব্যবহৃত হয়। আপনি যেমন চান তেমন কোনও সংস্করণ নাম যুক্ত করতে পারেন

String versionName = BuildConfig.VERSION_NAME;

34

বিল্ডকনফিগ ক্লাস ব্যবহার করুন

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"
   }

23

আপনি যদি ফোনগ্যাপ ব্যবহার করছেন তবে কাস্টম ফোনগ্যাপ প্লাগইন তৈরি করুন:

আপনার অ্যাপের প্যাকেজে একটি নতুন শ্রেণি তৈরি করুন:

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;
    }
}

প্লাগইনসএক্সএমএলে, নিম্নলিখিত লাইনটি যুক্ত করুন:

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

আপনার ডিভাইস প্রস্তুত ইভেন্টে , নিম্নলিখিত কোড যুক্ত করুন:

var PackageManagerPlugin = function() {

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

তারপরে, আপনি এটি করে সংস্করণ নাম বৈশিষ্ট্যটি পেতে পারেন:

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

থেকে উদ্ভূত এখানে এবং এখানে


9
প্রশ্নটি ফোনগ্যাপের বিষয়ে ছিল না। আপনার উত্তর হয়ত মানুষকে বিভ্রান্ত করবে।
likebobi

8
প্রশ্ন, শিরোনাম, বা ট্যাগগুলিতে @ ববিজে কোথাও কোথাও এটি নির্দিষ্ট করে না যে প্রশ্নটি একটি দেশীয় অ্যাপ্লিকেশন সম্পর্কে ছিল। আমি যখন উত্তরটি অনুসন্ধান করছিলাম তখন এটিই গুগলে এসেছিল এবং আমাকে কয়েক ঘন্টা বাঁচাতে পারত।
শান হল

ধন্যবাদ হল 72215। আমি এতে খুশি হব ... যদি নিজের সংস্করণ নম্বর পাওয়ার সত্যিই অন্য কোনও উপায় না থাকে? আমি বরং সম্ভব যদি একটি প্লাগইন এড়াতে চাই!
ম্যাগনাস স্মিথ

@ ম্যাগনাসস্মিথ ফোনগ্যাপ / কর্ডোভা তাদের বিল্ট ইন ফাংশনগুলিতে যুক্ত না করলেই নয়।
শন হল

এই উদাহরণে আপনি দেখতে পারবেন অ্যাপ্লিকেশনগুলি তৈরি করতে তৃতীয় পক্ষের সমাধানগুলি ব্যবহার করা কত নির্বোধ। আপনি যখন এটি স্ক্র্যাচ থেকে নিজে লিখেছিলেন এটি কোডের কয়েক লাইন ছিল।
কোডবিট

19

কোটলিন ওয়ান-লাইনার

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

BuildConfigআপনার ক্লাসে আমদানি করার বিষয়টি নিশ্চিত করুন


13

এক্সমারিন ব্যবহারকারীদের জন্য, সংস্করণটির নাম এবং কোড পেতে এই কোডটি ব্যবহার করুন

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;
}

12

আপনি যদি এটি এক্সএমএল ব্যবহার করতে চান তবে আপনার গ্রেডের ফাইলটিতে নীচে লাইন যুক্ত করুন:

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

এবং তারপরে এটি আপনার এক্সএমএলে এটি ব্যবহার করুন:

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

আমি আমার এক্সএমএলে ত্রুটিটি পেয়ে যাচ্ছি: '@ স্ট্রিং / ভার্সন নাম' প্রতীকটি সমাধান করতে পারছি না
আরজেবি

12

না, অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল দিয়ে আপনার কিছু করার দরকার নেই

মূলত আপনার অ্যাপ্লিকেশনটির সংস্করণ নাম এবং অ্যাপ্লিকেশন স্তরের গ্রেডল ফাইলের ভিতরে সংস্করণ কোড , ডিফল্ট কনফিগ ট্যাগের আওতায় :

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();  
}  

1
সংস্করণকোডটি এপিআই 28-এ অবমুক্ত করা হয়েছিল the ডক্স অনুসারে, পরিবর্তে লং ভার্সনকোড ব্যবহার করুন; বিকাশকারী.অ্যান্ড্রয়েড
রেফারেন্স / অ্যান্ড্রয়েড / কনটেন্ট / পিএম /

11

এপিআই 28 এর জন্য প্যাকেজইনফো.সভারশনকোড অবনতিযুক্ত তাই নীচে এই কোডটি ব্যবহার করুন:

    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";
    }

9

সর্বদা এটি 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());
}

9

সংস্করণ কোড পাওয়ার জন্য এখানে পদ্ধতি:

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;
}

3
আরও ভাল পদ্ধতি - বিল্ডকনফিগ। ভার্সন_কোডি
জয়দেব

8

আমার পছন্দের ক্লাসটি ব্যবহার করে এটি সলভ হয়েছে।

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);
        }
    }
}

8

সেখানে কিছু উপায় পেতে versionCodeএবং versionNameপ্রোগ্রামেটিক্যালি।

  1. থেকে সংস্করণ পান PackageManager। এটি বেশিরভাগ ক্ষেত্রে সবচেয়ে ভাল উপায়।
try {
    String versionName = packageManager.getPackageInfo(packageName, 0).versionName;
    int versionCode = packageManager.getPackageInfo(packageName, 0).versionCode;
} catch (PackageManager.NameNotFoundException e) {
    e.printStackTrace();
}
  1. উত্পন্ন থেকে এটি পান BuildConfig.java। তবে লক্ষ্য করুন, আপনি যদি লাইব্রেরিতে এই মানগুলি অ্যাক্সেস করেন তবে এটি লাইব্রেরিটি ব্যবহার করে এমন অ্যাপ্লিকেশন নয়, গ্রন্থাগারের সংস্করণটি ফিরিয়ে দেবে। সুতরাং কেবল গ্রন্থাগারহীন প্রকল্পগুলিতে ব্যবহার করুন!
String versionName = BuildConfig.VERSION_NAME;
int versionCode = BuildConfig.VERSION_CODE;

লাইব্রেরি প্রকল্পে দ্বিতীয় উপায় ব্যবহার ব্যতীত কিছু বিশদ রয়েছে। নতুন অ্যান্ড্রয়েড গ্রেডেল প্লাগইনে (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তবে PackageManagerআপনি থেকে পাবেন 0এবং nullযদি আপনি defaultকনফিগারেশনে সংস্করণ সেট করেন না । সুতরাং আপনার অ্যাপ্লিকেশনটির 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
    }
}

6

এই কোডটি উপরে টুকরো টুকরো উল্লিখিত ছিল তবে এখানে এটি আবার সমস্ত অন্তর্ভুক্ত। আপনার একটি চেষ্টা / ক্যাপ ব্লক দরকার কারণ এটি "নেমনেটফাউন্ডএক্সসেপশন" ফেলে দিতে পারে।

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

আমি আশা করি এটি রাস্তার নিচে কারও জন্য বিষয়গুলি সহজতর করে। :)


5

অ্যাপ্লিকেশনটির ইউআইয়ের জন্য বিল্ডকনফিগের তথ্যের প্রয়োজন নেই এমন কেউ যদিও এই তথ্যটি আমার মত সিআই জব কনফিগারেশন বা অন্যকে সেট করার জন্য ব্যবহার করতে চান।

আপনি নিজের প্রকল্পটি সফলভাবে তৈরি করার সময় পর্যন্ত আপনার প্রকল্প ডিরেক্টরিতে একটি স্বয়ংক্রিয়ভাবে উত্পন্ন ফাইল, বিল্ডকনফিগ.জভা রয়েছে।

{কর্মস্থান} / বিল্ড / উত্পন্ন / উৎসে / buildConfig / {ডিবাগ | মুক্তি} / {প্যাকেজ} /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";
}

পাইথন স্ক্রিপ্ট বা অন্যান্য সরঞ্জাম দ্বারা আপনার প্রয়োজনীয় তথ্য বিভক্ত করুন। এখানে একটি উদাহরণ:

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)

দয়া করে আমার সীমাবদ্ধ ইংরাজী ক্ষমতাটি ক্ষমা করুন, তবে আশা করি এটির সাহায্য করবে helps


4
 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) {

    }

  }
}

হাই, @ ডনমজ আপনি যদি অ্যান্ড্রয়েড ডিভাইসের জন্য আন অফিশিয়াল রুট ব্যবহার করছেন। আমি জিনিস, আপনার প্রয়োজন হবে। এটি আমার পদ্ধতির
দুরুল ডালকনাট

সহায়তার জন্য ধন্যবাদ দুরুল ডালকনাট :)।
donmj

4

আর একবার চেষ্টা কর:

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

3

প্রথম:

import android.content.pm.PackageManager.NameNotFoundException;

এবং তারপরে এটি ব্যবহার করুন:

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

1
কোন শরীরের জন্য সময় পেল না।
বেলাশাদো

3
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;
        }
    }

3

খণ্ড ব্যবহারের অভ্যন্তরের উদাহরণ।

        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 usefull 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 USEFULL WITH THAT

আপনার উত্তর পোস্ট করার আগে আপনার অন্যান্য উত্তরগুলি দেখতে হবে। উদাহরণস্বরূপ আপনি getActivity.get অ্যাপ্লিকেশন কনটেক্সট করছেন প্রসঙ্গে আপনি যদি খণ্ডে থাকেন তবে আমি বুঝতে পারি তবে আপনি যদি ক্রিয়াকলাপে থাকেন তবে আমার মনে হয় না যে আপনাকে getActivity কল করতে হবে
সাহিল

আমার ক্ষেত্রে আমি তা খণ্ডের জন্য করেছি। কোডটি অনক্রিটের অভ্যন্তরে ব্যবহৃত হয়েছে
নীলকান্তমণি

3

কোটলিন উদাহরণ:

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())
    }
}

ধন্যবাদ না :-)


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

2

যেহেতু আমাকে কেবল সংস্করণ কোড পেতে হয়েছিল এবং অ্যাপটি আপডেট হয়েছে কিনা তা যাচাই করতে হয়েছিল, হ্যাঁ, আপডেট করার জন্য আমাকে প্লেস্টোর চালু করতে হয়েছিল। আমি এইভাবে করেছি।

public class CheckForUpdate {

public static final String ACTION_APP_VERSION_CHECK="app-version-check";

public static void launchPlayStoreApp(Context context)
{

    final String appPackageName = context.getPackageName(); // getPackageName() from Context or Activity object
    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;
}

}

তারপরে আমি ব্যবহার ক্লাস তৈরি করে ভাগ করা পছন্দ ব্যবহার করে সংস্করণ কোডটি সংরক্ষণ করেছি।

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 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 default  version code is 0
     }
   }

2

2020 এর মতো: এপিআই 28 "ভার্সনকোড" হ্রাস করা হয়েছে যাতে আমরা "লং ভার্সনকোড" ব্যবহার করতে পারি

কোটলিনে নমুনা কোড

  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
        }

0

বিল্ড সিস্টেমগুলির জন্য দরকারী: আপনার output.jsonএপিকে কলযুক্ত একটি ফাইল রয়েছে যা সংস্করণ নাম এবং সংস্করণকোড সহ প্রতিটি উত্পন্ন APK এর জন্য একটি অ্যারের তথ্য ধারণ করে।

যেমন

[
    {
        "apkInfo": {
            "baseName": "x86-release",
            "enabled": true,
            "filterName": "x86",
            "fullName": "86Release",
            "outputFile": "x86-release-1.0.apk",
            "splits": [
                {
                    "filterType": "ABI",
                    "value": "x86"
                }
            ],
            "type": "FULL_SPLIT",
            "versionCode": 42,
            "versionName": "1.0"
        },
        "outputType": {
            "type": "APK"
        },
        "path": "app-x86-release-1.0.apk",
        "properties": {}
    }
]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.