失败[INSTALL_FAILED_INVALID_APK]


85

当我单击运行一个我刚刚在Android Studio 0.2.10中创建的项目并选择我的Android(通过USB连接并通过USB调试打开)时,出现此错误:

Waiting for device.
Target device: 0123456789ABCDEF
Uploading file
    local path: /Users/Rui/AndroidStudioProjects/FirstAppProject/FirstApp/build/apk/FirstApp-debug-unaligned.apk
    remote path: /data/local/tmp/rui.firstapp
Installing rui.firstapp
DEVICE SHELL COMMAND: pm install -r "/data/local/tmp/rui.firstapp"
pkg: /data/local/tmp/rui.firstapp
Failure [INSTALL_FAILED_INVALID_APK]

有什么想法吗?


选择我的手机...!你是说模拟器...?
Gokul Nath KP 2013年

1
不,我的Android已通过USB调试。
RuiG 2013年

您是否确定该应用程序与所使用的设备兼容?检查清单中的MinSDKTargetSDK值。您是否尝试将其安装在模拟器中?这将缩小问题的范围,无论是与APK还是您的设备有关。
Free3dom 2013年

Answers:


153

我在Android Studio中得到了它,而我所做的所有修复工作都可以使用,"Build" > "Clean Project"并且可以正常工作。


8
如果仍然无法正常工作,则在Clean Project之后可以执行Build-> Rebuild Project。

我刚刚从gradle 5.4.1到5.6.1进行了更新-不知道是什么奇怪的原因造成的,但是gradle的大升级当然可以。./gradlew clean常规的构建命令后是替代的命令行解决方案
Mike Hardy

18

只需删除文件夹中的旧APK android / app / build / outputs / apk / debug / app-debug.apk。就这样。享受您的编码...


欢迎@VenkateshMogili
mahendren

1
rm -fr android/app/build/outputs/apk/debug/
felansu

15

我曾经遇到过类似的问题,我观察到的是,Androidmanifest.xml中的程序包名称以一个空格字符开头。 like " com.example.test" instead of "com.example.test"

我从清单文件中删除了所有这些无效的空格,这解决了我的问题

编辑1:包名称中的'-'在某些Android版本上也会引起相同的问题


1
哇!我以为 invalidate cache and restart会强制进行干净的构建,显然不是。
GabrielOshiro


9

如果有人仍然有问题,那么Build-> Clean Project然后Build-> Rebuild project最后将项目与Gradle file同步


8

如何解决这个问题:

  1. 安装 RootExplorer
  2. tmp在SD卡上创建新文件夹
  3. 长按tmp文件夹,然后选择Link该文件夹(菜单中的最后一个选项)
  4. 转到/data/local/CREATE LINK从底部点击按钮

8

我遇到了这个问题,以上解决方案均不适合我。

由于某种原因,在我的/data/local/tmp目录上的权限设置不正确(只有root拥有rwx)。我使用ADB修复了该问题(您将需要有根设备):

  1. 通过USB连接手机
  2. 使用启动ADB adb shell
  3. 移至/data/local使用cd /data/local
  4. 使用以下命令切换到root模式 su
  5. 允许tmp使用以下命令对目录进行读/写/执行chmod 777 tmp
  6. 断开连接,重新启动Android Studio,然后再次插入设备

7

通过关闭Instant Run解决了我的问题。直到现在都不知道任何解释。迁移到android studio 3.0后,它开始出现这样的问题。希望这对以后的人有所帮助。


6

当我遇到此问题时,为我解决的问题是确保AndroidManifest.xml程序包名称与build.grade applicationId相同。


3

我发现了此错误的另一个原因。如果您以root用户身份登录,则可能会更改/ data / local / tmp的设备访问权限,因此adb无法访问其临时文件。解决方案是在sdcard上创建“ tmp”文件夹,并在/ data / local /中(通过ADB Shell或Root Explorer)创建指向它的符号链接。


我简直不敢相信:与另一台设备进行了交叉检查(所有权限似乎都是相同的,直到根级别);摆弄了权限(甚至使它们成为777)–没办法。那么输了什么。尝试了符号链接–哇!作品(+1)。我仍然想知道原因和背后的原因。在我的情况下,它不是由根引起的,而是使ADB守护程序以“不安全模式”(即具有root权限)运行。
Izzy 2015年


2

这对我来说有帮助:

Settings -> Apps -> Google Play Store -> Click "Enable" button.

哇。谢谢。我禁用了GooglePlay,却没有注意到这是我问题的根本原因。
W0rmH0le

2

我尝试了以上提供的大多数解决方案(简单的解决方案,而不是提供chmod和更改内部库的解决方案),但它们都无法正常工作

最终对我有用的是:“清理项目”->“重建项目”->更改了build.gradle应用程序模块中的应用程序versionName-> Sync Gradle->在设备上运行该应用程序


2

我遇到了构建版本不匹配的问题。Dynamic Delivery模块在调试版本上,而其余模块在发布中。只需将Dynamic Delivery模块更改为发行,重建和安装即可解决此问题。


2

对于Flutter项目,使用VS Code编辑器,转到项目源文件夹,然后删除“ build”文件夹并开始调试。


2

我在带有Dagger和多个模块的项目中遇到了这个问题。对我有用(上述工作均无效)是:1)清空.gradle文件夹2)清空.idea文件夹3)在项目gradle.properties中,标记org.gradle.caching = false 4)可能会使AS中的缓存无效,清理,重建

您可能只需要摆脱#3,先清理然后再构建即可。

编辑:最近我已经能够通过重新启动AS来解决此问题,然后进行清理,然后再次安装。


很奇怪 我已经尝试过一些。这对我有用。这个android开发越来越疯狂了。代码30秒钟,等待5分钟以获取构建内容
satyajit

@satyajit。5分钟!我的需要10点!这是唯一一贯为我工作的人。
丹·安德森

我能够./gradlew installDebug从命令行使用它
satyajit

2

对我来说,这个问题的原因是为我的应用程序模块之一选择了错误的构建变体。我从“构建版本”工具中选择了与应用模块匹配的模块版本,它为我解决了这个问题。


1

我在android Studio上遇到了这个问题,因为在我的Debug版本中,我添加了版本名后缀-DEBUG,而-是问题所在。

尝试在版本名称和应用程序ID上仅包含字母,数字和点


1

导航 Run/Debug Configurations

单击顶部选项卡上的运行>编辑配置

  • 模块:选择您的应用
  • 安装选项:部署默认APK

在此处输入图片说明


0

我只是有同样的错误。我的应用ID为2015年。我用15代替了2015,就解决了。

另外,如果您使用Android Studio,则可以尝试:工具/ Android /带有Gradle文件的Synch项目



0

我遇到了这个问题,以上解决方案均不适合我。

原因可能是根版本电话仅在sdcard上具有可用配额或apk安装权​​限。

我使用ADB修复了该问题(您将需要有根设备):

  1. 通过USB连接手机
  2. 使用adb shell启动ADB
  3. 使用su切换到root模式
  4. 在sdcard中创建tmp文件夹:mkdir / sdcard / tmp
  5. cd /数据/本地
  6. 创建链接sdcard中的文件夹:ln -s / sdcard / tmp tmp

0

失败的原因似乎有多种。对我来说,问题是在AndroidManifest文件中,我使用'uses-library'标签引用了一个不存在的库(仅在此特定设备中)。删除该设备未正确安装apk的库后。


0

我已经使用了androidquickstart Maven原型,并且遇到了相同的问题:

我的程序包名称是唯一的androidquickstart。根据之前的建议

  1. 我已经将包更改为androidquickstart.test
  2. 然后在AndroidManifest.xml中,我将xml的其他部分更改package="androidquickstart"为,package="androidquickstart.test"并相应地删除了测试<activity android:name=".test.HelloAndroidActivity" ><activity android:name=".HelloAndroidActivity" >
  3. 并修复了Java文件中的程序包问题(由IDE突出显示)

0

您的包裹名称应包含由com.example或prashant.mydairy ...等点组成的单词,现在应该可以正常使用

必须更新软件包名称的文件如下:1)清单文件2)Gradle文件(模块appp):applicationId“ package.name”


1
应该发表评论
Furqan


0

如果您有权访问设备控制台(adb shell),请更改以下权限:

  1. chmod 777 /数据/
  2. chmod 777 / data / local /在这种情况下,
    您可能还想尝试将apk复制到/data/local/该目录,请确保对apk设置了正确的权限
  3. chmod 777 /data/local/myapk.apk现在,您可以通过以下方式尝试安装:pm install -r -d /data/local/myapk.apk(注意绝对路径)

0

好像在后有一个数字是罪魁祸首。

我对以下applicationId有相同的问题

org.tony.stark.125jarvis

更改为

org.tony.stark.jarvis

我能够将应用程序安装到android设备上。


0

如果minSdkVersioninbuilde.gradle大于设备的Android版本,则会出现此错误。在这种情况下,您必须修改minSdkVersion


0

删除AndroidManifest.xml中的代码:

tools:replace =“ android:appComponentFactory” android:appComponentFactory =“”

有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.