android-emulator version code - あなたのAndroidアプリケーションのビルド/バージョン番号を取得するには?



13 Answers

バージョン0.7.0のGradleプラグイン/ Android Studioを使用している場合、バージョンコードとバージョン名は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"
}
java

Androidアプリケーションのビルド番号を取得する方法や作成する方法を理解する必要があります。 UIに表示するビルド番号が必要です。

AndroidManifest.xml何かする必要がありますか?




必要な部分は2つあります:android:versionCode android:versionName

versionCodeは数字であり、Marketに提出するアプリのすべてのバージョンは、最後の番号よりも高い番号を持つ必要があります。

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



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

私はパッケージマネージャーからそれを入手する必要性を見ません




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

herehereから派生しhere here




BuildConfigクラスを使用する

String versionName = BuildConfig.VERSION_NAME;
int versionCode = BuildConfig.VERSION_CODE;

build.gradle(app)

 defaultConfig {
    applicationId "com.myapp"
    minSdkVersion 19
    targetSdkVersion 27
    versionCode 17
    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());
}



私はPreferenceクラスを使ってこれを解決しました。

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



しかし、アプリケーションのUI用にBuildConfig情報を必要としない人は、私のようなCIジョブ設定などを設定するためにこれらの情報を使用したいと考えています。

プロジェクトを正常に構築する限り、自動的に生成されたファイルBuildConfig.javaがプロジェクトディレクトリの下にあります。

{Workspace} / build / generated / source / buildConfig / {debug | release} / {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)

私の限られた英語力は許してください。




versionCodeversionNameプログラムで取得するにはいくつかの方法があり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;

図書館プロジェクトで第2の方法を使用することを除いて、いくつかの詳細があります。 新しいandroid gradle plugin(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値を正しく設定しますが、 default設定でバージョンを設定しなかった場合はPackageManagerから0nullが返され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
    }
}



最初:

import android.content.pm.PackageManager.NameNotFoundException;

これを使用してください:

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



これを試してみてください:

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



アクティビティファイル

final TextView text_1 = (TextView) findViewById(R.id.text_1);

String version= BuildConfig.VERSION_NAME;
int code = BuildConfig.VERSION_CODE;
text_1.setText("version Name :   "+version+ "Version Code : "+code);

それがあなたを助けることを願って...!




try {
        PackageInfo packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
        String versionName = packageInfo.versionName;
        int versionCode = packageInfo.versionCode;
        //binding.tvVersionCode.setText("v" + packageInfo.versionName);
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }



Related