美文网首页
android中清单文件属性android:process介绍

android中清单文件属性android:process介绍

作者: ModestStorm | 来源:发表于2020-06-19 12:45 被阅读0次

当四大组件的配置属性android:process,代表需要开启一个新进程来运行。

1.以":"开头时,代表该进程是私有进程,只有该app可以访问,其他进程无权访问.

2.以非":"开头时,代表该进程是全局进程,其他app也可以访问,但是进程名中至少必须包含"."分隔符。

上述结论可以在PackageParser解析AndroidManifest.xml时可以找到答案.
[PackageParser.java]
看看PackageParser.java来解析AndroidManiefst.xml过程就明白进程名的命名要求

public class PackageParser {
    ...
    private static String buildCompoundName(String pkg, CharSequence procSeq, String type, String[] outError) {
        String proc = procSeq.toString();
        char c = proc.charAt(0);
        if (pkg != null && c == ':') {
           if (proc.length() < 2) {
               //进程名至少要有2个字符
               return null;
           }
           String subName = proc.substring(1);
           //此时并不要求强求 字符'.'作为分割符号
           String nameError = validateName(subName, false, false);
           if (nameError != null) {
               return null;
           }
           return (pkg + proc).intern();
        }
        //此时必须字符'.'作为分割符号
        String nameError = validateName(proc, true, false);
        if (nameError != null && !"system".equals(proc)) {
           return null;
        }
        return proc.intern();
    }

    private static String validateName(String name, boolean requireSeparator, boolean requireFilename) {
        final int N = name.length();
        boolean hasSep = false;
        boolean front = true;
        for (int i=0; i<N; i++) {
            final char c = name.charAt(i);
            if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
                front = false;
                continue;
            }
            if (!front) {
                if ((c >= '0' && c <= '9') || c == '_') {
 continue;
                }
            }
            //字符'.'作为分割符号
            if (c == '.') {
                hasSep = true;
                front = true;
                continue;
            }
            return "bad character '" + c + "'";
        }
        if (requireFilename && !FileUtils.isValidExtFilename(name)) {
            return "Invalid filename";
        }
        return hasSep || !requireSeparator
                ? null : "must have at least one '.' separator";
    }
}
看完上面的源码.很显然对于android:process属性值不以”:“开头的进程名必须至少包含“.”字符。

相关文章

网友评论

      本文标题:android中清单文件属性android:process介绍

      本文链接:https://www.haomeiwen.com/subject/asevxktx.html