android - আপড - মোবাইল অ্যাপ ডেভেলপমেন্ট




কিভাবে আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশন নির্মাণ/সংস্করণ নম্বর পেতে? (20)

Gradle এবং BuildConfig ব্যবহার করে

BuildConfig থেকে VERSION_NAME পেয়েছে

BuildConfig.VERSION_NAME

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

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

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

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

}

নোট: এই দক্ষ জ্যাক Wharton থেকে

versionName থেকে versionCode versionName এবং versionCode versionName সরানো versionName

এবং এখন থেকে build.gradle ফাইলটিতে আপনি versionName এবং versionCode versionName সেট করেছেন, আপনি যদি সেখানে থাকেন তবে এটি আপনার AndroidManifest.xml ফাইল থেকেও মুছে ফেলতে পারেন।

আমি আমার অ্যান্ড্রয়েড অ্যাপ্লিকেশন জন্য একটি বিল্ড নম্বর পেতে বা কিভাবে করতে হবে তা চিন্তা করতে হবে। আমি UI এ প্রদর্শনের জন্য বিল্ড নম্বরের প্রয়োজন।

আমি AndroidManifest.xml দিয়ে কিছু করতে হবে?


না, আপনার AndroidManifest.xml এর সাথে কিছু করার দরকার নেই

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

defaultConfig {  
   versionCode 1  
   versionName "1.0"  
}  

দ্রষ্টব্য: আপনি Playstore এ অ্যাপ্লিকেশন আপলোড করতে ইচ্ছুক হলে সংস্করণ নাম হিসাবে কোনও নাম দিতে পারেন তবে এই কোডটি যদি ইতিমধ্যে স্টোর স্টোরে থাকে তবে সংস্করণ কোডটি বর্তমান সংস্করণ কোডের থেকে ভিন্ন হতে হবে।

আপনার অ্যাপ্লিকেশানের যেকোনো জায়গা থেকে সংস্করণ কোড এবং সংস্করণ নাম পেতে কেবল নীচের কোড স্নিপেটটি ব্যবহার করুন:

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

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

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

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

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

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

উদাহরণ:

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

আপনি যদি 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" />

আমি পছন্দ ক্লাস ব্যবহার করে এই সমাধান আছে।

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

আমি শুধুমাত্র সংস্করণ কোড পেতে এবং অ্যাপ্লিকেশন আপডেট করা হয়েছে কিনা তা পরীক্ষা করে দেখুন, যদি হ্যাঁ, আমি আপডেট এক পেতে playstore আরম্ভ করা ছিল। আমি এই ভাবে করেনি।

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

এই কোড টুকরা উপর উল্লিখিত ছিল কিন্তু এখানে সব আবার অন্তর্ভুক্ত করা হয়। আপনার একটি try / catch block দরকার কারণ এটি একটি "NameNotFoundException" নিক্ষেপ করতে পারে।

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

আমি এই রাস্তার নিচে কেউ জন্য জিনিস সহজ আশা করি। :)


একটি খুব সহজ উপায় হল:

private String appVersion = BuildConfig.VERSION_NAME;

প্রথম:

import android.content.pm.PackageManager.NameNotFoundException;

এবং তারপর এই ব্যবহার করুন:

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

প্রোগ্রাম কোড এবং 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 এবং PackageManager পাবেন যদি আপনি default কনফিগারেশনে সংস্করণ সেট না করে থাকেন। সুতরাং আপনার অ্যাপ্লিকেশন ডিভাইসে 0 সংস্করণ কোড থাকবে।

একটি workaround আছে - আউটপুট 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
    }
}

ভেতরের fragment ব্যবহারের জন্য উদাহরণ।

        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

যদি আপনি গ্র্যাডল প্লাগইন / অ্যান্ড্রয়েড স্টুডিও ব্যবহার করেন, সংস্করণ BuildConfig সংস্করণে, সংস্করণ কোড এবং সংস্করণ নাম 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"
}

সবসময় ব্লক 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());
}

সামান্য ছোট সংস্করণ যদি আপনি শুধু সংস্করণ নাম চান।

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

সংস্করণ নাম এবং সংস্করণ কোড পেতে এখানে সহজ উপায়

String version_name=BuildConfig.VERSION_NAME;
int version_code=BuildConfig.VERSION_CODE; 

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

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

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

    }

  }
}





android-manifest