import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.ArrayList;
import eric.test.R;
import android.app.Activity;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Environment;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class main extends Activity {
private ImageView img;
private String archiveFilePath =Environment.getExternalStorageDirectory() + "/"+ "lindong/生活百事通之营养.apk";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
img = (ImageView)findViewById(R.id.img);
Drawable icon = getUninstallAPKIcon(this, archiveFilePath);
img.setBackgroundDrawable(icon);
}
public static Resources getResources(Context context , String apkPath) throws Exception {
String PATH_AssetManager = "android.content.res.AssetManager";
Class assetMagCls = Class.forName(PATH_AssetManager);
Constructor assetMagCt = assetMagCls.getConstructor((Class[]) null);
Object assetMag = assetMagCt.newInstance((Object[]) null);
Class[] typeArgs = new Class[1];
typeArgs[0] = String.class;
Method assetMag_addAssetPathMtd = assetMagCls.getDeclaredMethod("addAssetPath",
typeArgs);
Object[] valueArgs = new Object[1];
valueArgs[0] = apkPath;
assetMag_addAssetPathMtd.invoke(assetMag, valueArgs);
Resources res = context.getResources();
typeArgs = new Class[3];
typeArgs[0] = assetMag.getClass();
typeArgs[1] = res.getDisplayMetrics().getClass();
typeArgs[2] = res.getConfiguration().getClass();
Constructor resCt = Resources.class.getConstructor(typeArgs);
valueArgs = new Object[3];
valueArgs[0] = assetMag;
valueArgs[1] = res.getDisplayMetrics();
valueArgs[2] = res.getConfiguration();
res = (Resources) resCt.newInstance(valueArgs);
return res;
}
public static Drawable getUninstallAPKIcon(Context context,String apkPath) {
PackageManager pm = context.getPackageManager();
PackageInfo info = pm.getPackageArchiveInfo(apkPath, PackageManager.GET_ACTIVITIES);
Resources res = null;
try {
res = getResources(context,apkPath);
} catch (Exception e) {
return null;
}
if(info != null){
ApplicationInfo appInfo = info.applicationInfo;
return res.getDrawable(appInfo.icon);
}
return null;
}
}
其实关键还是获取可以获取apk内容的Resource对象
转自:http://blog.csdn.net/sky181772733/article/details/7220401
分享到:
相关推荐
总结一下,Java解析APK文件涉及理解APK的ZIP结构、XML解析以及可能的外部工具调用。对于开发人员来说,掌握这些技能有助于在不安装Android Studio或SDK的环境中分析和处理APK文件。如果你正在处理的项目名为`ApkUtil...
首先,APK文件图标在Windows中不能直接识别,因为Windows系统默认并不包含处理这种文件类型的解析器。"apkshellext"可能是用来扩展Windows Shell功能的组件,它允许系统识别并显示APK文件的图标。安装这个组件后,...
本篇文章将深入探讨如何使用Java解析APK文件,提取其中的关键信息,包括版本号码、版本名称、包名、权限、最低支持的Android平台版本、SDK版本以及应用程序的相关元数据。 首先,我们需要了解APK文件的结构。APK是...
2. **图标提取**:工具内部可能包含了一个图标解析器,能够读取APK文件内的资源文件(res目录),特别是.mipmap或.drawable目录下的图标,找到适合显示的主应用图标。 3. **注册表修改**:在Windows系统中,文件...
由于APK文件默认在Windows操作系统下以无图标的文本文件形式展示,这使得辨识变得困难。不过,通过一些方法和工具,我们可以让PC电脑端显示安卓APK的图标,从而更轻松地识别这些文件。以下是一些关键知识点和步骤: ...
有时,我们可能需要独立于Android SDK来解析APK文件,获取其中的图标(icon)信息,以便进行自动化测试、分析或设计工作。本文将详细介绍如何使用纯Java来实现这一目标,并解释如何在Linux和Windows操作系统上实现...
本文将深入探讨如何利用PHP解析APK包,获取其中包含的各种元数据,如应用名称、版本信息、图标名以及包名等关键信息。 首先,我们需要了解APK文件的本质。APK是Android系统中应用的安装包格式,它实际上是一个ZIP...
虽然源代码已删除,但我们可以从项目名推断,它提供了一个基础的框架,用于读取和解析APK文件的某些部分。如果需要进一步的解析功能,如反编译DEX或处理IPA文件,可能需要结合其他开源项目或自行实现。 总结,使用...
3. **分析资源文件**:资源文件夹 (res) 包含了应用的图标、布局、字符串等资源,通过解析这些文件可以了解应用的界面设计和文本信息。 4. **查看.dex 文件**:包含应用的 Dalvik 字节码,可以转换为 Java 代码以...
在Java中解析APK文件: 1. **读取APK图标**:APK的图标通常位于res/drawable目录下,文件名为“ic_launcher.png”或“app_icon.png”。可以使用Java的ZipInputStream和ZipEntry类来遍历ZIP文件内容,找到对应的图片...
当我们遇到Java解析APK时桌面图标问题提示的问题,这通常涉及到APK的资源解析和AndroidManifest.xml的处理。 首先,我们要理解APK的结构。一个APK文件本质上是一个ZIP格式的压缩包,其中包含以下关键文件: 1. ...
本主题将深入探讨如何使用Java语言解析APK文件的签名和图标信息,这对于理解APK结构、验证应用安全性和自定义APK处理流程至关重要。 首先,我们需要了解APK的结构。一个APK文件本质上是一个压缩的ZIP文件,包含以下...
解析apk/ipa图标/名称/包名/版本号等信息,图标百分百解析出来,如果大家不需要解析图标,请移步到这篇博客:http://blog.csdn.net/moyanxuan_1993_2_24/article/details/51330060
Java作为一种广泛使用的编程语言,同样可以用于解析APK文件,以便进行逆向工程、分析或自动化处理。在Java中解析APK文件,通常需要依赖特定的库或工具,如“Java解析apk所需jar包”所提及的。 这个jar包很可能是...
在这个案例中,ApkShellExt读取APK文件内的资源信息,特别是应用的图标资源,然后将其显示在文件图标上。 **安全性和兼容性**: 在安装任何外部工具时,确保其来源可靠,避免潜在的安全风险。ApkShellExt应该只修改...
`apk-parser-1.0.2.jar`是一个Java库,用于解析APK文件。这个库可能提供了API接口,允许开发者通过编程方式来读取APK的各种元数据。例如,可以使用这个库获取到APK的版本号,这是通过解析AndroidManifest.xml中的`...
了解并解析APK的包名、版本等基础信息对于开发者来说至关重要,这有助于调试、版本控制以及市场合规性检查。本文将深入探讨如何解析这些信息,并介绍一个名为"APKhelper"的工具,它能够帮助我们轻松获取这些数据并...
python aapt 分析APK文件,获取应用包名,版本号,版本名 代码直接复制即可,亲测多次可用,
要解析APK文件,通常需要用到各种工具或编程语言,例如Java、Python或专门的APK分析工具如Apktool、dex2jar和JD-GUI等。 1. **Apktool**:这是一个开源工具,用于反编译APK文件,可以解码资源.arsc文件(包含了应用...