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

dgo*_*lka 2 eclipse android 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)
Run Code Online (Sandbox Code Playgroud)

有人能帮我吗?

ife*_*goo 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();
}
Run Code Online (Sandbox Code Playgroud)

我开发了一个需要系统权限的应用程序,因此我必须在AndroidManifest.xml中声明android:sharedUserId ="android.uid.system"并使用相关ROM的platform.x509.pem,platform.pk8签署我的应用程序,然后我写入外部存储器,发生错误.

但我很困惑,也许你运行使用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自定义Pad

drwxrwxr-x system sdcard_rw 2014-09-01 19:07 sdcard

注意:除了Android 4.2.2,其他Android版本(Android 4.4.2除外),没有上面的错误,但像我的应用程序的情况相同.官方的Android系统将不允许该应用程序声明android:sharedUserId ="android.uid.system"在AndroidManifest.xml中并用platform.x509.pem签名,platform.pk8将相关ROM写入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