apk的安装删除

1,签名:

java -jar signapk.jar platform.x509.pem platform.pk8 DownloadProvider.apk DownloadProvider-sign.apk

2,

adb connect 192.168.12.103

adb remount

3,apk安装(可以用adb push直接放置目录即可;或者用adb install):

  adb push DownloadProvider.apk /data/app

  adb install -f xxx.apk

  adb uninstall apk的包名 或者 直接删除 rm

4,启动activity:

  [email protected]:/ # am start -n com.mozillaonline.downloadprovider/.DownloadProviderActivity

  这是用 包名/.类名

  <manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.mozillaonline.downloadprovider"

  。。。。。

  <activity
    android:name=".DownloadProviderActivity"

参考:

adb shell am 的用法

使用此命令可以从cmd控制台启动 activity, services;发送 broadcast等等:

C:\Users\Administrator>adb shell am
usage: am [subcommand] [options]

start an Activity: am start [-D] [-W] <INTENT>
        -D: enable debugging
        -W: wait for launch to complete

start a Service: am startservice <INTENT>

send a broadcast Intent: am broadcast <INTENT>

start an Instrumentation: am instrument [flags] <COMPONENT>
        -r: print raw results (otherwise decode REPORT_KEY_STREAMRESULT)
        -e <NAME> <VALUE>: set argument <NAME> to <VALUE>
        -p <FILE>: write profiling data to <FILE>
        -w: wait for instrumentation to finish before returning

start profiling: am profile <PROCESS> start <FILE>
    stop profiling: am profile <PROCESS> stop

start monitoring: am monitor [--gdb <port>]
        --gdb: start gdbserv on the given port at crash/ANR

<INTENT> specifications include these flags:
        [-a <ACTION>] [-d <DATA_URI>] [-t <MIME_TYPE>]
        [-c <CATEGORY> [-c <CATEGORY>] ...]
        [-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE> ...]
        [--esn <EXTRA_KEY> ...]
        [--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...]
        [-e|--ei <EXTRA_KEY> <EXTRA_INT_VALUE> ...]
        [-n <COMPONENT>] [-f <FLAGS>]
        [--grant-read-uri-permission] [--grant-write-uri-permission]
        [--debug-log-resolution]
        [--activity-brought-to-front] [--activity-clear-top]
        [--activity-clear-when-task-reset] [--activity-exclude-from-recents]
        [--activity-launched-from-history] [--activity-multiple-task]
        [--activity-no-animation] [--activity-no-history]
        [--activity-no-user-action] [--activity-previous-is-top]
        [--activity-reorder-to-front] [--activity-reset-task-if-needed]
        [--activity-single-top]
        [--receiver-registered-only] [--receiver-replace-pending]
        [<URI>]

使用实例:

如启动一个 Activity:

格式:

adb shell am start -n 包名/包名+类名(-n 类名,-a action,-d date,-m MIME-TYPE,-c category,-e 扩展数据,等)。

实例1:

C:\Users\Administrator>adb shell am start -n com.android.camera/.Camera
Starting: Intent { cmp=com.android.camera/.Camera }

实例2:(带extra 的 intent)

C:\Users\Administrator>adb shell am start -n com.android.camera/.Camera -e thisKey thisIsValue
Starting: Intent { cmp=com.android.camera/.Camera (has extras) }

其中 extra 的 key 为 abc ,value 为字串 "hello"

还可以发送命令模拟手机低电环境:

实例:

adb shell am broadcast -a android.intent.action.BATTERY_CHANGED --ei "level" 3 --ei "scale" 100

Android中adb push和adb install的使用区别

 Dreamtale 2014-03-10 23:41:44

本篇文章由史迎春(@三俗小女子)投稿。转载请注明原文地址。
在Android实际开发中,经常会使用adb命令,安装应用程序可以使用adb push 或者adb install。下面就来讲讲这两种安装方式的区别。

adb push 能够指定安装目录。比如执行”adb push xxx.apk system/app” 后,xxx.apk被安装到了system/app目录下,此目录下的软件为上文中提到的system application。(注意,system/app是只读的,所以只有有root权限才能push apk进去,而且在push进去的apk会把原本的apk覆盖掉。)adb push本身的意思是将文件复制到系统中的某个文件夹下,但是将apk push到system/app下并且重启手机以后会注册应用程序。
adb install 用此命令安装的软件位于 data/app 目录,带有参数 -r才能强制安装,为user application。

由以上两条可知,adb install和adb push的apk主要区别有:

push
install

目录
system/app
data/app

权限
系统级(权限全开)
用户级(没全开)

卸载
root后删除
可卸载

大小
无限制,自定义
有限制

安装
pm重新注册
不会重新弄注册

手动安装的APK版本号和系统内置API版本号一样。
 
更深一层的分析:
1、Android系统应用更新机制

系统为每个应用在AndroidMainfest.xml提供了versionName、versionCode两个属性。

versionName:String类型,用来给应用的使用者来查看版本.
versionCode:Integer类型,作为系统判断应用是否能升级的依据。

2、Android系统内置应用更新判断代码

代码来自frameworks/base/services/java/com/android/server/PackageManagerService.java 中 scanPackageLI函数的package更新判断条件

由以上资料分析:

同一个AP,若在data/app下有更高版本的app,但是system下有旧版本,则follow旧版本。
又已知如果有两个以上的AP在同一个进程但是只有一个AP更改了API version则编译会出错
假设有两个AP:AP1和AP2.两个AP都在API Version更新以后build通过且install进手机。且系统中有内置AP1是旧版本的,重新开机的时候还是会注册旧版本的AP1。则此时,系统中就会出现相同进程但是不同版本的AP1(system/app)和AP2(data/app)

综上,编译会出错。
猜测:

若同一个进程的AP都用同一版本的SDK编译,push进手机,则可以运行(已验证)。
若同一进程的AP都用同一个版本的SDK编译。install进手机,则可以运行,前提是删除system/app内所有同一进程AP。(已验证)
若同一个进程的AP都用同一个版本的SDK编译,push/install进手机都可以(待验证)。

作者介绍:
史迎春,女程序员,主要研究Android系统Framework层,目前任职于HTC。

原文链接:http://www.grackertalk.com/?p=48

时间: 2024-10-11 19:30:08

apk的安装删除的相关文章

Android7.0下载Apk自动安装

Android7.0下载Apk自动安装 1. 整体需求 下载APK文件 使用DownloadManager来下载 在应用界面中展示下载进度 安装下载后的APK文件 root模式: 可以自动安装,不需要用户主动点击 正常模式: 弹出安装应用页面,需要兼容7.0以上版本 2. DownloadManager DownloadManager是Android提供的用于下载的类,使用起来比较简单,它包含两个静态内部类DownloadManager.Query和DownloadManager.Request

Android内核开发:浅析APK的安装过程

本文是<Android内核>开发系列文章的第十篇,上一阶段,我们重点学习和分析了Android系统的启动过程,那么,从本文开始,准备介绍一下如何从Android源码中添加.修改.删除系统级别的APP应用.作为开篇,我们先从简单的理论入手,介绍一下Android系统中的APK文件究竟是个什么东西?它是如何安装到系统中去的? 我们在学习和了解一项新事物的时候,最快速的方法往往是与已知的事物进行比较,因此,我们首先来简单聊一聊Windows应用程序的安装过程. 1.  一般Windows应用程序的安

Android apk的安装、卸载、更新升级(通过Eclipse实现静默安装)

一.通过Intent消息机制发送消息,调用系统应用进行,实现apk的安装/卸载 . (1) 调用系统的安装应用,让系统自动进行apk的安装 String fileName = "/data/data/com.zlc.ipanel.operate/FileOperate.apk";  Uri uri = Uri.fromFile(new File(fileName));  Intent intent = new Intent(Intent.ACTION_VIEW);  intent.se

apk下载安装,存储的位置,路径

PackageInstaller 原理简述 应用安装是智能机的主要特点,即用户可以把各种应用(如游戏等)安装到手机上,并可以对其进行卸载等管理操作.APK是Android Package的缩写,即Android安装包.APK是类似Symbian Sis或Sisx的文件格式.通过将APK文件直接传到Android模拟器或Android手机中执行即可安装. Android应用安装有如下四种方式 1.        系统应用安装――开机时完成,没有安装界面 2.        网络下载应用安装――通过

(转)获取android手机内部存储空间和外部存储空间的参数 &amp;&amp; 如何决定一个apk的安装位置

转:http://blog.csdn.net/zhandoushi1982/article/details/8560233 获取android文件系统的信息,需要Environment类和StatFs类的支持. (1)Environment 是一个提供访问环境变量的类,常用的方法有: A,getRootDirectory() ,返回File,获取Android 的根目录. B,getDataDirectory() ,返回File ,获取Android 数据目录. C,getExternalSto

Android APK免安装启动

Android APK免安装启动 在讲诉具体实现之前说一下涉及的知识点 Java虚拟机启动流程 启动Java虚拟机,创建ClassLoader,将java字节码加载进入ClassLoader,随即找到入口函数,执行.当需要创建一个对象的时候,向Java虚拟机发送一个请求,Java虚拟机接收到请求以后,首先在内存中进行寻找,若存在,则解析class,找到相应的方法执行.若内存中不存在,则让ClassLoader对相应的.class文件通过import 路径进行加载到内存中,然后进行解析,找到对应的

从一个内置apk中安装另一个内置的apk

单击内置的apk,安装已经内置到系统中的apk package com.wind.bbminstaller; import java.io.File; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; public class MainActivity extends Activity { static final int RE

(十五)APK的安装、卸载、分享、运行的代码

一.安装APK文件 /** * 安装apk * * @param file 要安装的APK文件 */ private void install(File file) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive"); finish

YUM安装删除软件

YUM安装删除软件 系统添加删除软件是常事,yum同样可以胜任这一任务,只要软件是rpm安装的.安装的命令是,yum install xxx,yum会查询数据库,有无这一软件包,如果有,则检查其依赖冲突关系,如果没有依赖冲突,那么最好,下载安装;如果有,则会给出提示,询问是否要同时安装依赖,或删除冲突的包,你可以自己作出判断.删除的命令是,yum remove xxx,同安装一样,yum也会查询数据库,给出解决依赖关系的提示. 方法/步骤 1 用YUM安装软件包命令:yum install <p