شرح - start android studio




كيفية الحصول على رقم الإصدار/البنية الخاص بتطبيق Android الخاص بك؟ (16)

باستخدام Gradle و BuildConfig

الحصول على VERSION_NAME من BuildConfig

BuildConfig.VERSION_NAME

نعم ، الأمر بهذه السهولة الآن.

هل هي إرجاع سلسلة فارغة لـ VERSION_NAME؟

إذا كنت تحصل على سلسلة فارغة لـ BuildConfig.VERSION_NAME القراءة.

versionName في الحصول على سلسلة فارغة لـ BuildConfig.VERSION_NAME لأنني لم versionName الإعداد versionName في ملف إنشاء الصف الخاص بي (تم ترحيلي من ANT إلى Gradle). لذلك ، في ما يلي تعليمات حول ضمان إعداد VERSION_NAME عبر Gradle.

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 الرائع.

إزالة versionName و versionCode من AndroidManifest.xml

ونظرًا لأنك قمت بتعيين versionName و versionCode في ملف build.gradle الآن ، يمكنك أيضًا build.gradle من ملف AndroidManifest.xml ، إذا كانا هناك.

أحتاج إلى معرفة كيفية الحصول على رقم بناء أو إنشاءه لتطبيقي على Android. أحتاج إلى رقم البنية المراد عرضه في واجهة المستخدم.

هل يجب أن أفعل شيئًا باستخدام AndroidManifest.xml ؟


أول:

import android.content.pm.PackageManager.NameNotFoundException;

ثم استخدم هذا:

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

إذا كنت تستخدم Gradle plugin / Android Studio ، اعتبارًا من الإصدار 0.7.0 ، يتوفر رمز الإصدار واسم الإصدار بشكل ثابت في 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"
}

إذا كنت تستخدم 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
    }
);

مشتقة من here و here .


إليك طريقة الحصول على رمز الإصدار:

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

استعمال:

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

ويمكنك الحصول على رمز الإصدار باستخدام هذا

int verCode = pInfo.versionCode;

تم ذكر هذا الرمز أعلاه في أجزاء ولكن هنا تم تضمينه مجددًا. أنت بحاجة إلى كتلة try / catch لأنه قد يلقي "NameNotFoundException".

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

آمل أن يبسط هذا الأمور لشخص ما على الطريق. :)


جرب هذه:

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

طريقة بسيطة للغاية هي:

private String appVersion = BuildConfig.VERSION_NAME;

غير أن الشخص الذي لا يحتاج إلى معلومات BuildConfig لتطبيق واجهة المستخدم الخاصة بالتطبيق يريد أن يستخدم هذه المعلومات في إعداد تكوين وظيفة CI أو الآخرين ، مثلي.

هناك ملف تم إنشاؤه تلقائيًا ، BuildConfig.java ، أسفل دليل المشروع طالما أنك أنشأت مشروعك بنجاح.

{WORKSPACE} / بناء / الناتج / المصدر / buildConfig / {التصحيح | الإفراج} / {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)

يرجى إعفاء قدرتي المحدودة في اللغة الإنجليزية ، لكن آمل أن يساعد ذلك.


مثال للاستخدام داخل جزء.

        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

هنا هو حل نظيف ، على أساس حل scottyab (حرره تشافي). يوضح كيفية الحصول على السياق أولاً ، إذا لم يتم توفيره وفقًا لطريقتك. وعلاوة على ذلك فإنه يستخدم خطوط متعددة بدلاً من استدعاء أساليب متعددة في كل سطر. هذا يسهل الأمر عندما تضطر إلى تصحيح التطبيق الخاص بك.

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 version name to a TextView
TextView tvVersionName = (TextView) findViewById(R.id.tv_versionName);
tvVersionName.setText(myVersionName);

هناك نوعان من الأجزاء التي تحتاج إليها: android: versionCode android: versionName

versionCode هو رقم ، ويجب أن يكون لكل إصدار من التطبيق الذي ترسله إلى السوق رقمًا أعلى ثم آخر.

VersionName هو سلسلة ، ويمكن أن يكون أي شيء تريده أن يكون. هذا هو المكان الذي تحدد فيه تطبيقك كـ "1.0" أو "2.5" أو "2 Alpha EXTREME!" أو أيا كان.

مثال:

للوصول إليه في الكود ، افعل شيئًا مثل:

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

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

BuildConfig.VERSION_NAME //version name from your build file
BuildConfig.VERSION_CODE //version code from your build file

لا أرى الحاجة إلى الحصول عليها من مدير الحزم


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






android-manifest