上代码:
package com.forelid.ispa.support.utils; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ApplicationInfo; import android.content.pm.PackageParser; import android.net.Uri; import android.util.Log; import android.util.DisplayMetrics; import android.content.pm.IPackageInstallObserver; import android.content.pm.IPackageDeleteObserver; import android.os.FileUtils; import android.os.Handler; import android.os.Message; public class PackageInstaller { private File mTmpFile; private final int INSTALL_COMPLETE = 1; final static int SUCCEEDED = 1; final static int FAILED = 0; private final static String TAG = "PackInstaller"; private Context mContext; private ApplicationInfo mAppInfo; public PackageInstaller(Context context) { mContext = context; } public void install(String path, String packageName) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(new File(path)), "application/vnd.android.package-archive"); mContext.startActivity(intent); } public void instatllBatch(String path) { Log.i(TAG, "path=" + path); int installFlags = 0; Uri mPackageURI = Uri.fromFile(new File(path)); PackageParser.Package mPkgInfo = getPackageInfo(mPackageURI); mAppInfo = mPkgInfo.applicationInfo; String packageName = mAppInfo.packageName; Log.i(TAG, "====install packageName =" + packageName); PackageManager pm = mContext.getPackageManager(); try { PackageInfo pi = pm.getPackageInfo(packageName, PackageManager.GET_UNINSTALLED_PACKAGES); if (pi != null) { installFlags |= PackageManager.INSTALL_REPLACE_EXISTING; } } catch (NameNotFoundException e) { } if ((installFlags & PackageManager.INSTALL_REPLACE_EXISTING) != 0) { Log.w(TAG, "Replacing package:" + packageName); } PackageInstallObserver observer = new PackageInstallObserver(); pm.installPackage(mPackageURI, observer, installFlags, packageName); } private class PackageInstallObserver extends IPackageInstallObserver.Stub { public void packageInstalled(String packageName, int returnCode) { // Message msg = mHandler.obtainMessage(INSTALL_COMPLETE); // msg.arg1 = returnCode; // mHandler.sendMessage(msg); Log.i(TAG, "====INSTALL_COMPLETE"); } } private class PackageDeleteObserver extends IPackageDeleteObserver.Stub { public void packageDeleted(boolean succeeded) { // Message msg = mHandler.obtainMessage(UNINSTALL_COMPLETE); // msg.arg1 = succeeded?SUCCEEDED:FAILED; // mHandler.sendMessage(msg); Log.i(TAG, "====UNINSTALL_COMPLETE"); } } public void uninstall(String packageName) { Uri packageURI = Uri.parse("package:" + packageName); Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI); mContext.startActivity(uninstallIntent); } public void uninstallBatch(String packageName) { PackageDeleteObserver observer = new PackageDeleteObserver(); mContext.getPackageManager().deletePackage(packageName, observer, 0); } /* * Utility method to get package information for a given packageURI */ public PackageParser.Package getPackageInfo(Uri packageURI) { final String archiveFilePath = packageURI.getPath(); PackageParser packageParser = new PackageParser(archiveFilePath); File sourceFile = new File(archiveFilePath); DisplayMetrics metrics = new DisplayMetrics(); metrics.setToDefaults(); PackageParser.Package pkg = packageParser.parsePackage(sourceFile, archiveFilePath, metrics, 0); // Nuke the parser reference. packageParser = null; return pkg; } /* * Utility method to get application information for a given packageURI */ public ApplicationInfo getApplicationInfo(Uri packageURI) { final String archiveFilePath = packageURI.getPath(); PackageParser packageParser = new PackageParser(archiveFilePath); File sourceFile = new File(archiveFilePath); DisplayMetrics metrics = new DisplayMetrics(); metrics.setToDefaults(); PackageParser.Package pkg = packageParser.parsePackage(sourceFile, archiveFilePath, metrics, 0); if (pkg == null) { return null; } return pkg.applicationInfo; } private Handler mHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case INSTALL_COMPLETE: if (msg.arg1 == SUCCEEDED) { } else { } break; default: break; } } }; }
相关推荐
使用Android5.0的环境编译的,不同版本之间,aidl文件可能会有差异,具体还需参照Android...详细参考我的博客文章《Android 无需root实现APK静默安装》:http://blog.csdn.net/yyh352091626/article/details/50533137
不仅可以安装新的apk,也适用于更新旧的apk。更新apk必须保证新旧apk签名一致。本次分享的源码就是一套关于apk静默安装的源码,可以实现apk的静默安装或更新。压缩包里有两种实现apk静默安装的方法说明和详细的操作...
Android的静默安装似乎是一个很有趣很诱人的东西,但是,用普通做法,如果手机没有root权限的话,似乎很难实现静默安装,因为Android并不提供显示的Intent调用,一般是通过以下方式安装apk: Intent intent = new ...
在Android系统中,APK自动静默安装并自动重新启动是一项技术操作,通常涉及到系统级权限和特定的脚本编写。这项技术常用于批量设备管理、应用自动化测试或企业内部应用部署等场景。以下是关于这个主题的详细知识讲解...
本资料"Android应用源码APK实现静默安装整套资料.zip"提供了一种实现静默安装的方法,包括源码参考和相关指导。下面我们将详细探讨如何在Android系统中实现APK的静默安装。 首先,我们需要了解在Android系统中安装...
在Android系统中,静默安装APK(Silent Install)是指在用户无感知的情况下自动安装应用程序。这通常需要系统的特殊权限,因为出于安全考虑,Android系统默认不允许非系统应用进行后台安装。在Android 10中,由于...
总结起来,"apk静默安装apk"是一种通过编程方式在Android设备上自动化安装APK的方法,主要应用于批量部署和测试环境。该过程涉及到读取`assets`目录中的APK,创建并使用`ParcelFileDescriptor`,以及调用`Package...
在Android系统中,APK...以上就是关于"Android apk后台静默安装"的相关知识点,包括其原理、适用版本、实现步骤以及需要注意的安全问题。在实际操作时,务必确保符合Android系统的安全策略和用户隐私保护规定。
在Android系统中,静默安装(Silent Installation)是指在用户无感知的情况下,通过编程方式自动安装应用程序。这种操作通常需要设备具有root权限,因为正常的Android安全机制限制了非系统应用的静默安装。Root权限...
以下是实现Android APK静默安装的方法: 首先,要进行静默安装,你需要拥有设备的管理员权限。这是因为从Android 4.4(KitKat)版本开始,系统对应用程序的安装进行了限制,非系统应用无法在后台静默安装其他应用,...
在Android系统中,静默安装(Silent Install)是指在用户无感知的情况下自动安装APK应用的过程。在Android 4.4(KitKat)版本中,这个功能主要应用于企业级设备管理和批量部署应用的场景。下面我们将详细探讨如何在...
1. 由于权限限制,普通应用在Android 10及更高版本上进行静默安装可能需要用户手动授权,或者通过系统级别的服务来实现。 2. 在进行静默操作时,必须确保有正确的权限,并且处理好可能出现的异常,例如权限被拒绝、...
在Android 7.0(Nougat)版本中,虽然默认对非root用户的静默安装进行了限制,但仍然有一些方法可以实现这一目标。本文将详细介绍在具有system权限的非root环境下,实现静默安装和静默卸载的多种方式。 1. ADB...
在Android系统中,静默安装和卸载APK是指在用户无感知的情况下,通过编程方式自动执行安装或卸载应用程序的过程。这种方式常用于系统维护、自动化测试或者在企业级设备管理中,以便批量处理应用程序的部署。在本教程...
总结来说,静默安装APK在Android中可以通过Adb命令行或自定义服务实现,其中Adb方法适用于快速测试,而自定义服务更适合集成到自动化流程中。不过,无论哪种方法,都需要注意安全性和权限问题,因为静默安装可能会被...
支持android5.1静默安装、卸载代码,封装在PackageInstaller模块内,在执行时可能需要修改部分framework代码使功能正常使用。
静默安装APK适用于自动化部署、批量更新应用等场景。本教程将详细介绍如何实现Android定时静默安装APK,并在安装完成后自动启动。 一、获取root权限 在Android设备上进行静默安装前,首先要确保设备已获得root权限...
APK静默安装是Android系统中一种特殊的应用程序安装方式,它无需用户交互,通过后台命令或脚本即可完成安装过程。这种方式常用于系统更新、自动化测试或者企业级应用部署等场景,尤其对于批量安装大量应用程序时能...