热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android系统实现静默安装源码

Android系统实现静默安装Android实现静默安装需要用到一些隐藏的api接口,第三方apk无法直接调用其接口。所以实现这个功能需要编写到然后去系统中编译生成

Android系统 实现静默安装

Android实现静默安装需要用到一些隐藏的api接口,第三方apk无法直接调用其接口。所以实现这个功能需要编写到然后去系统中编译生成apk。这里记录下自己实现的静默安装功能的代码。

主要代码:public class InstallPackageActivity extends AppCompatActivity {private String APK_NAME = "TencentVideo.apk";private String mAutoStartPackageName;private int INSTALL_COMPLETE = 1;private Button click;private Context mContext = InstallPackageActivity.this;private Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);if (msg.what == 1) {if (msg.arg1 == 1) {Toast.makeText(getApplicationContext(), "安装成功", Toast.LENGTH_SHORT).show();Log.i("liu", "Installation success!");changeButtonState(true);} else {Toast.makeText(getApplicationContext(), "安装失败", Toast.LENGTH_SHORT).show();Log.i("liu", "Installation failure!");click.setEnabled(true);click.setText(mContext.getResources().getString(R.string.button_silent_install_app_fail));}}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_install_package);click = (Button) this.findViewById(R.id.click);click.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {installApp();changeButtonState(false);}});}private void installApp() {String fileName = Environment.getExternalStorageDirectory() + "/" + APK_NAME;if (!new File(fileName).exists()) {Log.e("liu", "file name is not exists!");return;}String packageName;int installFlags = 0;Uri uri = Uri.fromFile(new File(fileName));PackageManager pm = getPackageManager();PackageInfo info = pm.getPackageArchiveInfo(fileName, PackageManager.GET_ACTIVITIES);if (info != null) {packageName = info.applicationInfo.packageName;Log.i("liu", "packageName -> " + packageName);try {PackageInfo packageInfo = pm.getPackageInfo(packageName, PackageManager.GET_UNINSTALLED_PACKAGES);Log.i("liu", "packageInfo -> " + packageInfo);if (packageInfo != null) {installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;}} catch (PackageManager.NameNotFoundException e) {e.printStackTrace();}mAutoStartPackageName = packageName;PackageInstallObserver observer = new PackageInstallObserver();pm.installPackage(uri, observer, installFlags, mAutoStartPackageName);}}private void changeButtonState(boolean isEnable) {click.setEnabled(isEnable);if (isEnable) {click.setText(mContext.getResources().getString(R.string.button_silent_install_app_complete));} else {click.setText(mContext.getResources().getString(R.string.button_silent_installing_app));}}class PackageInstallObserver extends IPackageInstallObserver.Stub {public void packageInstalled(String packageName, int returnCode) {Log.i("liu", "send message to main thread!");Message msg = mHandler.obtainMessage(INSTALL_COMPLETE);msg.arg1 = returnCode;mHandler.sendMessage(msg);}}
}


上面的代码看情况复制进去即可使用,主要的安装在installApp()方法中,安装完成之后会调用packageInstalled方法,returnCode返回1表示安装成功。




添加权限

需要添加如下权限





编写Android.mk文件

上面的代码编写完成之后,在系统中编译还需要编写Android.mk文件。
源码下载地址:https://download.csdn.net/download/qq_33088619/10996981




最终的代码结构如图

在这里插入图片描述
把当前整个工程放到源码的package/app目录下,然后cd android/package/app/SlientInstall目录,然后mm即可编译成apk,目前我只在6.0,7.1,8.1的系统上尝试过。


推荐阅读
  • 本文探讨了Android系统中支持的图像格式及其在不同版本中的兼容性问题,重点涵盖了存储、HTTP传输、相机功能以及SparseArray的应用。文章详细分析了从Android 10 (API 29) 到Android 11 的存储规范变化,并讨论了这些变化对图像处理的影响。此外,还介绍了如何通过系统升级和代码优化来解决版本兼容性问题,以确保应用程序在不同Android版本中稳定运行。 ... [详细]
  • 掌握Android UI设计:利用ZoomControls实现图片缩放功能
    本文介绍了如何在Android应用中通过使用ZoomControls组件来实现图片的缩放功能。ZoomControls提供了一种简单且直观的方式,让用户可以通过点击放大和缩小按钮来调整图片的显示大小。文章详细讲解了ZoomControls的基本用法、布局设置以及与ImageView的结合使用方法,适合初学者快速掌握Android UI设计中的这一重要功能。 ... [详细]
  • 技术分享:深入解析GestureDetector手势识别机制
    技术分享:深入解析GestureDetector手势识别机制 ... [详细]
  • Android 图像色彩处理技术详解
    本文详细探讨了 Android 平台上的图像色彩处理技术,重点介绍了如何通过模仿美图秀秀的交互方式,利用 SeekBar 实现对图片颜色的精细调整。文章展示了具体的布局设计和代码实现,帮助开发者更好地理解和应用图像处理技术。 ... [详细]
  • 深入解析 Android Drawable:第六阶段进阶指南 ... [详细]
  • 如何在Android应用中设计和实现专业的启动欢迎界面(Splash Screen)
    在Android应用开发中,设计与实现一个专业的启动欢迎界面(Splash Screen)至关重要。尽管Android设计指南对使用Splash Screen的态度存在争议,但一个精心设计的启动界面不仅能提升用户体验,还能增强品牌识别度。本文将探讨如何在遵循最佳实践的同时,通过技术手段实现既美观又高效的启动欢迎界面,包括加载动画、过渡效果以及性能优化等方面。 ... [详细]
  • APKAnalyzer(1):命令行操作体验与功能解析
    在对apkChecker进行深入研究后,自然而然地关注到了Android Studio中的APK分析功能。将APK文件导入IDE中,系统会自动解析并展示其中各类文件的详细信息。官方文档提供了详细的命令行工具使用指南,帮助开发者快速上手。本文以一个RecyclerView的Adapter代理开源库为例,探讨了如何利用这些工具进行高效的APK分析。 ... [详细]
  • 【高德地图Android开发套件】详尽视频教程
    前两天参加了高德在北航举办的公开课,感觉非常不错。完成老师布置的作业之后,还顺利地拿到了高德开发者认证证书!!现在来跟大家分享一下,如何快速学习【高德地图AndroidSDK】的开发。一天包会!连 ... [详细]
  • 深入解析 Android TextView 中 getImeActionLabel() 方法的使用与代码示例 ... [详细]
  • 基址获取与驱动开发:内核中提取ntoskrnl模块的基地址方法解析
    基址获取与驱动开发:内核中提取ntoskrnl模块的基地址方法解析 ... [详细]
  • 本文探讨了在Android应用中实现动态滚动文本显示控件的优化方法。通过详细分析焦点管理机制,特别是通过设置返回值为`true`来确保焦点不会被其他控件抢占,从而提升滚动文本的流畅性和用户体验。具体实现中,对`MarqueeText.java`进行了代码层面的优化,增强了控件的稳定性和兼容性。 ... [详细]
  • 为了优化直播应用底部聊天框的弹出机制,确保在不同设备上的布局稳定性和兼容性,特别是在配备虚拟按键的设备上,我们对用户交互流程进行了调整。首次打开应用时,需先点击首个输入框以准确获取键盘高度,避免直接点击第二个输入框导致的整体布局挤压问题。此优化通过调整 `activity_main.xml` 布局文件实现,确保了更好的用户体验和界面适配。 ... [详细]
  • 本文深入解析了如何通过自定义 ViewGroup 实现类似支付宝风格的酷炫雷达脉冲动画效果。文章详细介绍了自定义 ViewGroup 的原理和实现步骤,并结合实际案例展示了如何在 Android UI 设计中应用这一技术,为开发者提供了宝贵的参考和实践指导。 ... [详细]
  • 本文深入探讨了Android事件分发机制的源代码,重点分析了DecorView作为Activity根布局的角色及其在事件传递中的作用。同时,详细解析了PhoneWindow在Activity窗口管理中的关键功能,以及它如何与DecorView协同工作,确保用户交互事件的高效处理。 ... [详细]
  • 解决发布版APK构建失败的问题 ... [详细]
author-avatar
mobiledu2502896071
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有