android获取apk版本号,Android下得到APK包含信息

getPackageManager()得到一个PackageManager实例。

PackageManager有一个方法:

PackageInfo getPackageArchiveInfo (String

archiveFilePath, int flags);

其中参数一:archiveFilePath。就是指一个APK文件绝对路径。

请注意它的返回值。是个PackageInfo。它包含Pakcage所有信息,可以认为,这些信息都是从AndroidManifest.xml中收集而来。

1. 得到APK中Activity信息:

PackageInfo中包含:public ActivityInfo[] activities

它会得到AndroidManifest.xml中中所有

tag.

例如:

android:label="@string/app_name"

android:debuggable="true">

android:name=".HelloJni"

android:label="@string/app_name">

android:name="android.intent.action.MAIN" />

android:name="android.intent.category.LAUNCHER"

/>

ActivityInfo:从 AndroidManifest.xml's

and

tags得到的信息。

可以从这一项中得到和Activity有关的所有信息。这些内容都是从或中得到。

例1:得到Activity各信息:

想要得到Activity信息,需要参数2设置为: PackageManager.GET_ACTIVITIES

PackageInfo PI =

PM.getPackageArchiveInfo("/data/hellojni.apk",

PackageManager.GET_ACTIVITIES);

//PackageInfo中得到的PackageName

Log.w("3DiJoy", "PackageInfo . PackageName:" +

PI.packageName); Log.w("3DiJoy",

String.format("There are [%d] Activity",

PI.activities.length));

Log.w("3DiJoy", String.format("Activity in Porcess Name:

[%s]", PI.activities[0].processName));

//注意:此处第一次看到ProcessName:

//The name of the process this component should run in. From the

"android:process" attribute or, //if not set, the same as

applicationInfo.processName

//即此项从main.xml中得到,为android:process项目内容。如果没有设置,则与applicationInfo.processName相同。(注1)

//Activity

所在的PackageName。应该与上面PockageInfo中得到的PackageName相同。

Log.w("3DiJoy", "Activity in Package PackageName:" +

PI.activities[0].packageName);

//Activity Name:

android:name=".HelloJni"。中读取到的

Log.w("3DiJoy", "Activity Name:" + PI.activities[0].name);

2. 得到APK中Application信息:

Information collected from the

tag, or null if there

was none。

呵呵,如之前所述,其实PackageInfo中所有项目都是从Main.xml中取到的,之前的Activity如此,现在的Application也是如此。

PackageInfo中有一项:

public ApplicationInfo applicationInfo

Log.w("3DiJoy", "Appliction DataDir:" +

PI.applicationInfo.dataDir);

Log.w("3DiJoy", "Application SourceDir:" +

PI.applicationInfo.sourceDir);

//Log.w("3DiJoy", "Application JNI LIbdir:" +

PI.applicationInfo.nativeLibraryDir);

Log.w("3DiJoy", "Application permission:" +

PI.applicationInfo.permission);

Log.w("3DiJoy", "Application in porcessName is :" +

PI.applicationInfo.processName);//(注2)

Log.w("3DiJoy", String.format("minSDK Version: [%d]",

PI.applicationInfo.targetSdkVersion));

Log.w("3DiJoy", "Application Name:" +

PI.applicationInfo.name);

Log.w("3DiJoy", "Application in Package " +

PI.applicationInfo.packageName);

3.得到APK中版本信息:

// tag's "name"

attribute.

Log.w("3DiJoy", "PackageInfo . PackageName:" +

PI.packageName);

Log.w("3DiJoy", "PackageInfo . Version String:" +

PI.versionName);

Log.w("3DiJoy", String.format("Version code:[%d]",

PI.versionCode));

分别从: 

tag's versionCode

attribute和 

tag's versionName attribute.中得到信息。

注1:

ProcessName相关内容:

PI.activities[0].processName .它其实是activityInfo的父类:

android.content.pm.ComponentInfo

的成员变量。是指此activity所运行的Process的名字。

此信息从main.xml的 "android:process"

attribute中得到。如果没有设置,则与applicationInfo.processName相同。

注2:

PI.applicationInfo.processName 此Application将要运行的ProcessName.从Main.xml的"process"

attribute得到。如果没有设置,则应该与PackageName相同。

注3:

PI.applicationInfo.packageName Application所在的PackageName。 但Sam发现:

在Android2.2下。

从Activity中取得ProcessName,为null.(PI.activities[0].processName)

从Application中取得ProcessName也为空。(PI.applicationInfo.processName)

但从Application中取得packageName却是正确的(PI.applicationInfo.packageName,

与PI.packageName相同)

注4:

getPackageArchiveInfo () 的参数1, archive 指的就是APK文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值