Android 静默安装

Android 静默安装apk方法--兼容了5.1, 6.0, 7.1, 10, 11等各安卓版本 系统级app需要实现静默安装apk的功能,且能兼容各安卓系统版本。 阅读详情

Android 静默安装

具有Root权限的安装

设备可以获得root权限
AndroidManifest 权限
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
设置sharedUserId
 <application
 android:sharedUserId="android.uid.system"
 ...
 >
执行adb 安装命令
//安装APK命令
public static final String SHELL_INSTALL = "pm install -r  ";
//启动APK命令 am start -n 包名/.Activity类名, 
//假如SplashActivity所在包路径为在com.xx.xx.ui下则为
public static final String SHELL_START = "am start -n com.xx.xx/.ui.SplashActivity";
  //path为安装包所在绝对路径  安装并启动
  String[] commands = new String[]{SHELL_INSTALL+path,SHELL_START};
  ShellUtils.execCommand(commands,true);

ShellUtils是一个执行adb shell命令的工具类. 链接:Android ShellUtils

此种安装是收不到安装广播的

经过测试,这种不需要系统签名也可以

无Root权限安装(需要系统签名)

AndroidManifest 权限
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
设置sharedUserId
 <application
 android:sharedUserId="android.uid.system"
 ...
 >
系统签名

签名相关文件

platform.x509.pem、platform.pk8 位于Android系统源码/build/target/product/security/目录

SignApk.jar需要编译产出,代码位于Android系统源码/build/tools/signapk/目录下,编译后位于/out/host/linux-x86/framework目录下

把3个文件和未签名APKcopy到同一文件夹,执行命令,输出系统签名后的 out.apk

java -jar signapk.jar platform.x509.pem platform.pk8  unsigned.apk out.apk

参考:Android 系统签名实现的三种方式

使用ProcessBuild 执行pm 安装命令

 /**
     * 静默安装
     *
     * @param apkPath
     * @return
     */
    public static boolean installClientApp(String packageName,String apkPath) {
        Process process = null;

        BufferedReader successResult = null;

        BufferedReader errorResult = null;

        StringBuilder successMsg = new StringBuilder();

        StringBuilder errorMsg = new StringBuilder();

        try {
              //7.0以前版本使用
//            process = new ProcessBuilder("pm", "install", "-r", //apkPath).start();
            //7.0以后版本使用  BuildConfig.APPLICATION_ID
            process = new ProcessBuilder("pm", "install", "-i", packageName, "-r", apkPath).start();
            successResult = new BufferedReader(new InputStreamReader(process.getInputStream()));
            errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream()));
            String s;
            while ((s = successResult.readLine()) != null) {
                successMsg.append(s);
            }
            while ((s = errorResult.readLine()) != null) {
                errorMsg.append(s);
            }
        } catch (Exception e) {

        } finally {
            try {
                if (successResult != null) {
                    successResult.close();
                }
                if (errorResult != null) {
                    errorResult.close();
                }
            } catch (Exception e) {

            }
            if (process != null) {
                process.destroy();
            }
        }

        Log.e("result", "" + errorMsg.toString() + ",successMsg=" + successMsg);
//        Toast.makeText(context,"  "+successMsg , Toast.LENGTH_LONG).show();
        //如果含有“success”单词则认为安装成功
        return successMsg.toString().equalsIgnoreCase("success");
    }

如果想安装后启动,可以设定广播

     //主要就是通过,安装程序之前,启动一个定时任务,任务发送一个广播,广播收到之后,启动程序
     Intent ite = new Intent(this, StartLaunchReceiver.class);
     ite.setAction("install_and_start");
     PendingIntent SENDER = PendingIntent.getBroadcast(this, 0, ite,
     PendingIntent.FLAG_CANCEL_CURRENT);
     AlarmManager ALARM = (AlarmManager) getSystemService(ALARM_SERVICE);
     ALARM.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 15*1000,SENDER);
     //install
     installClientApp(Utils.getContext().getPackageName(),path)

静态声明广播:

    <receiver android:name=".receiver.StartLaunchReceiver">
            <intent-filter>
                <action android:name="install_and_start"/>
            </intent-filter>
    </receiver>

广播类:

public class StartLaunchReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equalsIgnoreCase("install_and_start")) {
            Intent intentStart = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            context.startActivity(intent);
            android.os.Process.killProcess(android.os.Process.myPid());
        }

    }
}

还有2种 反射和AccessibilityService的方法

android静默安装+自动打开只需要看这一篇就够了 随着物联网的兴起,无人值守的android设备越来越多,我目前手里刚好在接相关的售票机器,由于无人值守,网上太多了相关文章了,但是我看了很多总结如下,亲测有效! 前提:root! 非root设备就需要rom厂商的签名了 第一步 增加权限 <uses-permission android:name="android.permission.INSTALL_PACKAGES" /> <uses-permission android:name="android.permission 阅读详情

相关推荐

安卓9.0静默安装的方法

一个应用商城项目需要下载完成后静默安装,8.0上使用的方法如下 private boolean installApk(String filePath) { File file = new File(filePath); if (filePath.length() == 0 || file.length() <= 0 || !file.exists() || !file.isFile()) { return false;

qq_36390114的博客 2674

Android 9 静默安装、卸载App

Android P apk静默安装实现思路和改良

weixin_44939329的博客 2241

Android 后台静默安装

后台静默安装,就无需写代码调用系统的 PackageInstaller 接口,直接使用指令的方式去执行。 与cmd直接执行 adb install 不同,代码中需要使用 pm 这个系统bin文件 private void startUpdate() { Process process = null; BufferedReader successResult = null; BufferedReader errorResult = null;

tq501501的博客 8495

【最全面】Android静默安装的两种方案

如果没有root权限,方案一将无法实现,因此我们通过定制 PackageInstaller 来实现指定包名可以静默安装,并增加Intent参数来指定静默安装还是默认安装。支持通过属性配置需要静默安装的APP包名,只要是属性配置的包名就走静默安装,其它APP走默认安装。APP调用『pm』命令实现静默安装,此方案无须修改Android源码,但需要root权限。一些产品要求APP在升级时能够实现静默安装,而无需弹出安装界面让用户确认。配置全部APP走静默安装。所有APP都走静默安装。配置指定包名走静默安装。

工宗浩生财指南针 1万+

Android构建系统级应用静默授权,静默安装

实现默认获取所需全部权限,不再弹窗询问授权。 实现静默升级安装新版本。 通过追踪源码的方式,理解如何构建系统应用实现静默安装。

lizebin_bin的博客 3530

Android是否可以实现静默安装模式

(1)在网上搜寻该问题的解决方法,且查阅android开发文档,没有发现可以实现该功能的显示API调用,网络上很多人请教同样的问题,但都没有能够实现解答;说是android为了用户的安全,已屏蔽该实现该方法的功能,第三方法应用是无法实现静默安装的。 (2)然后自己试图去看看android实现普通安装程序的源码文件,能否找到解决的办法,打算绕过普通安装时的提示框,直接调用通过确认后调用的函数进行安装;在查看android应用程序的普通安装过程后,发现应用程序安装过程的方法调用过程为:首先进入到com/andr

codenon的专栏 2万+

Android App静默安装的解决方案,华为架构师深入讲解Android开发

Log.e(SilentInstall.class.getSimpleName(), “要安装的apk路径:” + apkPath);// 读取命令的执行结果= null) {// 如果执行结果中包含Failure字样就认为是安装失败,否则就认为安装成功if (!ToastUtil.showLongToast(KursaalApp.context,“设备未Root,请先Root后再继续使用!”);

2401_83974173的博客 1249

Android无需root实现apk的静默安装

Android的静默安装似乎是一个很有趣很诱人的东西,但是,用普通做法,如果手机没有root权限的话,似乎很难实现静默安装,因为Android并不提供显示的Intent调用,一般是通过以下方式安装apk: Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(file), application/vnd.android.package-archive); startActivity(intent); 但是,这并没有真正的实现静默安装,因为有用户界面,会让用户知道。那么,怎么

Android真正的静默安装

原文出处:http://write.blog.youkuaiyun.com/mdeditor#!postId=50609068关于Android应用程序的静默安装,很早以前我就做过一些了解,网上大多数给出的方案都是有严苛的要求:比如要获取root权限、或者是针对特殊的rom,甚至要自己刷机,这些方法即使能够达到目的但是看起来也不那么诱人,对于黑客技术而言几乎毫无用处。最近无意中看到了潭州教育的一个视频课程讲到静

MC 的技术空间 8438

别再只会用Kriging了!用Python+GeoPandas手把手实现IDW插值(附完整代码与可视化)

本文详细介绍了如何使用Python和GeoPandas实现反距离加权插值(IDW),包括核心算法、参数调优和可视化技巧。通过完整代码示例,帮助读者掌握这一空间数据分析技术,适用于环境监测、气象预报等多个领域,提升数据处理效率和灵活性。

weixin_30872157的博客 225

模型量化必知:Per-Tensor和Per-Channel到底怎么选?

本文深入解析了模型量化中Per-Tensor与Per-Channel两种核心策略的抉择。Per-Tensor量化实现简单、硬件兼容性极佳,适合激活值或分布均匀的权重;而Per-Channel量化精度更高,能更好地处理权重分布不均的卷积层,是现代CNN权重量化的主流。文章提供了从硬件平台、数值分布到精度需求的实战决策框架,并推荐了“权重Per-Channel,激活Per-Tensor”的混合量化最佳实践。

assembly8low的博客 983

安卓静默安装以及安装后启动

需求:        静默升级--&gt;安装--&gt;启动先谈谈静默安装:        静默安装需要的条件:            1.ROOT权限            2.系统应用        随便一种就行下面我针对两个种条件分为两种静默安装方式(不喜勿喷):        有ROOT权限的:                    思路:    1.通过Runtime.getRunti...

Evil的博客 1974

恶劣天气下的分割鲁棒性:雨雪雾干扰消除

恶劣天气下的分割鲁棒性:雨雪雾干扰消除​ ,人工智能,计算机视觉,大模型,AI,本文围绕恶劣天气下语义分割鲁棒性及雨雪雾干扰消除展开,分析了雨雪雾对图像和分割任务的影响,介绍了基于图像增强、深度学习等现有解决方法,以及针对不同干扰的具体方案,还探讨了提高分割鲁棒性的策略、实验评估情况,指出当前面临复杂天气、数据缺乏、实时性等挑战,并展望了端到端模型、无监督学习等未来发展趋势,为该领域研究提供了全面参考。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 17万+

静默安装安卓

Android静默安装的方法,静默安装就是绕过安装程序时的提示窗口,直接在后台安装。} else if (value == 1) { // 失败。注意:静默安装的前提是设备有ROOT权限。} else { // 未知情况。

m0_71272694的博客 1276

智能手表竞品分析与市场调研报告

本报告旨在通过调研当前主流智能手表产品的功能特点、市场表现、用户反馈、定价策略等方面,辅助我司即将立项的Aurora Watch S1产品在功能定义、目标用户、定价区间、差异化竞争等方面做出科学决策。 调研范围包括国内外中端价位主流品牌(¥199~¥999),重点关注小米、华为、荣耀、Amazfit、Redmi、Haylou 等品牌的热销型号。

hoony123的博客 7万+

电子电器架构刷写方案——General Flash Bootloader

### 文章大体有如下内容: ### 1、简介 ### 2、刷写系统概述 ### 3、Flash Bootloader刷写流程 ### 4、Flash Bootloader架构介绍 ### 5、关于刷写的思考

Soly_kun的博客 2210

Android 静默安装和智能安装的实现方法

1 简介最近研究了Android的静默安装和智能安装,于是写博客记录一下。 静默安装就是无声无息的在后台安装apk,没有任何界面提示。 智能安装就是有安装界面,但全部是自动的,不需要用户去点击。 首先强调两点: 静默安装必须要root权限 智能安装必须要用户手动开启无障碍服务 2 原理 静默安装、卸载的原理就是利用pm install命令来安装apk,pm uninstall 来卸载apk.

梧桐那时雨 2万+

ADAMS软件二次开发:ADAMS软件API接口详解

API(Application Programming Interface,应用程序编程接口)是一种允许不同软件应用程序之间进行交互的接口。在ADAMS软件中,API提供了与软件内部功能直接交互的能力,使用户能够通过编写自定义代码来扩展软件的功能,实现自动化操作或集成到其他系统中。ADAMS软件的API主要基于C++和Python,允许用户通过这些编程语言来访问和控制ADAMS的模型、仿真和分析功能。API接口的使用,需要对编程语言有一定的了解,同时也需要熟悉ADAMS软件的基本操作和模型结构。

kkchenjj的博客 1863

Android静默安装

最近做了一个Android项目,要求软件能够自动下载指定的APK文件并自动安装,无须用户操作,即静默安装。在查阅了GOOGLE之后,综合了各位方法之后,找到了一种相对简化的方法,不过此方法只在4.0的Android版本下测试过,其它版本各位可以照此方法尝试一下。   想要做到静默安装,其实就是要有权限执行pm install命令。准备工作其实就两步: 1、获取执行权限 2、

duanyu218的专栏 1915

会话管理技巧——如何优化OpenClaw的上下文理解能力(2026进阶版)

本文深入探讨了OpenClaw系统的会话管理技术,重点介绍了会话定义、生命周期管理和上下文优化策略。会话管理包含会话ID、用户信息、状态等核心要素,以及创建、维护、终止和恢复四个生命周期阶段。上下文管理通过ContextManager类实现,支持创建、更新、消息添加和变量管理等功能,并采用历史记录机制确保会话连续性。ContextOptimizer类则负责应用优化规则,通过消息和变量压缩等技术提升系统性能。这些技术共同构建了OpenClaw强大的会话管理能力,为AI助手提供了高质量的交互体验基础。

博客 491

以 Joule 驱动的生成式开发:把需求文档直接变成可运行的 SAP 应用

摘要:SAP BTP的AI助手Joule正在改变开发方式,支持从自然语言描述自动生成数据模型、服务、UI及测试代码。在SAP Business Application Studio中,Joule能根据业务需求生成结构化代码,并提供代码补全、重构、解释等功能。开发者需注意避免上传敏感数据,并对AI生成的代码进行人工审核。Joule特别针对ABAP开发进行了优化,提供符合SAP规范的代码建议,帮助迁移遗留系统。此外,它还能快速生成CAP项目原型,但所有AI生成内容都需经过严格测试验证。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 342

安卓静默安装方法

在Android 6.0到Android 9.0操作系统中,谷歌已经提供了原生API方法来进行应用的静默安装,称为“Package Installer Session”。但是需要注意的是,这方法需要设备在所有者的设备上儿且有系统权限,例如:系统应用。因此,除非你的App有这样的权限,否则不能被直接在用户的设备上用这种方法进行静默安装。前提:不管是方案一和方案二1,需要在清单文件添加 入权限2,在清单文件application标签下添加如下。

qq_41733851的博客 2233

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

安卓Apk下载以及静默安装

安卓静默安装

m0_46366678的博客 1304

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Android Apk静默安装的方法

最近在开发系统应用,需要在8.0设备上实现静默安装和静默卸载功能,百度了无数次,最后看到一篇文章实现了功能 参考链接 https://blog.youkuaiyun.com/qhs1573/article/details/81030567 直接上代码 /** * app安装和卸载类 * 静默安装所需权限 * <uses-permission android:name="andr...

u010921138的博客 3434

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: Flutter Android 签名打包
下一篇: Navigation的使用
K_Hello
博客等级 码龄12年 33粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值