【问题标题】:Error while installing application written by me on Galaxy S3在 Galaxy S3 上安装我编写的应用程序时出错
【发布时间】:2013-09-28 15:07:00
【问题描述】:

当我尝试在我的 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)

有人可以帮我吗?

【问题讨论】:

    标签: android eclipse installation logcat


    【解决方案1】:

    这个错误只发生在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" 并使用 platform.x509.pem、platform.pk8 对我的应用进行签名相关的ROM,然后我写入外部存储,错误发生。

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

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

    // 安卓模拟器

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

    // 安卓自定义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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-29
        • 2010-09-19
        • 2018-10-07
        • 1970-01-01
        • 2011-02-03
        • 2018-01-02
        相关资源
        最近更新 更多