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
প্রোগ্রাম পেতে কিছু উপায় আছে।
-
PackageManager
থেকে সংস্করণ পান। এই অধিকাংশ ক্ষেত্রে জন্য সবচেয়ে ভাল উপায়।
try {
String versionName = packageManager.getPackageInfo(packageName, 0).versionName;
int versionCode = packageManager.getPackageInfo(packageName, 0).versionCode;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
- তৈরি
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) {
}
}
}