Skip to content

CoreI/Status.go中的getDataDir()函数可能需要修改 #26

Description

@adf2007

Android 6.0以后系统支持多用户,分别为"主要用户"、"次要用户"、“访客”。以前的手机用户内置存储区在/data/data/packagename/中。但是现在的用户内置存储区在/data/user/userId/packagename/目录。比如,“主要用户”的userid为0,则它的私人内部存储区在/data/user/0/com.v2ray.ang/目录,而第一个“次要用户”的userid为10,它的私人内部存储区在/data/user/10/com.v2ray.ang/目录,以此类推。手机/data/data/packagename/目录仍然存在,应该是为了兼容性考虑,但是这个目录只有“主要用户”可以访问。所以导致了“次要用户”安装这个应用的时候,无法成功启动vpn服务。通过logcat可以看到,提示“fork exec /data/data/tun2sock : permission denied”。
希望作者能修改这个问题,让多用户的手机也可以安装使用。

获取用户内部存储目录有相关函数,但方便起见我做了如下修改,并测试,已经测试通过。“主要用户”、“次要用户”都可以成功运行。用户的userid可以通过uid/100000得到。CoreI/Status.go中的getDataDir()函数修改如下:

func (v *Status) getDataDir() string {
var datadir = "/data/data/org.kkdev.v2raygo/"
if v.PackageName != "" {
datadir = "/data/user/" + strconv.Itoa(os.Getuid()/100000) + "/" + v.PackageName + "/"
}
return datadir
}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions