public static void UpdateManifest()
    {
        if (!GoogleMobileAdSettings.Instance.KeepManifestClean)
        {
            return;
        }

        AN_ManifestManager.Refresh();

        AN_ManifestTemplate    Manifest         = AN_ManifestManager.GetManifest();
        AN_ApplicationTemplate application      = Manifest.ApplicationTemplate;
        AN_ActivityTemplate    launcherActivity = application.GetLauncherActivity();

        AN_ActivityTemplate AdActivity = application.GetOrCreateActivityWithName("com.google.android.gms.ads.AdActivity");

        AdActivity.SetValue("android:configChanges", "keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize");


        if (launcherActivity != null)
        {
            AN_PropertyTemplate ForwardNativeEventsToDalvik = launcherActivity.GetOrCreatePropertyWithName("meta-data", "unityplayer.ForwardNativeEventsToDalvik");
            ForwardNativeEventsToDalvik.SetValue("android:value", "true");
        }



        AN_PropertyTemplate games_version = application.GetOrCreatePropertyWithName("meta-data", "com.google.android.gms.version");

        games_version.SetValue("android:value", GoogleMobileAdSettings.PLAY_SERVICE_VERSION);


        AN_ManifestManager.SaveManifest();
    }
Пример #2
0
    void OnGUI()
    {
        GUILayout.Label("Android Manifest Manager", EditorStyles.boldLabel);

        if (!AN_ManifestManager.HasManifest)
        {
            GUILayout.BeginHorizontal();
            EditorGUILayout.Space();
            GUILayout.Label("You have NO AndroidManifest file in your project!", GUILayout.Width(300.0f));
            EditorGUILayout.Space();
            GUILayout.EndHorizontal();

            EditorGUILayout.Space();
            GUILayout.BeginHorizontal();
            EditorGUILayout.Space();
            if (GUILayout.Button("Create Default Manifest", new GUILayoutOption[] { GUILayout.Width(200.0f), GUILayout.Height(50.0f) }))
            {
                AN_ManifestManager.CreateDefaultManifest();
            }
            EditorGUILayout.Space();
            GUILayout.EndHorizontal();
        }
        else
        {
            string[] toolbarButtons = new string[] { "Manifest", "Application", "Permissions" };
            toolbarButtonIndex = GUILayout.Toolbar(toolbarButtonIndex, toolbarButtons, new GUILayoutOption[] { GUILayout.Height(30.0f) });

            switch (toolbarButtons[toolbarButtonIndex])
            {
            case "Manifest": {
                AN_ManifestTemplate manifest = AN_ManifestManager.GetManifest();

                if (manifest != null)
                {
                    GUILayout.Label("Values", EditorStyles.boldLabel);
                    foreach (string key in manifest.Values.Keys)
                    {
                        EditorGUILayout.BeginHorizontal();

                        GUILayout.Label(key);
                        if (key.Equals("xmlns:android") ||
                            key.Equals("android:installLocation") ||
                            key.Equals("package") ||
                            key.Equals("android:versionName") ||
                            key.Equals("android:versionCode") ||
                            key.Equals("android:theme"))
                        {
                            GUI.enabled = false;
                            GUILayout.TextField(AN_ManifestManager.GetManifest().Values[key], GUILayout.Width(300.0f));
                        }
                        else
                        {
                            GUI.enabled = true;

                            string input = AN_ManifestManager.GetManifest().Values[key];
                            EditorGUI.BeginChangeCheck();
                            input = GUILayout.TextField(AN_ManifestManager.GetManifest().Values[key], GUILayout.Width(276.0f));
                            if (EditorGUI.EndChangeCheck())
                            {
                                AN_ManifestManager.GetManifest().SetValue(key, input);
                                return;
                            }

                            if (GUILayout.Button("X", GUILayout.Width(20.0f)))
                            {
                                AN_ManifestManager.GetManifest().RemoveValue(key);
                                return;
                            }
                        }
                        GUI.enabled = true;
                        EditorGUILayout.EndHorizontal();
                    }

                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.Space();
                    if (GUILayout.Button("Add Value", GUILayout.Width(100.0f)))
                    {
                        AddValueDialog(AN_ManifestManager.GetManifest());
                    }
                    EditorGUILayout.Space();
                    EditorGUILayout.EndHorizontal();

                    GUILayout.Label("Properties", EditorStyles.boldLabel);
                    DrawProperties(AN_ManifestManager.GetManifest());

                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.Space();
                    if (GUILayout.Button("Add Property", GUILayout.Width(100.0f)))
                    {
                        AddPropertyDialog(AN_ManifestManager.GetManifest());
                    }
                    EditorGUILayout.Space();
                    EditorGUILayout.EndHorizontal();
                    EditorGUILayout.Space();

                    EditorGUILayout.Space();
                    if (GUILayout.Button("Save Manifest", GUILayout.Height(22.0f)))
                    {
                        AN_ManifestManager.SaveManifest();
                    }
                }
                else
                {
                    EditorGUILayout.HelpBox("Selected build platform DOESN'T support AndroidManifest.xml file", MessageType.Info);
                }
            } break;

            case "Application": {
                AN_ManifestTemplate manifest = AN_ManifestManager.GetManifest();

                if (manifest != null)
                {
                    scrollPos = EditorGUILayout.BeginScrollView(scrollPos, GUILayout.Width(position.width), GUILayout.Height(position.height - 50f));

                    GUILayout.Label("Values", EditorStyles.boldLabel);
                    foreach (string key in manifest.ApplicationTemplate.Values.Keys)
                    {
                        EditorGUILayout.BeginHorizontal();

                        GUILayout.Label(key);

                        string input = AN_ManifestManager.GetManifest().ApplicationTemplate.Values[key];
                        EditorGUI.BeginChangeCheck();
                        input = GUILayout.TextField(AN_ManifestManager.GetManifest().ApplicationTemplate.Values[key], GUILayout.Width(200.0f));
                        if (EditorGUI.EndChangeCheck())
                        {
                            AN_ManifestManager.GetManifest().ApplicationTemplate.SetValue(key, input);
                            return;
                        }

                        if (GUILayout.Button("X", GUILayout.Width(20.0f)))
                        {
                            AN_ManifestManager.GetManifest().ApplicationTemplate.RemoveValue(key);
                            return;
                        }

                        EditorGUILayout.EndHorizontal();
                    }

                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.Space();
                    if (GUILayout.Button("Add Value", GUILayout.Width(100.0f)))
                    {
                        AddValueDialog(AN_ManifestManager.GetManifest().ApplicationTemplate);
                    }
                    EditorGUILayout.Space();
                    EditorGUILayout.EndHorizontal();

                    GUILayout.Label("Activities", EditorStyles.boldLabel);

                    int launcherActivities = 0;
                    foreach (int id in AN_ManifestManager.GetManifest().ApplicationTemplate.Activities.Keys)
                    {
                        AN_ActivityTemplate activity = AN_ManifestManager.GetManifest().ApplicationTemplate.Activities[id];

                        if (activity.IsLauncher)
                        {
                            launcherActivities++;
                        }

                        EditorGUILayout.BeginVertical(GUI.skin.box);
                        EditorGUILayout.BeginHorizontal();
                        activity.IsOpen = EditorGUILayout.Foldout(activity.IsOpen, activity.Name);
                        if (GUILayout.Button("X", GUILayout.Width(20.0f)))
                        {
                            AN_ManifestManager.GetManifest().ApplicationTemplate.RemoveActivity(activity);
                            return;
                        }
                        EditorGUILayout.EndHorizontal();

                        if (activity.IsOpen)
                        {
                            EditorGUILayout.BeginVertical();

                            bool isLauncher = activity.IsLauncher;
                            EditorGUI.BeginChangeCheck();
                            isLauncher = EditorGUILayout.Toggle("Is Launcher", activity.IsLauncher);
                            if (EditorGUI.EndChangeCheck())
                            {
                                activity.SetAsLauncher(isLauncher);
                            }

                            foreach (string k in activity.Values.Keys)
                            {
                                EditorGUILayout.BeginHorizontal();

                                GUILayout.Label(k);
                                EditorGUILayout.Space();

                                string input = activity.Values[k];
                                EditorGUI.BeginChangeCheck();

                                if (k.Equals("android:name"))
                                {
                                    input = GUILayout.TextField(activity.Values[k], GUILayout.Width(224.0f));
                                }
                                else
                                {
                                    input = GUILayout.TextField(activity.Values[k], GUILayout.Width(200.0f));
                                }

                                if (EditorGUI.EndChangeCheck())
                                {
                                    activity.SetValue(k, input);
                                    return;
                                }

                                if (!k.Equals("android:name"))
                                {
                                    if (GUILayout.Button("X", GUILayout.Width(20.0f)))
                                    {
                                        activity.RemoveValue(k);
                                        return;
                                    }
                                }

                                EditorGUILayout.EndHorizontal();
                                EditorGUILayout.Space();
                            }

                            DrawProperties(activity);

                            EditorGUILayout.BeginHorizontal();
                            EditorGUILayout.Space();
                            if (GUILayout.Button("Add Value", GUILayout.Width(100.0f)))
                            {
                                AddValueDialog(activity);
                            }
                            if (GUILayout.Button("Add Property", GUILayout.Width(100.0f)))
                            {
                                AddPropertyDialog(activity);
                            }
                            EditorGUILayout.Space();
                            EditorGUILayout.EndHorizontal();
                            EditorGUILayout.Space();

                            EditorGUILayout.EndVertical();
                        }
                        EditorGUILayout.EndVertical();
                    }

                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.Space();
                    if (GUILayout.Button("Add Activity", GUILayout.Width(100.0f)))
                    {
                        AddPermissionDialog dlg = EditorWindow.CreateInstance <AddPermissionDialog>();
                        dlg.onClose    += OnPermissionDlgClose;
                        dlg.onAddClick += OnAddActivityClick;

                                                #if UNITY_5 && !UNITY_5_0
                        dlg.titleContent.text = "Add Activity";
                                                #else
                        dlg.title = "Add Activity";
                                                #endif

                        dlg.ShowAuxWindow();
                    }
                    EditorGUILayout.Space();
                    EditorGUILayout.EndHorizontal();

                    if (launcherActivities > 1)
                    {
                        EditorGUILayout.HelpBox("There is MORE THAN ONE Launcher Activity in Manifest", MessageType.Warning);
                    }
                    else if (launcherActivities < 1)
                    {
                        EditorGUILayout.HelpBox("There is NO Launcher Activities in Manifest", MessageType.Warning);
                    }

                    GUILayout.Label("Properties", EditorStyles.boldLabel);
                    DrawProperties(AN_ManifestManager.GetManifest().ApplicationTemplate);

                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.Space();
                    if (GUILayout.Button("Add Property", GUILayout.Width(100.0f)))
                    {
                        AddPropertyDialog(AN_ManifestManager.GetManifest().ApplicationTemplate);
                    }
                    EditorGUILayout.Space();
                    EditorGUILayout.EndHorizontal();

                    EditorGUILayout.Space();
                    EditorGUILayout.EndScrollView();
                }
                else
                {
                    EditorGUILayout.HelpBox("Selected build platform DOESN'T support AndroidManifest.xml file", MessageType.Info);
                }
            } break;

            case "Permissions": {
                AN_ManifestTemplate manifest = AN_ManifestManager.GetManifest();

                if (manifest != null)
                {
                    scrollPos = EditorGUILayout.BeginScrollView(scrollPos, GUILayout.Width(position.width), GUILayout.Height(position.height - 50f));
                    EditorGUILayout.BeginVertical();

                    foreach (AN_PropertyTemplate permission in AN_ManifestManager.GetManifest().Permissions)
                    {
                        EditorGUILayout.BeginHorizontal(GUI.skin.box);
                        EditorGUILayout.LabelField(permission.Values["android:name"]);
                        if (GUILayout.Button("X", GUILayout.Width(20.0f)))
                        {
                            AN_ManifestManager.GetManifest().RemovePermission(permission);
                            return;
                        }
                        EditorGUILayout.EndHorizontal();
                    }

                    EditorGUILayout.BeginHorizontal();
                    if (GUILayout.Button("Add Android Permission"))
                    {
                        GenericMenu permissionsMenu = new GenericMenu();
                        foreach (string pStr in PermissionsStrings)
                        {
                            permissionsMenu.AddItem(new GUIContent(pStr), false, SelectPermission, pStr);
                        }
                        permissionsMenu.ShowAsContext();
                    }

                    if (GUILayout.Button("Add Other Permission"))
                    {
                        AddPermissionDialog dlg = EditorWindow.CreateInstance <AddPermissionDialog>();
                        dlg.onClose    += OnPermissionDlgClose;
                        dlg.onAddClick += OnAddPermissionClick;

                                                #if UNITY_5 && !UNITY_5_0
                        dlg.titleContent.text = "Add Permission";
                                                #else
                        dlg.title = "Add Permission";
                                                #endif


                        dlg.ShowAuxWindow();
                    }
                    EditorGUILayout.EndHorizontal();

                    EditorGUILayout.Space();
                    EditorGUILayout.EndVertical();
                    EditorGUILayout.EndScrollView();
                }
                else
                {
                    EditorGUILayout.HelpBox("Selected build platform DOESN'T support AndroidManifest.xml file", MessageType.Info);
                }
            } break;

            default: break;
            }


            AboutGUI();
        }
    }
    public static void UpdateManifest()
    {
        if (!SocialPlatfromSettings.Instance.KeepManifestClean)
        {
            return;
        }

        AN_ManifestManager.Refresh();

        AN_ManifestTemplate    Manifest         = AN_ManifestManager.GetManifest();
        AN_ApplicationTemplate application      = Manifest.ApplicationTemplate;
        AN_ActivityTemplate    launcherActivity = application.GetLauncherActivity();

        AN_ActivityTemplate AndroidNativeProxy = application.GetOrCreateActivityWithName("com.androidnative.AndroidNativeProxy");

        AndroidNativeProxy.SetValue("android:launchMode", "singleTask");
        AndroidNativeProxy.SetValue("android:label", "@string/app_name");
        AndroidNativeProxy.SetValue("android:configChanges", "fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen");
        AndroidNativeProxy.SetValue("android:theme", "@android:style/Theme.Translucent.NoTitleBar");

        // Remove VIEW intent filter from AndroidNativeProxy activity
        if (AndroidNativeProxy != null)
        {
            AN_PropertyTemplate intent_filter = AndroidNativeProxy.GetOrCreateIntentFilterWithName("android.intent.action.VIEW");
            AndroidNativeProxy.RemoveProperty(intent_filter);
        }

        AN_ActivityTemplate SocialProxyActivity = application.GetOrCreateActivityWithName("com.androidnative.features.social.common.SocialProxyActivity");

        SocialProxyActivity.SetValue("android:launchMode", "singleTask");
        SocialProxyActivity.SetValue("android:label", "@string/app_name");
        SocialProxyActivity.SetValue("android:configChanges", "fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen");
        SocialProxyActivity.SetValue("android:theme", "@android:style/Theme.Translucent.NoTitleBar");

        if (launcherActivity.Name == "com.androidnative.AndroidNativeBridge")
        {
            launcherActivity.SetName("com.unity3d.player.UnityPlayerNativeActivity");
        }


        ////////////////////////
        //TwitterAPI
        ////////////////////////


        foreach (KeyValuePair <int, AN_ActivityTemplate> entry in application.Activities)
        {
            //TODO get intents array
            AN_ActivityTemplate act    = entry.Value;
            AN_PropertyTemplate intent = act.GetIntentFilterWithName("android.intent.action.VIEW");
            if (intent != null)
            {
                AN_PropertyTemplate data = intent.GetOrCreatePropertyWithTag("data");
                if (data.GetValue("android:scheme") == "oauth")
                {
                    act.RemoveProperty(intent);
                }
            }
        }

        if (SocialPlatfromSettings.Instance.TwitterAPI)
        {
            if (SocialProxyActivity != null)
            {
                AN_PropertyTemplate intent_filter = SocialProxyActivity.GetOrCreateIntentFilterWithName("android.intent.action.VIEW");
                intent_filter.GetOrCreatePropertyWithName("category", "android.intent.category.DEFAULT");
                intent_filter.GetOrCreatePropertyWithName("category", "android.intent.category.BROWSABLE");
                AN_PropertyTemplate data = intent_filter.GetOrCreatePropertyWithTag("data");
                data.SetValue("android:scheme", "oauth");
                data.SetValue("android:host", PlayerSettings.bundleIdentifier);
            }
        }
        else
        {
            if (SocialProxyActivity != null)
            {
                AN_PropertyTemplate intent_filter = SocialProxyActivity.GetOrCreateIntentFilterWithName("android.intent.action.VIEW");
                SocialProxyActivity.RemoveProperty(intent_filter);
            }
        }

        ////////////////////////
        //FB API
        ////////////////////////
        AN_PropertyTemplate ApplicationId_meta         = application.GetOrCreatePropertyWithName("meta-data", "com.facebook.sdk.ApplicationId");
        AN_ActivityTemplate LoginActivity              = application.GetOrCreateActivityWithName("com.facebook.LoginActivity");
        AN_ActivityTemplate FBUnityLoginActivity       = application.GetOrCreateActivityWithName("com.facebook.unity.FBUnityLoginActivity");
        AN_ActivityTemplate FBUnityDeepLinkingActivity = application.GetOrCreateActivityWithName("com.facebook.unity.FBUnityDeepLinkingActivity");
        AN_ActivityTemplate FBUnityDialogsActivity     = application.GetOrCreateActivityWithName("com.facebook.unity.FBUnityDialogsActivity");


        if (IsFacebookInstalled)
        {
            ApplicationId_meta.SetValue("android:value", "\\ " + FBSettings.AppId);

            LoginActivity.SetValue("android:label", "@string/app_name");
            LoginActivity.SetValue("android:theme", "@android:style/Theme.Translucent.NoTitleBar");
            LoginActivity.SetValue("android:configChanges", "keyboardHidden|orientation");


            FBUnityLoginActivity.SetValue("android:theme", "@android:style/Theme.Translucent.NoTitleBar.Fullscreen");
            FBUnityLoginActivity.SetValue("android:configChanges", "fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen");

            FBUnityDialogsActivity.SetValue("android:theme", "@android:style/Theme.Translucent.NoTitleBar.Fullscreen");
            FBUnityDialogsActivity.SetValue("android:configChanges", "fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen");

            FBUnityDeepLinkingActivity.SetValue("android:exported", "true");
        }
        else
        {
            application.RemoveProperty(ApplicationId_meta);
            application.RemoveActivity(LoginActivity);
            application.RemoveActivity(FBUnityLoginActivity);
            application.RemoveActivity(FBUnityDeepLinkingActivity);
            application.RemoveActivity(FBUnityDialogsActivity);
        }


        ////////////////////////
        //NativeSharingAPI
        ////////////////////////
        AN_PropertyTemplate provider = application.GetOrCreatePropertyWithName("provider", "android.support.v4.content.FileProvider");

        if (SocialPlatfromSettings.Instance.NativeSharingAPI)
        {
#if !(UNITY_4_0 || UNITY_4_0_1 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_5 || UNITY_4_6)
            //Remove FileProvider description from AndroidManifest.xml in Unity 5
            application.RemoveProperty(provider);
#else
            provider.SetValue("android:authorities", PlayerSettings.bundleIdentifier + ".fileprovider");
            provider.SetValue("android:exported", "false");
            provider.SetValue("android:grantUriPermissions", "true");
            AN_PropertyTemplate provider_meta = provider.GetOrCreatePropertyWithName("meta-data", "android.support.FILE_PROVIDER_PATHS");
            provider_meta.SetValue("android:resource", "@xml/file_paths");
#endif
        }
        else
        {
            application.RemoveProperty(provider);
        }


        List <string> permissions = GetRequiredPermissions();
        foreach (string p in permissions)
        {
            Manifest.AddPermission(p);
        }

        AN_ManifestManager.SaveManifest();
    }
Пример #4
0
    private static void ReadManifest(string manifestPath)
    {
#if !(UNITY_WP8 || UNITY_METRO)
        //Read XML file
        _manifestTemplate = new AN_ManifestTemplate();

        XmlDocument doc = new XmlDocument();
        doc.Load(Application.dataPath + manifestPath);
        XmlNode rootNode = doc.DocumentElement;

        foreach (XmlAttribute attr in rootNode.Attributes)
        {
            _manifestTemplate.SetValue(attr.Name, attr.Value);
        }

        foreach (XmlNode childNode in rootNode.ChildNodes)
        {
            if (!childNode.Name.Equals("application") &&
                !childNode.Name.Equals("uses-permission") &&
                !childNode.Name.Equals("#comment"))
            {
                _manifestTemplate.AddProperty(childNode.Name, ParseProperty(childNode));
            }
        }

        XmlNode applicationNode = null;
        foreach (XmlNode childNode in rootNode.ChildNodes)
        {
            if (childNode.Name.Equals("application"))
            {
                applicationNode = childNode;
                break;
            }
        }

        foreach (XmlAttribute attr in applicationNode.Attributes)
        {
            _manifestTemplate.ApplicationTemplate.SetValue(attr.Name, attr.Value);
        }
        foreach (XmlNode childNode in applicationNode.ChildNodes)
        {
            if (!childNode.Name.Equals("#comment") &&
                !childNode.Name.Equals("activity"))
            {
                _manifestTemplate.ApplicationTemplate.AddProperty(childNode.Name, ParseProperty(childNode));
            }
        }

        foreach (XmlNode childNode in applicationNode.ChildNodes)
        {
            if (childNode.Name.Equals("activity") &&
                !childNode.Name.Equals("#comment"))
            {
                string activityName = "";
                if (childNode.Attributes["android:name"] != null)
                {
                    activityName = childNode.Attributes["android:name"].Value;
                }
                else
                {
                    Debug.LogWarning("Android Manifest contains activity tag without android:name attribute.");
                }

                XmlNode launcher   = null;
                bool    isLauncher = false;
                foreach (XmlNode actNode in childNode.ChildNodes)
                {
                    if (actNode.Name.Equals("intent-filter"))
                    {
                        foreach (XmlNode intentNode in actNode.ChildNodes)
                        {
                            if (intentNode.Name.Equals("category"))
                            {
                                if (intentNode.Attributes["android:name"].Value.Equals("android.intent.category.LAUNCHER"))
                                {
                                    isLauncher = true;
                                    launcher   = actNode;
                                }
                            }
                        }
                    }
                }

                AN_ActivityTemplate activity = new AN_ActivityTemplate(isLauncher, activityName);
                foreach (XmlAttribute attr in childNode.Attributes)
                {
                    activity.SetValue(attr.Name, attr.Value);
                }

                foreach (XmlNode actNode in childNode.ChildNodes)
                {
                    if (!actNode.Name.Equals("#comment"))
                    {
                        if (actNode != launcher)
                        {
                            activity.AddProperty(actNode.Name, ParseProperty(actNode));
                        }
                    }
                }

                _manifestTemplate.ApplicationTemplate.AddActivity(activity);
            }
        }

        //Load Manifest Permissions
        foreach (XmlNode node in rootNode.ChildNodes)
        {
            if (node.Name.Equals("uses-permission"))
            {
                AN_PropertyTemplate permission = new AN_PropertyTemplate("uses-permission");
                permission.SetValue("android:name", node.Attributes["android:name"].Value);
                _manifestTemplate.AddPermission(permission);
            }
        }
#endif
    }
Пример #5
0
    public static void UpdateManifest()
    {
        if (!SocialPlatfromSettings.Instance.KeepManifestClean)
        {
            return;
        }

        AN_ManifestManager.Refresh();

        AN_ManifestTemplate    Manifest         = AN_ManifestManager.GetManifest();
        AN_ApplicationTemplate application      = Manifest.ApplicationTemplate;
        AN_ActivityTemplate    launcherActivity = application.GetLauncherActivity();


        ////////////////////////
        //TwitterAPI
        ////////////////////////
        foreach (KeyValuePair <int, AN_ActivityTemplate> entry in application.Activities)
        {
            //TODO get intents array
            AN_ActivityTemplate act    = entry.Value;
            AN_PropertyTemplate intent = act.GetIntentFilterWithName("android.intent.action.VIEW");
            if (intent != null)
            {
                AN_PropertyTemplate data = intent.GetPropertyWithTag("data");
                if (data.GetValue("android:scheme") == "oauth")
                {
                    act.RemoveProperty(intent);
                }
            }
        }

        if (SocialPlatfromSettings.Instance.TwitterAPI)
        {
            if (launcherActivity != null)
            {
                AN_PropertyTemplate intent_filter = launcherActivity.GetOrCreateIntentFilterWithName("android.intent.action.VIEW");
                intent_filter.GetOrCreatePropertyWithName("category", "android.intent.category.DEFAULT");
                intent_filter.GetOrCreatePropertyWithName("category", "android.intent.category.BROWSABLE");
                AN_PropertyTemplate data = intent_filter.GetOrCreatePropertyWithTag("data");
                data.SetValue("android:scheme", "oauth");
                data.SetValue("android:host", PlayerSettings.bundleIdentifier);
            }
        }
        else
        {
            if (launcherActivity != null)
            {
                AN_PropertyTemplate intent_filter = launcherActivity.GetOrCreateIntentFilterWithName("android.intent.action.VIEW");
                launcherActivity.RemoveProperty(intent_filter);
            }
        }

        ////////////////////////
        //FB API
        ////////////////////////
        AN_PropertyTemplate ApplicationId_meta         = application.GetOrCreatePropertyWithName("meta-data", "com.facebook.sdk.ApplicationId");
        AN_ActivityTemplate LoginActivity              = application.GetOrCreateActivityWithName("com.facebook.LoginActivity");
        AN_ActivityTemplate FBUnityLoginActivity       = application.GetOrCreateActivityWithName("com.facebook.unity.FBUnityLoginActivity");
        AN_ActivityTemplate FBUnityDeepLinkingActivity = application.GetOrCreateActivityWithName("com.facebook.unity.FBUnityDeepLinkingActivity");

        if (IsFacebookInstalled)
        {
            ApplicationId_meta.Value = "fb_app_id";
            LoginActivity.SetValue("android:label", "@string/app_name");
            LoginActivity.SetValue("android:theme", "@android:style/Theme.Translucent.NoTitleBar");
            FBUnityLoginActivity.SetValue("android:theme", "@android:style/Theme.Translucent.NoTitleBar.Fullscreen");
            FBUnityDeepLinkingActivity.SetValue("android:exported", "true");
        }
        else
        {
            application.RemoveProperty(ApplicationId_meta);
            application.RemoveActivity(LoginActivity);
            application.RemoveActivity(FBUnityLoginActivity);
            application.RemoveActivity(FBUnityDeepLinkingActivity);
        }


        ////////////////////////
        //NativeSharingAPI
        ////////////////////////
        AN_PropertyTemplate provider = application.GetOrCreatePropertyWithName("provider", "android.support.v4.content.FileProvider");

        if (SocialPlatfromSettings.Instance.NativeSharingAPI)
        {
            provider.SetValue("android:authorities", PlayerSettings.bundleIdentifier + ".fileprovider");
            provider.SetValue("android:exported", "false");
            provider.SetValue("android:grantUriPermissions", "true");
            AN_PropertyTemplate provider_meta = provider.GetOrCreatePropertyWithName("meta-data", "android.support.FILE_PROVIDER_PATHS");
            provider_meta.SetValue("android:resource", "@xml/file_paths");
        }
        else
        {
            application.RemoveProperty(provider);
        }



        List <string> permissions = GetRequiredPermissions();

        foreach (string p in permissions)
        {
            Manifest.AddPermission(p);
        }

        AN_ManifestManager.SaveManifest();
    }
Пример #6
0
    public static void UpdateManifest()
    {
        if (!AndroidNativeSettings.Instance.KeepManifestClean)
        {
            return;
        }

        AN_ManifestManager.Refresh();

        int UpdateId = 0;
        AN_ManifestTemplate    Manifest         = AN_ManifestManager.GetManifest();
        AN_ApplicationTemplate application      = Manifest.ApplicationTemplate;
        AN_ActivityTemplate    launcherActivity = application.GetLauncherActivity();



        ////////////////////////
        //Google Play Service API
        ////////////////////////
        AN_PropertyTemplate games_version = application.GetOrCreatePropertyWithName("meta-data", "com.google.android.gms.version");

        if (AndroidNativeSettings.Instance.EnablePSAPI)
        {
            games_version.SetValue("android:value", "@integer/google_play_services_version");
        }
        else
        {
            application.RemoveProperty(games_version);
        }

        ////////////////////////
        //GooglePlayServicesAPI
        ////////////////////////

        UpdateId++;
        AN_PropertyTemplate games_APP_ID = application.GetOrCreatePropertyWithName("meta-data", "com.google.android.gms.games.APP_ID");

        if (!AndroidNativeSettings.Instance.GooglePlayServicesAPI)
        {
            application.RemoveProperty(games_APP_ID);
        }
        else
        {
            games_APP_ID.SetValue("android:value", "@string/app_id");
        }



        ////////////////////////
        //GoogleCloudSaveAPI
        ////////////////////////
        UpdateId++;
        AN_PropertyTemplate appstate_APP_ID = application.GetOrCreatePropertyWithName("meta-data", "com.google.android.gms.appstate.APP_ID");

        if (AndroidNativeSettings.Instance.GoogleCloudSaveAPI)
        {
            appstate_APP_ID.SetValue("android:value", "@string/app_id");
            AndroidNativeSettings.Instance.EnableAppStateAPI = true;
        }
        else
        {
            AndroidNativeSettings.Instance.EnableAppStateAPI = false;
            application.RemoveProperty(appstate_APP_ID);
        }


        ////////////////////////
        //AnalyticsAPI
        ////////////////////////
        UpdateId++;
        if (AndroidNativeSettings.Instance.AnalyticsAPI)
        {
            //Nothing to do
        }


        ////////////////////////
        //PushNotificationsAPI
        ////////////////////////
        UpdateId++;
        AN_PropertyTemplate GcmBroadcastReceiver   = application.GetOrCreatePropertyWithName("receiver", "com.androidnative.gcm.GcmBroadcastReceiver");
        AN_PropertyTemplate GcmIntentService       = application.GetOrCreatePropertyWithName("service", "com.androidnative.gcm.GcmIntentService");
        AN_PropertyTemplate permission_C2D_MESSAGE = Manifest.GetOrCreatePropertyWithName("permission", "com.example.gcm.permission.C2D_MESSAGE");

        if (AndroidNativeSettings.Instance.PushNotificationsAPI)
        {
            GcmBroadcastReceiver.SetValue("android:permission", "com.google.android.c2dm.permission.SEND");

            AN_PropertyTemplate intent_filter = GcmBroadcastReceiver.GetOrCreateIntentFilterWithName("com.google.android.c2dm.intent.RECEIVE");
            AN_PropertyTemplate category      = intent_filter.GetOrCreatePropertyWithTag("category");
            category.SetValue("android:name", PlayerSettings.bundleIdentifier);

            permission_C2D_MESSAGE.SetValue("android:protectionLevel", "signature");
        }
        else
        {
            application.RemoveProperty(GcmBroadcastReceiver);
            application.RemoveProperty(GcmIntentService);
            Manifest.RemoveProperty(permission_C2D_MESSAGE);
        }



        ////////////////////////
        //GoogleMobileAdAPI
        ////////////////////////
        UpdateId++;
        AN_ActivityTemplate AdActivity = application.GetOrCreateActivityWithName("com.google.android.gms.ads.AdActivity");



        if (AndroidNativeSettings.Instance.GoogleMobileAdAPI)
        {
            if (launcherActivity != null)
            {
                AN_PropertyTemplate ForwardNativeEventsToDalvik = launcherActivity.GetOrCreatePropertyWithName("meta-data", "unityplayer.ForwardNativeEventsToDalvik");
                ForwardNativeEventsToDalvik.SetValue("android:value", "true");
            }

            AdActivity.SetValue("android:configChanges", "keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize");
        }
        else
        {
            application.RemoveActivity(AdActivity);
        }



        ////////////////////////
        //GoogleButtonAPI
        ////////////////////////
        UpdateId++;
        if (AndroidNativeSettings.Instance.GoogleButtonAPI)
        {
            //Nothing to do
        }



        ////////////////////////
        //LocalNotificationsAPI
        ////////////////////////
        AN_PropertyTemplate LocalNotificationReceiver = application.GetOrCreatePropertyWithName("receiver", "com.androidnative.features.notifications.LocalNotificationReceiver");

        if (AndroidNativeSettings.Instance.LocalNotificationsAPI)
        {
        }
        else
        {
            application.RemoveProperty(LocalNotificationReceiver);
        }

        ////////////////////////
        //ImmersiveModeAPI
        ////////////////////////
        if (AndroidNativeSettings.Instance.ImmersiveModeAPI)
        {
            //Nothing to do
        }


        ////////////////////////
        //ApplicationInformationAPI
        ////////////////////////
        if (AndroidNativeSettings.Instance.ApplicationInformationAPI)
        {
            //Nothing to do
        }

        ////////////////////////
        //ExternalAppsAPI
        ////////////////////////
        if (AndroidNativeSettings.Instance.ExternalAppsAPI)
        {
            //Nothing to do
        }


        ////////////////////////
        //PoupsandPreloadersAPI
        ////////////////////////
        if (AndroidNativeSettings.Instance.PoupsandPreloadersAPI)
        {
            //Nothing to do
        }

        ////////////////////////
        //InAppPurchasesAPI
        ////////////////////////
        if (AndroidNativeSettings.Instance.InAppPurchasesAPI)
        {
            //Nothing to do
        }


        ////////////////////////
        //CameraAPI
        ////////////////////////
        if (AndroidNativeSettings.Instance.CameraAPI)
        {
            //Nothing to do
        }


        ////////////////////////
        //GalleryAPI
        ////////////////////////
        if (AndroidNativeSettings.Instance.GalleryAPI)
        {
            //Nothing to do
        }

        List <string> permissions = GetRequiredPermissions();

        foreach (string p in permissions)
        {
            Manifest.AddPermission(p);
        }

        AN_ManifestManager.SaveManifest();

        SocialPlatfromSettingsEditor.UpdateManifest();
    }
Пример #7
0
    private void PluginSetting()
    {
        EditorGUILayout.Space();
        EditorGUILayout.HelpBox("Plugin Settings", MessageType.None);

        AN_ManifestManager.Refresh();
        AN_ManifestTemplate    Manifest    = AN_ManifestManager.GetManifest();
        AN_ApplicationTemplate application = Manifest.ApplicationTemplate;

        AN_ActivityTemplate Launcher = application.GetLauncherActivity();

        if (Launcher == null)
        {
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.HelpBox("No Launcher Activity founded in the Manifest", MessageType.Warning);
            EditorGUILayout.EndHorizontal();
            FixLauncherActivity(application);

            EditorGUILayout.Space();
        }
        else
        {
            if (!Launcher.Name.Equals("com.androidnative.AndroidNativeBridge"))
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.HelpBox("Current Launcher Activity is " + Launcher.Name + ".\n"
                                        + "But AndroidNativeBridge required to be Launcher. Some features may not work.", MessageType.Warning);
                EditorGUILayout.EndHorizontal();
                FixLauncherActivity(application);
                EditorGUILayout.Space();
            }
        }

        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Keep Android Mnifest Clean");

        EditorGUI.BeginChangeCheck();
        AndroidNativeSettings.Instance.KeepManifestClean  = EditorGUILayout.Toggle(AndroidNativeSettings.Instance.KeepManifestClean);
        SocialPlatfromSettings.Instance.KeepManifestClean = AndroidNativeSettings.Instance.KeepManifestClean;
        if (EditorGUI.EndChangeCheck())
        {
            UpdateManifest();
        }

        if (GUILayout.Button("[?]", GUILayout.Width(27)))
        {
            Application.OpenURL("http://goo.gl/syIebl");
        }
        EditorGUILayout.Space();
        EditorGUILayout.Space();

        EditorGUILayout.EndHorizontal();



        AndroidNativeSettings.Instance.ShowAppPermissions = EditorGUILayout.Foldout(AndroidNativeSettings.Instance.ShowAppPermissions, "Application Permissions");
        if (AndroidNativeSettings.Instance.ShowAppPermissions)
        {
            AN_ManifestManager.Refresh();

            //EditorGUI.indentLevel++;
            EditorGUILayout.LabelField("Required By Android Native:", EditorStyles.boldLabel);
            List <string> permissions = GetRequiredPermissions();

            foreach (string p in permissions)
            {
                EditorGUILayout.BeginVertical(GUI.skin.box);
                EditorGUILayout.BeginHorizontal();

                EditorGUILayout.SelectableLabel(p, GUILayout.Height(16));

                EditorGUILayout.EndHorizontal();
                EditorGUILayout.EndVertical();
            }

            EditorGUILayout.Space();

            EditorGUILayout.LabelField("Other Permissions in Manifest:", EditorStyles.boldLabel);
            foreach (AN_PropertyTemplate tpl in AN_ManifestManager.GetManifest().Permissions)
            {
                if (!permissions.Contains(tpl.Name))
                {
                    EditorGUILayout.BeginVertical(GUI.skin.box);
                    EditorGUILayout.BeginHorizontal();

                    EditorGUILayout.SelectableLabel(tpl.Name, GUILayout.Height(16));
                    if (GUILayout.Button("x", GUILayout.Width(20)))
                    {
                        AN_ManifestManager.GetManifest().RemovePermission(tpl);
                        AN_ManifestManager.SaveManifest();
                        return;
                    }

                    EditorGUILayout.EndHorizontal();
                    EditorGUILayout.EndVertical();
                }
            }


            //EditorGUI.indentLevel--;
        }

        AndroidNativeSettings.Instance.ShowPluginSettings = EditorGUILayout.Foldout(AndroidNativeSettings.Instance.ShowPluginSettings, "Android Native Libs");
        if (AndroidNativeSettings.Instance.ShowPluginSettings)
        {
            EditorGUI.indentLevel++;
            EditorGUI.BeginChangeCheck();



            //Native Lib API
            EditorGUILayout.BeginHorizontal();
            settings.ExpandNativeAPI = EditorGUILayout.Foldout(settings.ExpandNativeAPI, "Enable Native Lib");
            SuperSpace();
            GUI.enabled = false;
            EditorGUILayout.Toggle(true);
            GUI.enabled = true;
            EditorGUILayout.EndHorizontal();
            if (settings.ExpandNativeAPI)
            {
                EditorGUI.indentLevel++;


                EditorGUILayout.BeginHorizontal();
                settings.LocalNotificationsAPI = EditorGUILayout.Toggle(AN_API_NAME.LocalNotifications, settings.LocalNotificationsAPI);
                settings.ImmersiveModeAPI      = EditorGUILayout.Toggle(AN_API_NAME.ImmersiveMode, settings.ImmersiveModeAPI);
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.BeginHorizontal();
                settings.ApplicationInformationAPI = EditorGUILayout.Toggle(AN_API_NAME.ApplicationInformation, settings.ApplicationInformationAPI);
                settings.ExternalAppsAPI           = EditorGUILayout.Toggle(AN_API_NAME.RunExternalApp, settings.ExternalAppsAPI);
                EditorGUILayout.EndHorizontal();


                EditorGUILayout.BeginHorizontal();
                settings.PoupsandPreloadersAPI = EditorGUILayout.Toggle(AN_API_NAME.PoupsandPreloaders, settings.PoupsandPreloadersAPI);

                EditorGUILayout.EndHorizontal();

                EditorGUI.indentLevel--;
                EditorGUILayout.Space();
            }



            EditorGUILayout.BeginHorizontal();
            settings.ExpandBillingAPI = EditorGUILayout.Foldout(settings.ExpandBillingAPI, "Enable Billing Lib");
            SuperSpace();
            settings.EnableBillingAPI = EditorGUILayout.Toggle(settings.EnableBillingAPI);

            EditorGUILayout.EndHorizontal();
            if (settings.ExpandBillingAPI)
            {
                EditorGUI.indentLevel++;


                EditorGUILayout.BeginHorizontal();
                settings.InAppPurchasesAPI = EditorGUILayout.Toggle(AN_API_NAME.InAppPurchases, settings.InAppPurchasesAPI);
                EditorGUILayout.EndHorizontal();

                EditorGUI.indentLevel--;
                EditorGUILayout.Space();
            }


            //GOOGLE PLAY API
            EditorGUILayout.BeginHorizontal();
            settings.ExpandPSAPI = EditorGUILayout.Foldout(settings.ExpandPSAPI, "Enable Google Play Lib");
            SuperSpace();

            settings.EnablePSAPI = EditorGUILayout.Toggle(settings.EnablePSAPI);

            EditorGUILayout.EndHorizontal();

            if (settings.ExpandPSAPI)
            {
                EditorGUI.indentLevel++;

                EditorGUILayout.BeginHorizontal();
                settings.GooglePlayServicesAPI         = EditorGUILayout.Toggle(AN_API_NAME.GooglePlayServices, settings.GooglePlayServicesAPI);
                settings.PlayServicesAdvancedSignInAPI = EditorGUILayout.Toggle(AN_API_NAME.GooglePlayServicesAdvancedSignIn, settings.PlayServicesAdvancedSignInAPI);
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.BeginHorizontal();
                settings.PushNotificationsAPI = EditorGUILayout.Toggle(AN_API_NAME.PushNotifications, settings.PushNotificationsAPI);
                settings.GoogleCloudSaveAPI   = EditorGUILayout.Toggle(AN_API_NAME.GoogleCloudSave, settings.GoogleCloudSaveAPI);
                EditorGUILayout.EndHorizontal();


                EditorGUILayout.BeginHorizontal();
                settings.AnalyticsAPI      = EditorGUILayout.Toggle(AN_API_NAME.Analytics, settings.AnalyticsAPI);
                settings.GoogleMobileAdAPI = EditorGUILayout.Toggle(AN_API_NAME.GoogleMobileAd, settings.GoogleMobileAdAPI);
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.BeginHorizontal();
                settings.GoogleButtonAPI = EditorGUILayout.Toggle(AN_API_NAME.GoogleButton, settings.GoogleButtonAPI);
                EditorGUILayout.EndHorizontal();

                EditorGUI.indentLevel--;
                EditorGUILayout.Space();
            }



            EditorGUILayout.BeginHorizontal();
            settings.ExpandSocialAPI = EditorGUILayout.Foldout(settings.ExpandSocialAPI, "Enable Social Lib");
            SuperSpace();


            settings.EnableSocialAPI = EditorGUILayout.Toggle(settings.EnableSocialAPI);
            EditorGUILayout.EndHorizontal();
            if (settings.ExpandSocialAPI)
            {
                EditorGUI.indentLevel++;

                SocialPlatfromSettingsEditor.DrawAPIsList();


                EditorGUI.indentLevel--;
                EditorGUILayout.Space();
            }



            EditorGUILayout.BeginHorizontal();
            settings.ExpandCameraAPI = EditorGUILayout.Foldout(settings.ExpandCameraAPI, "Enable Camera Lib");
            SuperSpace();

            settings.EnableCameraAPI = EditorGUILayout.Toggle(settings.EnableCameraAPI);


            EditorGUILayout.EndHorizontal();
            if (settings.ExpandCameraAPI)
            {
                EditorGUI.indentLevel++;
                EditorGUILayout.BeginHorizontal();
                settings.CameraAPI  = EditorGUILayout.Toggle(AN_API_NAME.CameraAPI, settings.CameraAPI);
                settings.GalleryAPI = EditorGUILayout.Toggle(AN_API_NAME.Gallery, settings.GalleryAPI);
                EditorGUILayout.EndHorizontal();
                EditorGUI.indentLevel--;
                EditorGUILayout.Space();
            }


            EditorGUI.indentLevel--;

            if (EditorGUI.EndChangeCheck())
            {
                UpdateAPIsInstalation();
            }
        }


        Actions();

        EditorGUILayout.Space();
    }
Пример #8
0
	private static void ReadManifest(string manifestPath) {

#if !(UNITY_WP8 || UNITY_METRO)
		//Read XML file
		_manifestTemplate = new AN_ManifestTemplate ();
			
		XmlDocument doc = new XmlDocument ();
		doc.Load (Application.dataPath + manifestPath);
		XmlNode rootNode = doc.DocumentElement;
			
		foreach (XmlAttribute attr in rootNode.Attributes) {				
			_manifestTemplate.SetValue(attr.Name, attr.Value);
		}
			
		foreach (XmlNode childNode in rootNode.ChildNodes) {
			if (!childNode.Name.Equals("application")
			    && !childNode.Name.Equals("uses-permission")
			    && !childNode.Name.Equals("#comment")) {
				_manifestTemplate.AddProperty(childNode.Name, ParseProperty(childNode));
			}
		}
			
		XmlNode applicationNode = null;
		foreach (XmlNode childNode in rootNode.ChildNodes) {
			if (childNode.Name.Equals("application")) {
				applicationNode = childNode;
				break;
			}
		}
			
		foreach (XmlAttribute attr in applicationNode.Attributes) {
			_manifestTemplate.ApplicationTemplate.SetValue(attr.Name, attr.Value);
		}
		foreach (XmlNode childNode in applicationNode.ChildNodes) {
			if(!childNode.Name.Equals("#comment")
			   && !childNode.Name.Equals("activity")) {
				_manifestTemplate.ApplicationTemplate.AddProperty(childNode.Name, ParseProperty(childNode));
			}
		}
			
		foreach (XmlNode childNode in applicationNode.ChildNodes) {
			if(childNode.Name.Equals("activity")
			   && !childNode.Name.Equals("#comment")) {

				string activityName = "";
				if(childNode.Attributes["android:name"] != null) {
					activityName = childNode.Attributes["android:name"].Value;
				} else {
					Debug.LogWarning("Android Manifest contains activity tag without android:name attribute.");
				}
					
				XmlNode launcher = null;
				bool isLauncher = false;
				foreach (XmlNode actNode in childNode.ChildNodes) {
					if (actNode.Name.Equals("intent-filter")) {
						foreach (XmlNode intentNode in actNode.ChildNodes) {
							if (intentNode.Name.Equals("category")) {
								if (intentNode.Attributes["android:name"].Value.Equals("android.intent.category.LAUNCHER")) {
									isLauncher = true;
									launcher = actNode;
								}
							}
						}
					}
				}
					
				AN_ActivityTemplate activity = new AN_ActivityTemplate(isLauncher, activityName);
				foreach (XmlAttribute attr in childNode.Attributes) {
					activity.SetValue(attr.Name, attr.Value);
				}

				foreach (XmlNode actNode in childNode.ChildNodes) {
					if (!actNode.Name.Equals("#comment")) {
						if (actNode != launcher) {
							activity.AddProperty(actNode.Name, ParseProperty(actNode));
						}
					}
				}
					
				_manifestTemplate.ApplicationTemplate.AddActivity(activity);
			}
		}
			
		//Load Manifest Permissions
		foreach (XmlNode node in rootNode.ChildNodes) {
			if (node.Name.Equals("uses-permission")) {
				AN_PropertyTemplate permission = new AN_PropertyTemplate("uses-permission");
				permission.SetValue("android:name", node.Attributes["android:name"].Value);
				_manifestTemplate.AddPermission(permission);
			}
		}
#endif

	}