Android 下得到 未安装APK包含信息 等
很多情况下,我们需要通过APK文件来得到它的一些信息。 (此时此APK不一定被安装了)
0. 基础知识:
可以通过android.content.Context的方法 getPackageManager()得到一个PackageManager实例。
PackageManager有一个方法:
PackageInfo getPackageArchiveInfo (String archiveFilePath, int flags);
其中参数一:archiveFilePath。就是指一个APK文件绝对路径。
请注意它的返回值。是个PackageInfo。它包含Pakcage所有信息,可以认为,这些信息都是从AndroidManifest.xml中收集而来。
1. 得到APK中Activity信息:
PackageInfo中包含:public ActivityInfo[] activities
它会得到AndroidManifest.xml中<application>中所有<Activity> tag.
例如:
ActivityInfo:从 AndroidManifest.xml's <activity> and <receiver> tags得到的信息。
可以从这一项中得到和Activity有关的所有信息。这些内容都是从<activity>或<receiver>中得到。
例1:得到Activity各信息:
想要得到Activity信息,需要参数2设置为: PackageManager.GET_ACTIVITIES
//注意:此处第一次看到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 Name:" + PI.activities[0].name);
2. 得到APK中Application信息:
Information collected from the <application> tag, or null if there was none。
呵呵,如之前所述,其实PackageInfo中所有项目都是从Main.xml中取到的,之前的Activity如此,现在的Application也是如此。
PackageInfo中有一项:
public ApplicationInfo applicationInfo
3.得到APK中版本信息:
Log.w("3DiJoy", "PackageInfo . PackageName:" + PI.packageName);
分别从: <manifest> tag's versionCode attribute和 <manifest> tag's versionName attribute.中得到信息。
注1:
ProcessName相关内容:
PI.activities[0].processName .它其实是activityInfo的父类: android.content.pm.ComponentInfo
此信息从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中取得packageName却是正确的(PI.applicationInfo.packageName, 与PI.packageName相同)
getPackageArchiveInfo () 的参数1, archive 指的就是APK文件。
1)获取apk文件的图标
- public static Drawable getApkFileIcon(String apkPath, Context context) {
- PackageManager pm = context.getPackageManager();
- PackageInfo info = pm.getPackageArchiveInfo(apkPath,
- PackageManager.GET_ACTIVITIES);
- if (info != null) {
- ApplicationInfo appInfo = info.applicationInfo;
- if (appInfo != null) {
- try {
- appInfo.publicSourceDir = apkPath;
- return pm.getApplicationIcon(appInfo);
- } catch (OutOfMemoryError e) {
- }
- }
- }
- return null;
- }
2)获取AndroidManifest.xml中<meta-data>标签中定义的值
- PackageManager manager = this.getPackageManager();
- try {
- // 设置PackageManager.GET_META_DATA标识位是必须的
- PackageInfo info = manager.getPackageInfo(this.getPackageName(),
- PackageManager.GET_CONFIGURATIONS | PackageManager.GET_META_DATA);
- Object myChannel = info.applicationInfo.metaData.get("meta-data-key");
- if ((myChannel != null) && (myChannel instanceof Integer)) {
- // do something
- }
- } catch (NameNotFoundException e) {
- e.printStackTrace();
- }
Android 下得到 未安装APK包含信息 等的更多相关文章
- android获取未安装APK签名信息及MD5指纹
站在巨人的肩膀上写博客: http://blog.csdn.net/wulianghuan/article/details/18400581 http://www.jb51.net/article/7 ...
- Android 8.0+ 更新安装apk失败的问题
最近做项目发现Android 8.0+ 更新安装apk时 出现安装失败的情况 总结原因是 缺少安装的权限 Android 8.0 (Android O)为了针对一些流氓软件引导用户安装其他无关应用. ...
- Android应用开发提高系列(4)——Android动态加载(上)——加载未安装APK中的类
前言 近期做换肤功能,由于换肤程度较高,受限于平台本身,实现起来较复杂,暂时搁置了该功能,但也积累了一些经验,将分两篇文章来写这部分的内容,欢迎交流! 关键字:Android动态加载 声明 欢迎转载, ...
- 加载未安装APK中的类
一.前提 目的:动态加载SD卡中Apk的类. 注意:被加载的APK是未安装的. 相关:本文是本博另外一篇文章:Android动态加载jar/dex的升级版. 截图: 成功截图: 二.准备 准备被调用A ...
- 我的Android进阶之旅------>解决Android Studio编译后安装apk报错:The APK file does not exist on disk
1.错误描述 今天用Android Studio编译应用后安装APK的时候,报错了,错误如下所示: The APK file build\outputs\apk\OYP_2.3.4_I2Base_64 ...
- Android 在代码中安装 APK 文件
废话不说,上代码 private void install(String filePath) { Log.i(TAG, "开始执行安装: " + filePath); File a ...
- 安卓(Android)手机如何安装APK?
我大天朝的安卓手机只能在一个被阉割的APP市场里玩耍,有些APP可能需要直接安装APK文件.APK 是 Android Package (安卓安装包)安卓手机如何安装APK呢? 在电脑上下载安装APK ...
- Android手机提示“未安装应用程序”
用eclipse调试应用时,遇到了这个问题,网上给出的解决方案倒是挺多,但似乎一个都没奏效,而且我手机也重启了,还是有问题,郁闷ing- 然后看到一篇文章指出,可能不是签名和SD的卡问题,而是我们 ...
- Android笔记(预安装APK)
一般一个安卓的产品在出厂时,会预安装许多APK,关于这些APP,主要分为下面这几类 1.系统级别APK 这一类应用一般是:电话/设置或者厂家自己特定的应用. 2.系统预安装APK 因为商业原因,产品出 ...
随机推荐
- MySQL密码破解。
与其说是mysql密码破解倒不如说是mysql密码重置更准确,因为大多数情况下我们只是忘了登录的密码,如果是普通用户还可以让管理员重新设置一下密码或者重新分配一个用户,但是这里我们不考虑普通用户,如果 ...
- VB postmessage发送后台Tab
键盘是我们使用计算机的一个很重要的输入设备了,即使在鼠标大行其道的今天,很多程序依然离不开键盘来操作.但是有时候,一些重复性的,很繁琐的键盘操作总会让人疲惫,于是就有了用程序来代替人们按键的方法,这样 ...
- mysql读写分离配置,利用mybatis实现,解释为什么dynamicDataSource不行
之前发布了mysql主从配置的博客,配置完成之后,那么我们肯定要拿主从来做点什么. 我第一想到的就是mysql的读写分离,让读写分离之后可以大大的提供mysql的性能,比单纯用mysql主从做备份好很 ...
- Linq第三讲
LINQ 1.查询操作符 (1)源起 .net的设计者在IEnumerable<T>等接口基础之上定义了一系列的扩展方法来方便用户操作集合对象,这些扩展方法构成了LINQ的查询操作符 (2 ...
- android网络编程之HttpUrlConnection的讲解--GET请求
1.服务器后台使用Servlet开发,这里不再介绍. 2.测试机通过局域网链接到服务器上,可以参考我的博客:http://www.cnblogs.com/begin1949/p/4905192.htm ...
- PHP:preg_replace
关于preg_match: http://www.cnblogs.com/helww/p/3466720.html 关于preg_match_all:暂时没有完整的 preg_replace_call ...
- JavaScript焦点事件、鼠标事件和滚轮事件使用详解
网址:http://www.jb51.net/article/78094.htm
- h3c dhcp snooping
1. 组网需求Switch B通过以太网端口Ethernet1/1连接到DHCP服务器,通过以太网端口Ethernet1/2.Ethernet1/3连接到DHCP客户端.要求:l与DHCP服务器相连的 ...
- maven source
accepted To download sources for your dependencies: mvn eclipse:eclipse -DdownloadSources=true To at ...
- androidstudio 问题
Error:(1, 1) A problem occurred evaluating project ':app'. > Failed to apply plugin [id 'com.andr ...