2

当我尝试在我的 S3 上启动 apk 文件时,Eclipse 中的 LogCat 向我显示了这些错误:


09-28 16:56:59.020: A/Environment(1967): Static storage paths aren't available from AID_SYSTEM
09-28 16:56:59.020: A/Environment(1967): java.lang.Throwable
09-28 16:56:59.020: A/Environment(1967):    at android.os.Environment.throwIfSystem(Environment.java)
09-28 16:56:59.020: A/Environment(1967):    at android.os.Environment.getExternalStorageDirectory(Environment.java)
09-28 16:56:59.020: A/Environment(1967):    at com.samsung.android.MtpApplication.MtpReceiver.onReceive(MtpReceiver.java)
09-28 16:56:59.020: A/Environment(1967):    at android.app.ActivityThread.handleReceiver(ActivityThread.java)
09-28 16:56:59.020: A/Environment(1967):    at android.app.ActivityThread.access$1600(ActivityThread.java)
09-28 16:56:59.020: A/Environment(1967):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java)
09-28 16:56:59.020: A/Environment(1967):    at android.os.Handler.dispatchMessage(Handler.java)
09-28 16:56:59.020: A/Environment(1967):    at android.os.Looper.loop(Looper.java)
09-28 16:56:59.020: A/Environment(1967):    at android.app.ActivityThread.main(ActivityThread.java)
09-28 16:56:59.020: A/Environment(1967):    at java.lang.reflect.Method.invokeNative(Native Method)
09-28 16:56:59.020: A/Environment(1967):    at java.lang.reflect.Method.invoke(Method.java)
09-28 16:56:59.020: A/Environment(1967):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
09-28 16:56:59.020: A/Environment(1967):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
09-28 16:56:59.020: A/Environment(1967):    at dalvik.system.NativeStart.main(Native Method)

有人能帮我吗?

4

2 回答 2

5

此错误仅发生在 Android 4.2.2,android.os.Environment:

private static void throwIfSystem()
{
    if (Process.myUid() == Process.SYSTEM_UID)
    {
        Log.wtf(TAG,
                "Static storage paths aren't available from AID_SYSTEM",
                new Throwable());
    }
}

public static File getExternalStorageDirectory()
{
    throwIfSystem();
    return sCurrentUser.getExternalStorageDirectory();
}

我开发了一个需要系统权限的应用,所以我必须在AndroidManifest.xml中声明android:sharedUserId="android.uid.system",并用相关ROM的platform.x509.pem、platform.pk8对我的应用进行签名,然后我写入外部存储,错误发生。

但是我很困惑,也许您运行的是使用 Galaxy S3 的 platform.x509.pem、platform.pk8 文件签名的应用程序?

因为我的app只运行在Android 4.2.2定制的android pad中,所以Android框架工程师去掉了throwIfSystem()方法,修改了我的app的SD卡写权限。

// 安卓模拟器

d---rwxr-x 系统 sdcard_rw 1970-01-01 00:00 sdcard

// Android 自定义 Pad

drwxrwxr-x 系统 sdcard_rw 2014-09-01 19:07 sdcard

注意:除Android 4.2.2外,其他Android版本(除Android 4.4.2外)没有上述错误,但和我的应用一样的情况。官方Android系统不允许应用声明为AndroidManifest.xml中的android:sharedUserId="android.uid.system" 并用platform.x509.pem签名,将相关ROM的platform.pk8写入SD卡。系统会提醒您权限被拒绝。也许这是一个Android系统的安全机制。但是当我在Android 4.4.2的Android官方模拟器上测试我的应用程序时,它运行正常,我不知道为什么。

也许你的情况和我的不一样。但希望对你有所帮助!如果你会看中文,你可以在我的个人博客中阅读这篇文章。它详细说明了上述错误。

http://www.ifeegoo.com/android-debug-static-storage-paths-are-not-available-from-aid-system-error-analysis-and-solution.html

于 2014-09-05T06:11:31.950 回答
-1

看起来您正在使用不应该使用的静态字段。尝试将其返回到您认为可能出现问题的位置,因为每一行都是错误的起源。在这种情况下,它是自下而上的。看起来你有一个抛出异常。因此,如果您在可抛出事件中有一个静态字段,那很可能是您的原因。没有源代码很难说

于 2013-09-28T15:23:23.800 回答