我有一个在Android模拟器中工作的程序。我一次又一次地创建一个签名的.apk并将其导出到我的HTC Desire进行测试。一切都很好。
在我最新导出的.apk上,当我尝试安装.apk时,收到错误消息“App not installed”。它在模拟器上运行良好。
由于我主要是在模拟器上进行测试,并且只是每次都出口到真正的手机,我不确定这是什么时候发生的。它不是在物理手机上安装而是在模拟器中运行良好的可能原因是什么?
我试过重新启动手机&删除现有的.apk,并不能解决问题。
答案 0 :(得分:233)
我在尝试在4.4.2又名KitKat上运行的手机上安装apk时遇到App not installed
错误,但是我的朋友在6+以上的手机上没有遇到此错误。我尝试了其他解决方案,例如删除应用程序的旧/调试版本,因为apk是发布版本,清除调试应用程序的数据,甚至清除所有缓存数据。然后,最后我意识到我所要做的就是在构建我签名的apk时选择两个签名版本。
在我选择V2 (Full APK Signature)
之前,在选择V1 Jar Signature
之后,我能够在我的4.4.2设备上成功安装已签名的APK。希望这有助于其他人!
答案 1 :(得分:123)
我遇到了类似的问题,这是因为我试图在手机上使用相同apk的先前版本安装apk,并且两个apks都没有使用相同的证书进行签名。我的意思是当我使用相同的证书时,我能够覆盖以前的安装,但是当我在版本之间更改证书时,安装是不可能的。你使用的是相同的证书吗?
答案 2 :(得分:111)
对我来说,在Android 9(API 28)上,从Play商店应用中禁用 Google Play保护可以解决问题,而且我能够摆脱App not Installed
错误。 / p>
禁用Google Play保护。打开“ Play Store”应用程序=>点击 在菜单按钮上=>选择“播放保护”选项=>禁用该选项 “扫描设备是否存在安全威胁”。
答案 3 :(得分:103)
显然,这个问题有很多原因。对我来说情况是这样的:我已经从Android Studio(v1.3.2)中部署到我的nexus 7(实际设备)。一切正常。然后我创建了一个签名的apk并上传到我的Google云端硬盘。断开我与nebus之间的关系后,我转到设置/应用程序并卸载了我的应用程序(App1)。然后我打开谷歌驱动器并单击我的App1.apk并选择安装它(需要确保您已允许在设置中安装apks)。然后我收到了可怕的消息" App Not Installed"
解决方案对我来说:回到设置/应用程序并滚动浏览所有应用程序,并在底部的是我的App1的苍白版(请注意原始App1按字母顺序位于顶部,这是删除如上)。当点击苍白版本时,它说"没有为这个用户安装"。 (我已经建立了我的联系以拥有多个用户)。但是在右上角有一个三点按钮。我按了这个,它说"为所有用户卸载" 。我做了什么,它解决了这个问题。我现在能够点击App1.apk并且安装正常而没有错误。
答案 4 :(得分:30)
当我将我的android从2.3.2更新到3.0.1时,我遇到了这个问题。如果是这种情况,IDE将自动考虑以下几点。
1.您无法通过常规方式安装带有android:testOnly =“true”的应用程序,例如来自Android文件管理器或从网站下载
2.Android Studio在从
运行的APK上设置android:testOnly =“true”如果您运行的应用程序直接将设备连接到您的系统,apk将安装并运行没有问题。
如果您从build out put和debug文件夹中发送此apk,它将永远不会安装在设备中。
解决方案:转到构建--->建立APK(s) --->将apk文件共享复制到您的团队
然后你的问题就会解决。
答案 5 :(得分:29)
我遇到了同样的问题。问题是我的AndroidManifest.xml文件中的主要活动被写了两次。我删除了副本。
答案 6 :(得分:20)
如果您在AndroidManifest.xml中声明了两次MainActivity,则会发生这种情况。
另一个可能的原因:您更改了启动活动。提示:永远不要使用已发布的应用程序! Android Developers blog中讨论的原因。
答案 7 :(得分:17)
我遇到了同样的问题。我没有意识到即使是测试也必须签署应用程序。
自我签名后,安装得很好。
答案 8 :(得分:11)
我知道这是一个旧帖子,但对于新用户可能会有用。我有同样的问题:我的应用程序在debbuging工作正常。当我签署APK时,我收到了相同的消息:“应用程序未安装”。
我修复了卸载我的JDK(我使用的是jdk-6u14-windows-x64)并安装了一个新的(jdk-6u29-windows-x64)。导出后再次签署APK,一切都还可以!
恢复,我的问题出在JAVA版本中。谢谢你的甲骨文!!
答案 9 :(得分:10)
我遇到了同样的问题,以下是解决问题的方法:转到Manifest文件,确保将“Debuggable”和“Test Only”属性设置为false。它对我有用:)
答案 10 :(得分:8)
我的问题是我在设备上有多个用户帐户。我在1个帐户中删除了该应用,但它仍然安装在其他帐户中。因此命名空间冲突并且没有安装。从所有用户卸载应用程序为我修复了它。
答案 11 :(得分:7)
对于那些使用Android Studio 3的人。
Suryanarayana Reddy的答案是正确的,因为它没有说明解决它的步骤,因此。
在应用程序代码下的AndroidManifest.xml中添加testOnly="false"
和android:debuggable="true"
,如下所示:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:testOnly="false"
android:debuggable="true"
>
编辑
然后在AndroidStudio的菜单栏Build&gt;中建立APK(s)
答案 12 :(得分:7)
如果应用程序未安装,请从SD卡中删除文件.android_secure/smdl2tmpl.asec
。
如果文件管理器中的文件夹.android_secure
为空,请将其从PC中删除。
答案 13 :(得分:6)
我的问题是:我使用了调试Apk,它是我在Android Studio中执行“运行”命令时生成的
解决方案是:代替使用此文件,清理项目,然后从Android Studio中单击“构建”>“构建APK” 。然后,您可以使用通常文件夹(app / build / outputs / apk / debug /)中生成的APK
这样生成的文件安装没有问题。
答案 14 :(得分:5)
我也解决了这个问题,
问题是我宣布我的主要活动两次, 作为第一个要加载的活动,我也为它指定了一个intent-filter 再次在它之下,我再次宣布它。
请确保您没有两次宣布您的活动。
答案 15 :(得分:4)
最后我发现没有成功安装任何应用程序,而不仅仅是我的。我将安装应用程序默认设置从SD卡设置为自动。修好了。
答案 16 :(得分:4)
通过命令行创建密钥库文件
keytool -genkey -alias key_file_name.keystore -keyalg RSA -validity 1000000000000000 -keystore key_file_name.keystore
通过Eclipse导出apk,右键单击Android项目 Android工具&gt;导出已签名的应用程序包,然后提供密钥库位置&amp;密码。
这将crate签署apk同时apk将被zipaligned。并可安装。
如果您通过命令行,有时您可能会遇到“应用程序未安装”错误。 (应用程序未安装错误不仅可能发生在使用命令行时。也可能是其他一些原因)
答案 17 :(得分:4)
我的问题类似于@Lunatikzx。由于作为属性写入应用程序的错误权限标记:
<application
android:permission="android.permission.WRITE_EXTERNAL_STORAGE"
android:label="@string/app_name"
android:icon="@drawable/ic_launcher"
android:testOnly="false"
android:debuggable="true">
为我修复的是将权限标记更改为单独的标记:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
答案 18 :(得分:4)
如果您有该应用程序的先前版本,请先尝试删除它,现在我的问题已通过该方法解决。
答案 19 :(得分:4)
我遇到了同样的问题,即应用程序显示已安装,但在点击图标时无法启动。经过一些头撞,我发现我在AndroidManifest文件中愚蠢地放置了'android:exported =“false”'作为我的主要启动器活动....一旦我删除它,应用程序启动正常..
答案 20 :(得分:3)
ARGHHHHH! 我尝试在正确的设置为DEBUG SDK时安装为Unsigned Release APK 。
要花一个小时。
答案 21 :(得分:3)
如果已将应用程序安装到SD卡或移动到SD卡,然后连接了USB电缆,导致SD卡卸载,也会出现“未安装应用程序”错误。
关闭USB存储设备或将应用程序移回内部存储设备可以解决此问题。
答案 22 :(得分:3)
我也遇到过这个问题。 请试试这个解决方案。确保项目的软件包名称与之前已安装在移动电话中的项目不同。我认为他们的名字会发生冲突。它适用于我。
答案 23 :(得分:3)
您也可能遇到此问题,因为您的设备制造商未授权使用Google商业应用,例如Play商店,YouTube,Google地图等。请按this answer解决问题。
答案 24 :(得分:3)
使用Android版本查看。
如果您要安装非市场应用程序和不兼容的版本,您将收到此错误。
Ex:申请目标为2.3.4 你的设备是2.2 然后你会得到这个错误。
答案 25 :(得分:2)
使用Android Studio,我之前安装了APK的未签名调试版本( Build&gt; Build APK ),并且在安装签名版本之前必须将其卸载( Build Variants&gt ;构建变体:发布,构建&gt;生成签名APK 。)
答案 26 :(得分:2)
在我的情况下,这是因为Android Studio 3.0在从android:testOnly="true"
Build Variant构建的APK上设置了release
。
https://commonsware.com/blog/2017/10/31/android-studio-3p0-flag-test-only.html
所以运行./gradlew assembleRelease
解决我的问题
答案 27 :(得分:2)
此答案仅与使用本机库的应用有关(Android NDK)。
在我的情况下,问题是jniLib中缺少目标手机的CPU体系结构的某些本机库。因此,该应用程序正在模拟器上运行,但是在真实手机上却显示“未安装应用程序”。
我最初只为x86架构复制了编译的本机库,因此该应用程序可在模拟器上运行。但是,缺少其他体系结构(x86_64,armeabi_v7a,arm64-v8a)。将所有体系结构缺少的* .so文件添加到jniLib中后,“未安装应用”错误消失了。
答案 28 :(得分:2)
在Marsmallow中,所有者和访客用户都在那里。如果访客安装了相同的应用程序,我们无法在所有者中安装相同的应用程序。我修复了这个删除访客中的应用程序
答案 29 :(得分:2)
对我而言,原因是我在同一部手机上使用不同的构建变体进行了多次构建:
发生的事情是,其中一些构建是由 me 构建的,另一个是由另一个开发人员发送给我的...尝试安装开发人员,而我有其他构建(由我构建)导致上述错误。
所以修复很简单:删除所有手机上的构建版本(无论构建版本)...然后安装我的同行发送的apk ..它就像魅力一样
答案 30 :(得分:2)
显然,这也可能是因为在安装之前重命名了APK。我希望通过缩短文件名来减少用户从我们的网站获取应用程序所需的输入量。之后,他们无法安装它。
一旦我恢复到创建和签署软件包时使用的原始文件名,我就能够更新已安装的应用程序。
答案 31 :(得分:2)
就我而言,我将启动器活动声明为 android:exported="false"
<activity android:name=".MainActivity"
android:exported="false">
我最近针对 android 12 并且不得不将 android:exported
属性放入我的清单组件中,但不知道将什么作为值放入。将值更改为 android:exported="true"
有效。
答案 32 :(得分:1)
如果您尝试直接从Google云端硬盘安装apk,只需重启设备即可为我解决该问题。
答案 33 :(得分:1)
在我的情况下,这是因为我使用的是支持库28的Alpha版本。看起来Google将这些预发行版本标记为testOnly。如果您确实想要这样发布(例如,您想像我一样推送内部Beta版),则可以将此行添加到gradle.properties文件中:
android.injected.testOnly=false
答案 34 :(得分:1)
在将手机从Android Pie升级到Android 10之前,将侧面加载调试应用程序以在物理电话上进行测试的工作可靠地进行。此后,每次尝试侧面加载该应用程序时,都会出现“未安装应用程序”错误。
基于我的AndroidManifest.xml中的警告,我从...更改为
<application
android:name=".App"
android:allowBackup="true" ... />
到...
<application
android:name=".App"
android:allowBackup="false" ... />
之后,我能够一次加载我的应用程序。然后,我再次遇到相同的“未安装应用程序”错误。通过将allowBackup
改回true
,它再次起作用(至少一次)。
从答案的数量和答案的变化可以明显看出,有很多原因导致了此问题。如果有帮助,我会与大家分享。
答案 35 :(得分:1)
您应将其另存为Debug而不是发布,检查两个JAR标志,并允许从下载位置下载应用程序(WhatsApp,chrome等)
答案 36 :(得分:1)
如果内部存储器中没有足够的空间,也会发生这种情况。我有500Mb的免费空间,但是还不够。免费试用1Gb +。
答案 37 :(得分:1)
我遇到了类似的情况,我能够使用USB而非签名版本在调试模式下安装应用程序。我可以在其他手机上安装签名版本,但不能在我的设备上安装。许多原因和解决方案对我没有帮助。但是我从解决方案“为所有用户卸载”中得到了一个方向。 我要做的是再次使用USB连接以调试模式安装应用程序,转到应用程序详细信息,然后从右上3个点“为所有用户卸载”-删除调试版本。这看起来像清除了各种参考。我通常会进行常规卸载。
现在,我可以在设备上获得签名的APK并安装并成功运行。
答案 38 :(得分:1)
在我的情况下,我之前发布的应用已经通过其他密钥签名,因此我已将其卸载,但在我的测试手机上(LG G4 H-818) 2个用户存在以前的应用仍然安装在我的手机上,没有安装正确!所以当我再次尝试安装时,它失败了......
所以我尝试更改用户并卸载以前的应用,最后安装了应用。
希望它在将来能帮到你:)
答案 39 :(得分:1)
我发现如果我在 build.gradle 文件中将 compileSdkVersion、buildToolsVersion 和 targetSdkVersion 都设置为默认值 30 来构建我的应用程序,那么该应用程序将无法安装在我的手机上。但是,如果我将它们改回版本 29,它就起作用了。原来的问题是,从 SDK 30 开始,您需要选择 V2 jar 签名。有关详细信息,请参阅 Why does the Android SDK 30 generate invalid APK files?
答案 40 :(得分:1)
当我遇到这个问题时,我通过删除项目文件夹中的一些非必要文件来修复它,比如密钥库。
事后看来,给人们游戏的关键可能是不好的。
答案 41 :(得分:1)
制作主屏幕窗口小部件时,也会发生这种情况,并且窗口小部件XML文件的android:configure
属性中指定的活动不正确。
答案 42 :(得分:1)
我遇到了同样类型的错误,这在我的android清单XML文件中被这一行警告。
android:permission="android.permission.INSTALL_LOCATION_PROVIDER"
我删除了该行,它解决了我的问题。希望这有帮助
答案 43 :(得分:0)
以防万一,您已从Google Play安装了应用的较旧版本,并且想要测试该应用的较新版本:
打开Google Play控制台
将您应用的较新发行版本上载到Alpha / Beta,但尚未发行!
现在在手机上安装下载的派生apk。 Google Play使用与Android Studio生成的发行版应用程序不同的密钥对派生的apk进行了重新签名。
答案 44 :(得分:0)
有时是因为手机上没有足够的空间。如果是这样,请尝试清理内存以为新安装创建空间。
答案 45 :(得分:0)
一般贴的方法我都试过了, 刚想放弃, 签字的事情解决了。
找到了一些字面上写着“apk 签名者”的应用,它做到了。
答案 46 :(得分:0)
如果您使用的是cordova,请尝试卸载通过cordova构建的任何以前的应用程序。 奇怪,但是这种方法解决了我的问题
答案 47 :(得分:0)
有时还应提到不可用的存储,因为我面临此问题,因为需要安装的设备没有足够的空间,并且系统也不会向用户发出警报。您只是因为调试而发现
答案 48 :(得分:0)
如果有人遇到此问题,请检查内部版本号。如果您的内部版本号小于已安装的应用内部版本号,则您的应用将无法安装,您将收到“损坏的应用或apk文件”。
要修复它,只需增加您的内部版本号,直到它等于或大于安装的内部版本号。
答案 49 :(得分:0)
当我要安装的设备没有足够的存储空间时,我遇到了“未安装应用程序”错误。删除一些文件即可安装该应用程序。奇怪的是,它没有给我“空间不足”的信息。 (注意:我是从“未知”位置手动安装apk。)
答案 50 :(得分:0)
我以各种形式遇到了这个问题,但这一次是一个新问题:
在这种情况下,我的提供程序名称冲突-我的应用程序和另一个应用程序中存在相同的提供程序名称。
答案 51 :(得分:0)
打开AndroidMainfest,然后在应用程序标记中添加verionCode,versionName并确保调试功能等于false:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="...">
<application
...
android:debuggable="false"
android:versionCode="1"
android:versionName="1.0"
tools:ignore="HardcodedDebugMode">
...
</application>
然后打开build.gradle(module:app),确保退出verionCode,versionName和minsdk <=您的移动SDK:
defaultConfig {
...
minSdkVersion 19
targetSdkVersion 28
versionCode 1
versionName "1.0"
...
}
调查来源:https://developer.android.com/studio/publish/
&https://developer.android.com/studio/publish/preparing
答案 52 :(得分:0)
当我的自定义构建工具出现错误时,我遇到了这个问题,该工具会使用带有适用于iOS的证书的ADT(这当然不是我的第一个猜测,因为Android似乎没什么特别之处证书除了你应该有一个,他们只是RSA-1024证书,甚至自签名是好的,至少对于非市场安装)。
答案 53 :(得分:0)
答案 54 :(得分:0)
我将最新的应用程序版本发布到Playstore时遇到了这个问题。问题是MainLauncher
和应用程序快捷方式的更改组合。
我们添加了一个启动画面,我们的入口点为SplashActivity
而不是MainActivity
。因此,拥有以前版本并且在其主屏幕上具有应用程序快捷方式的人无法打开该应用程序。它总是说App not installed
吐司之类的东西。这不会发生在每个发射器上(对我们来说,它在三星上更常见)。
在幕后,App shortcut
应无缝更新从MainActivity
到SplashActivity
的切入点。但是,由于某些原因,许多第三方发射器都没有遵守它。修复程序清除了快捷方式并再次添加。
如果您尚未在Playstore中更新您的应用,请浏览this article。
请注意更新启动器活动。
答案 55 :(得分:0)
如果你尝试了上面的所有答案而且没有一个有效,你可能想尝试一下:
如果您的构建变体是&#39; debug
&#39;,那么您应该在应用构建gradle中的buildTypes
下添加此内容,以便在您的设备上安装该应用:
debug {
minifyEnabled false
}
答案 56 :(得分:0)
答案 57 :(得分:0)
我也面临同样的问题。 在我的应用程序中有服务。 即使在卸载应用程序后,服务也在后台运行,在强制停止应用程序后,收到一条消息,说明应用程序已卸载。 然后我安装了应用程序,没有任何问题。
答案 58 :(得分:0)
确保考虑这些提示:
build variants
和Flavors
应该相同(已安装应用和新应用),通常是发布Signature
文件必须相同(* .jks文件)build.gradle
或AndroidManifest
中设置的版本与当前版本相比具有更高的价值(建议在build.gradle
中设置版本)setDataAndType
中的数据和类型设置正确答案 59 :(得分:0)
我使用2种不同的证书签署了应用程序,因此删除旧版本的旧版本,然后重新安装新版本解决了我的问题
答案 60 :(得分:0)
尝试在 AndroidManifest.xml :
中进行此更改答案 61 :(得分:0)
我通过不首先签署应用程序而不是Maven来修复此问题。我将此添加到我的构建路径中。
<plugin>
<groupId>com.jayway.maven.plugins.android.generation2</groupId>
<artifactId>android-maven-plugin</artifactId>
<inherited>true</inherited>
<configuration>
<sign>
<debug>false</debug>
</sign>
</configuration>
</plugin>
之后我手工签署了我的应用程序:jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore /home/myself/.android/release.keystore myapp-1.0.apk androidreleasekey
答案 62 :(得分:-2)
就我而言,我删除了不需要的无用权限
我只需要 1个权限
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
并删除不需要的不需要的权限,并开始显示此错误
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.INSTALL_LOCATION_PROVIDER" />
<uses-permission android:name="android.permission.CONTROL_LOCATION_UPDATES" />