অ্যাপের (লেআউট) এক্সএমএল ভেরিয়েবলগুলি থেকে আপনি কীভাবে ম্যানিফেস্ট সংস্করণ নম্বর পেতে পারেন?


184

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


17
এটি কোনও সদৃশ নয়। প্রশ্নে প্রশ্নটি জিজ্ঞাসা করে যে কোডে একই জিনিসটি কীভাবে করা যায়, আমি এক্সএমএলে জিজ্ঞাসা করছি। অ্যান্ড্রয়েড প্রোগ্রামিংয়ে দুটি খুব আলাদা কনস্ট্রাক্ট ...
পিয়ারসন আর্টফোটো

উত্তর:


367

আমি বিশ্বাস করি যে এখানে ইতিমধ্যে উত্তর দেওয়া হয়েছিল ।

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

অথবা

int versionCode = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;

8
প্রায়, তবে বেশ নয় ... আমি যা করতে চাই তা হ'ল এটি একটি এক্সএমএল কোডের সাথে উল্লেখ করা, তবে দেখে মনে হচ্ছে এটি সম্ভবত সম্ভব নয়, তাই ...
পিয়ারসন আর্টফোটো

তোমাকে অনেক ধন্যবাদ!!! আমি এর জন্য সর্বত্র খুঁজছি:String versionName = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
অ্যারন ক্লেপ

1
@ শুভ আমি এটা মনে করি না।
কনস্টান্টিন বুড়ভ

3
গ্রেড ফোকসের জন্য আপনার উত্তরে বিল্ডকনফিগ.ওওয়ার্সন_NAME যুক্ত করুন।
জববার্ট

102

সরাসরি সংস্করণটি বের করার কোনও উপায় নেই তবে দুটি কাজের আশেপাশে কাজ করা যেতে পারে।

  1. সংস্করণটি কোনও রিসোর্স স্ট্রিংয়ে সংরক্ষণ করা যেতে পারে এবং ম্যানিফেস্টের মাধ্যমে এটি দ্বারা স্থাপন করা যেতে পারে:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
         package="com.somepackage"
         android:versionName="@string/version" android:versionCode="20">
  2. কেউ একটি কাস্টম ভিউ তৈরি করতে এবং এটি এক্সএমএলে স্থাপন করতে পারে। নামটি নির্ধারণের জন্য দর্শনটি এটি ব্যবহার করবে:

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

এই সমাধানগুলির কোনওটিই এক্সএমএলে সংস্করণের নাম রাখার অনুমতি দেয়। দুর্ভাগ্যক্রমে একটি দুর্দান্ত সহজ সমাধান নেই, এর মতো android.R.string.versionবা এর মতো কিছু।


14
1 এ একটি সামান্য নোট: এটি কাজ করছে তবে আমি মনে করি যেহেতু আমাকে হুঁশিয়ারি দেওয়ার পরে তা হতাশ হয়েছেThe android:versionName cannot be a resource url, it must be a literal string
গ্রিডো

1
আমি যা করেছি তা হ'ল ম্যানিফেস্ট সংস্করণ নামটি ছোঁয়া ছাড়ুন (তবে এটি যখনই নতুন প্রকাশিত হয় তখন আপডেট করুন) এবং স্ট্রিং.এক্সএমএল ব্যবহার করে আমি যে অ্যাপ্লিকেশনটি ব্যবহার করব তা সঞ্চয় করতে।
numeiaweb

1
কারণ AndroidStudio, ম্যানিফেস্টটি ফাইলের versionNameএকটি সেটbuild.gradle
এড্রিয়ান সি

66

আপনি versionNameএক্সএমএল সংস্থানগুলিতে ব্যবহার করতে পারেন , যেমন ক্রিয়াকলাপ বিন্যাস lay প্রথমে নোডে app/build.gradleনিম্নলিখিত স্নিপেটের সাহায্যে একটি স্ট্রিং রিসোর্স তৈরি করুন android:

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

সুতরাং পুরো build.gradleফাইলের সামগ্রীগুলি দেখতে এরকম হতে পারে:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion '24.0.0 rc3'
    defaultConfig {
        applicationId 'com.example.myapplication'
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 17
        versionName '0.2.3'
        jackOptions {
            enabled true
        }
    }
    applicationVariants.all { variant ->
        variant.resValue "string", "versionName", variant.versionName
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
} 

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.android.support:design:23.3.0'
    compile 'com.android.support:support-v4:23.3.0'
}

তারপরে আপনি @string/versionNameএক্সএমএল ব্যবহার করতে পারেন । অ্যান্ড্রয়েড স্টুডিও এটিকে লাল চিহ্নিত করবে, তবে অ্যাপটি কোনও সমস্যা ছাড়াই সংকলন করবে। উদাহরণস্বরূপ, এটি এতে এর মতো ব্যবহার করা যেতে পারে app/src/main/res/xml/preferences.xml:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    <PreferenceCategory
        android:title="About"
        android:key="pref_key_about">

        <Preference
            android:key="pref_about_build"
            android:title="Build version"
            android:summary="@string/versionName" />

    </PreferenceCategory>


</PreferenceScreen>


3
এটি প্রোগ্রামেটিক স্টাইলের চেয়ে ভাল।
নিউরোট্রান্সমিটার

2
বিস্ময়কর সমাধান। অসংখ্য ধন্যবাদ.
সামিক বন্দ্যোপাধ্যায়

2
আমি সর্বশেষ ব্যবহার করছি এবং এখনও আমার জন্য কাজ করে। আমি এটি এবং এর মতো আরও বেশ কয়েকটি ভেরিয়েবল ব্যবহার করি। @ কে 2col সংকলনের সময় আপনি কী ত্রুটি পেয়েছেন? Pls আপনার গ্রেড কোড পোস্ট করুন
অরুণ শঙ্কর

3
এটি সেরা উত্তর হিসাবে বিবেচনা করা উচিত।
পেপান

15

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

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

তারপরে আমার পছন্দগুলিতে এক্সএমএল:

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
    <com.example.android.VersionPreference android:title="Version" />
</PreferenceScreen>

উফ। আমি অবশ্যই অন্য কোনও মন্তব্যের ভিত্তিতে পছন্দসই এক্সএমএলটি ভাবছিলাম।
সমুদ্রভূমি

যাইহোক, আমি কেবল তার উত্তর অনুলিপি করে আটকান।
ম্যাথিজস সেগারস

13

আমি ব্যবহার BuildConfig.VERSION_NAME.toString();। এটি এবং প্যাকেজম্যানেজার থেকে পাওয়ার মধ্যে পার্থক্য কী?

কোনও এক্সএমএল ভিত্তিক সমাধান আমার পক্ষে কাজ করেনি, দুঃখিত।


7
বিল্ডকনফিগ.ভি.এস.আর.এস.আইএন.ই ইতিমধ্যে একটি স্ট্রিং, এটিতে স্ট্রিং () কল করার দরকার নেই।
মাকোটোসান

অভ্যাস। পর্যাপ্ত পরিমাণে
মোল্লাজ্জামান

আপনার প্রকল্পে এটি কল করার সময় আপনি যা প্রত্যাশা করবেন তার থেকে আলাদা ফলাফল আসতে পারে cases উদাহরণস্বরূপ, যদি আপনি আপনার প্রকল্পে অ্যান্ড্রয়েড সাবমডিউল ব্যবহার করেন এবং আপনি এটিকে সাবমোডলের কোড থেকে কল করেন তবে এটি সাবমোডলের কনফিগারেশন তৈরির জন্য উল্লেখ করবে যার বিভিন্ন সংস্করণ থাকতে পারে। অথবা আপনি যদি আপনার প্রকল্পের কোড থেকে কল করেন তবে আপনি ভুল করে আপনার সাবমোডুলের কনফিগারেশন তৈরি করতে এবং একই ফল পেতে পারেন। কেবল সতর্কতা অবলম্বন করুন এবং দ্বিগুণ পরীক্ষা করে দেখুন যে আপনি বিল্ড কনফিগারেশনের একটি সঠিক প্যাকেজটির জন্য উল্লেখ করেছেন।
মাইকেএল

এই গাইডটি ব্যবহার করার চেষ্টা করুন: मध्यम.com
@

পার্থক্যটি হ'ল বুইলকনফিগ গ্র্যাডল দ্বারা সরবরাহ করা হয়েছে যেখানে রানটাইম পাওয়া এটি প্যাকেজম্যানেজার (ওএস) দ্বারা করেছেন
ইশান কুমার

12

আপনি যদি গ্র্যাডল ব্যবহার করছেন তবে আপনি কম্পাইল সময়ে xML রিসোর্সে মান যুক্ত করতে বিল্ড.gradle ফাইলটি ব্যবহার করতে পারেন।

উদাহরণ কোড থেকে নেওয়া: https://medium.com/@manas/manage-your-android-app-s-versioncode-versionname-with-gradle-7f9c5dcf09bf

buildTypes {
    debug {
        versionNameSuffix ".debug"
        resValue "string", "app_version", "${defaultConfig.versionName}${versionNameSuffix}"
    }
    release {
        resValue "string", "app_version", "${defaultConfig.versionName}"
    }
}

এখন @string/app_versionএক্সএমএল হিসাবে প্রয়োজন হিসাবে ব্যবহার করুন

এটি .debugডিবাগ মোডে থাকাকালীন লিঙ্কিত নিবন্ধে বর্ণিত সংস্করণটির নামের সাথে যুক্ত হবে।


1
সর্বকালের সেরা উত্তর !!
রাহেল হাসান

2

আপনি এটি এক্সএমএল থেকে ব্যবহার করতে পারবেন না।

এক্সএমএলে আপনি যে উইজেটটি ব্যবহার করছেন তা প্রসারিত করতে হবে এবং কনস্ট্যান্টিন বুড়ভের উত্তরে যা উল্লেখ করা হয়েছে তা ব্যবহার করে পাঠ্য সেট করার জন্য যুক্তি যুক্ত করতে হবে।


আমি এতে ভয় পেয়েছিলাম ... সাহায্যের জন্য ধন্যবাদ!
পিয়ারসন আর্টফোটো

2
আমরা এটি ব্যবহার করতে পারি। আমার উত্তর পরীক্ষা করুন। আমি এটি আমার অ্যাপটিতে ব্যবহার করছি
অরুণ শঙ্কর

1

সবচেয়ে সহজ সমাধানটি ব্যবহার করা BuildConfig

আমি BuildConfig.VERSION_NAMEআমার অ্যাপ্লিকেশন ব্যবহার ।

BuildConfig.VERSION_CODEসংস্করণ কোড পেতে আপনি ব্যবহার করতে পারেন।


-3

গেমটি দেরিতে করা হলেও আপনি এটি @string/xyzব্যবহার না করেই করতে পারেন?android:attr

    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="?android:attr/versionName"
     />
    <!-- or -->
    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="?android:attr/versionCode"
     />

11
আমি এটির মতো ব্যবহার করি: <Preference android:title="Version" android:summary="?android:attr/versionName" ></Preference>তবে এই হিসাবে দেখান ?16843292hat কী ভুল?
Suge

আমি নিশ্চিত নই তবে মনে করি এটি পরবর্তী API এর জন্য?
মাফরো 34

@ পিয়ারসন আর্টফোটো আসলে এটি কোথায় বলে?
মাফরো 34

কাজ করে না; @ মজাদার সংখ্যাটি উপস্থাপন করেছে যা @ স্যুজি উপরে উল্লেখ করেছে
পেপান

মোটেও কাজ করে না এবং পূর্ববর্তী পোস্ট হিসাবে এলোমেলো মান প্রদান করে
A_rmas
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.