首先,这不是重复的问题,我尝试过其他类似线程的解决方案,但看起来这种情况不同。
在我的情况下,我可以从同一个模拟器成功安装和运行其他Android项目(x86也尝试了arm)但是这个特定的应用程序项目在从shell内部手动“adb install”安装时也会抛出以下错误。 / p>
找到以下日志中的一个错误(第232行) https://android.googlesource.com/platform/system/vold/+/froyo/Loop.cpp
但是我不知道错误“No content provider ...”是否与同一个错误堆栈有关。
如果它有写入权限错误(sdcard或类似的文件系统权限),那么其他应用程序也应该不安装!
这个有问题的应用程序是一个带有自定义内容提供程序的NDK项目,我尝试省略但无济于事。看起来内容提供程序错误与来自os的apk安装有关,而不是来自应用程序内的内容提供程序。
我厌倦了使用真实设备进行测试,我担心这会降低我的手机寿命,因为我必须经常这样做。
--------- beginning of /dev/log/main
D/AndroidRuntime( 1977):
D/AndroidRuntime( 1977): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit <<<<<<
W/linker ( 1977): libdvm.so has text relocations. This is wasting memory and is a security risk. Please fix.
D/AndroidRuntime( 1977): CheckJNI is ON
D/dalvikvm( 1977): Trying to load lib libjavacore.so 0x0
D/dalvikvm( 1977): Added shared lib libjavacore.so 0x0
D/dalvikvm( 1977): Trying to load lib libnativehelper.so 0x0
D/dalvikvm( 1977): Added shared lib libnativehelper.so 0x0
D/dalvikvm( 1977): No JNI_OnLoad found in libnativehelper.so 0x0, skipping init
D/dalvikvm( 1977): Note: class Landroid/app/ActivityManagerNative; has 179 unimplemented (abstract) methods
E/memtrack( 1977): Couldn't load memtrack module (No such file or directory)
E/android.os.Debug( 1977): failed to load memtrack module: -2
D/AndroidRuntime( 1977): Calling main entry com.android.commands.pm.Pm
E/PackageHelper( 1680): Failed to create secure container smdl2tmp1
--------- beginning of /dev/log/system
W/ActivityManager( 1149): No content provider found for permission revoke: file:///data/local/tmp/myapp.apk
E/Vold ( 932): Error creating imagefile (Read-only file system)
E/Vold ( 932): ASEC image file creation failed (Read-only file system)
W/Vold ( 932): Returning OperationFailed - no handler for errno 30
E/DefContainer( 1680): Failed to create container smdl2tmp1
W/ActivityManager( 1149): No content provider found for permission revoke: file:///data/local/tmp/myapp.apk
D/dalvikvm( 1149): GC_EXPLICIT freed 161K, 22% free 5442K/6948K, paused 1ms+1ms, total 8ms
D/AndroidRuntime( 1977): Shutting down VM
答案 0 :(得分:6)
问题可能来自:
“出于平台安全目的,SD卡上的应用程序存储在加密容器中 - 以便其他应用程序无法修改或损坏它们。安装SD卡时,这些容器已安装,以便可以在同一个位置访问它们应用程序存储在内部存储中的方式。“
在你的stacktrace上,问题是:
E / Vold(932):创建imagefile时出错(只读文件系统)
E / Vold(932):ASEC映像文件创建失败(只读文件 系统)
我在AndroidManifest.xml中定义了一个类似的问题 android:installLocation =“preferExternal”,以下内容对我有用(独立完成彼此):
I/qtaguid ( 6299): Failed write_ctrl(u 40) res=-1 errno=22
I/qtaguid ( 6299): Untagging socket 40 failed errno=-22
W/NetworkManagementSocketTagger( 6299): untagSocket(40) failed with errno -22
D/Finsky ( 6299): [1] 2.onResponse: Verification id=29 response=0
D/Finsky ( 6299): [1] PackageVerificationReceiver.onReceive: Verification requested, id = 29
E/Vold ( 127): Error creating imagefile (Read-only file system)
E/Vold ( 127): ASEC image file creation failed (Read-only file system)
W/Vold ( 127): Returning OperationFailed - no handler for errno 30
E/PackageHelper( 6280): Failed to create secure container smdl733025106.tmp
W/DefContainer( 6280): Failed to copy package at /storage/emulated/0/myapp.apk
W/DefContainer( 6280): java.io.IOException: Failed to create container smdl733025106.tmp
W/DefContainer( 6280): at com.android.defcontainer.DefaultContainerService.copyPackageToContainerInner(DefaultContainerService.java:327)
W/DefContainer( 6280): at com.android.defcontainer.DefaultContainerService.access$000(DefaultContainerService.java:67)
W/DefContainer( 6280): at com.android.defcontainer.DefaultContainerService$1.copyPackageToContainer(DefaultContainerService.java:108)
W/DefContainer( 6280): at com.android.internal.app.IMediaContainerService$Stub.onTransact(IMediaContainerService.java:60)
W/DefContainer( 6280): at android.os.Binder.execTransact(Binder.java:446)
根据https://developer.android.com/guide/topics/data/install-location.html更改为 android:installLocation =“auto”
根据http://forum.xda-developers.com/showpost.php?p=58409922&postcount=4845如果您要将其安装到“内部设备存储空间”,无论清单显示什么或系统决定什么。
转到设置&gt;应用&gt;打开菜单&gt;首选安装位置&gt; 将其设置为“内部设备存储”。我把它设置为“让系统 决定“。这导致一些APK无法安装,因为 他们被标记为更喜欢SD卡作为他们的安装位置 因此他们试图安装到SD上它就失败了。现在 所有东西都安装在设备上,它工作得很好。
如果您要将其安装到“外部存储空间”
adb root
adb shell
mount -o rw,remount rootfs /
chmod 777 / mnt / sdcard
pm install /mnt/sdcard/myapp.apk
mount -o ro,重新安装rootfs /
根据https://code.google.com/p/android/issues/detail?id=9593
&安培;&安培; http://www.androidpolice.com/2011/04/19/fixing-the-couldnt-install-on-usb-storage-or-sd-card-problem-on-android/
仅当您能够在以下路径中找到smdl2tmp1.asec时
或者你得到错误
smdl2tmp1 03-24 18:48:38.784:ERROR / Vold(86):ASEC文件'/mnt/secure/asec/smdl2tmp1.asec'目前存在 - 首先销毁它! (地址已在使用中)
adb root
adb shell rm /sdcard/.android_secure/smdl2tmp1.asec
adb shell rm /mnt/secure/asec/smdl2tmp1.asec
答案 1 :(得分:2)
在我的情况下,我正在使用Android版本6的设备,为Unity开发。
我直接从Unity编辑器安装应用程序时遇到同样的错误,如果我将应用程序作为Beta版本上传到Android Game Play Developer控制台然后从那里下载并安装它,则不会发生这种情况。这种情况下android将需要加密并成功安装应用程序。
我的直接安装解决方案是设置: android build - &gt;播放器设置&gt;安装位置 - &gt;强迫内部