我如何从AndroidManifest.xml文件下载后,不安装它,以编程方式获得我的apk的版本代码或版本名。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="xxx.xx.xxx"
    android:versionCode="1"
    android:versionName="1.1" >

例如,我想检查我的IIS服务上是否上传了新版本,在设备上安装后,如果不是新版本,我就不想安装它。


当前回答

如果你使用的是安卓Studio 2.2及以上版本,那么在安卓Studio中使用Build→Analyze APK,然后选择AndroidManifest.xml文件。

其他回答

    EditText ET1 = (EditText) findViewById(R.id.editText1);

    PackageInfo pinfo;
    try {
        pinfo = getPackageManager().getPackageInfo(getPackageName(), 0);
        String versionName = pinfo.versionName;
        ET1.setText(versionName);
        //ET2.setText(versionNumber);
    } catch (NameNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

有更简单的方法来识别版本代码和版本名。 请将最新的apk拖拽到Android studio进行apk分析器,在这里您可以交叉验证版本代码和版本名称,如下所示:

以下命令行为我工作:

aapt dump badging myapp.apk

注意:aapt.exe在SDK的构建工具子文件夹中。例如:

<sdk_path>/build-tools/23.0.2/aapt.exe

对于升级场景,另一种方法可能是使用web服务来交付当前版本号并进行检查,而不是下载整个apk来检查其版本。它可以节省一些带宽,性能更好(如果大多数时候不需要整个apk,那么下载速度比apk快得多),实现起来也更简单。

以最简单的形式,你可以在你的服务器上有一个简单的文本文件…http://some-place.com/current-app-version.txt

在那个文本文件里面有

3.1.4

然后下载该文件并检查当前安装的版本。

构建一个更高级的解决方案是实现一个适当的web服务,并在启动时调用api,该api可以返回一些json,即http://api.some-place.com/versionCheck:

{
    "current_version": "3.1.4"
}

如果你使用的是安卓Studio 2.2及以上版本,那么在安卓Studio中使用Build→Analyze APK,然后选择AndroidManifest.xml文件。