在Galaxy S3上安装我编写的应用程序时出错

时间:2013-09-28 15:07:01

标签: android eclipse install logcat

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

有人可以帮助我吗?

2 个答案:

答案 0 :(得分: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”并使用platform.x509.pem,platform.pk8对我的应用程序进行签名。相关ROM,然后我写入外部存储器,发生错误。

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

因为我的应用只在Android 4.2.2的自定义安卓板中运行,所以Android框架工程师删除了throwIfSystem()方法并修改了我的应用程序的SD卡写入权限。

// Android模拟器

d --- rwxr-x system sdcard_rw 1970-01-01 00:00 sdcard

// Android自定义垫

drwxrwxr-x system 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卡。系统将提醒您权限被拒绝.Maybe这是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

答案 1 :(得分:-1)

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