예제 #1
0
        /// <summary>
        /// 合并SDK初始化代码
        /// </summary>
        /// <param name="type"></param>
        public new void InsertSmali(SmaliInsertType type, string insert_activity, string insert_application)
        {
            base.InsertSmali(type, insert_activity, insert_application);
            //
            Encoding enc = null;

            switch (type)
            {
                case SmaliInsertType.InsertSmali:
                    {
                        string MainActivity = string.Empty;
                        if (insert_activity != string.Empty)
                            MainActivity = insert_activity;
                        else
                            MainActivity = m_apkinfo.settings.MainActivity;
                        MainActivity = m_apkinfo.in_smali + @"\" + MainActivity.Replace(@".", @"\") + ".smali";
                        enc = TxtFileEncoder.GetEncoding(MainActivity);
                        string MainActivityContent = File.ReadAllText(MainActivity, enc);

                        string insert_smali = string.Empty;
                        bool ret = false;
                        //插入onPause代码
                        insert_smali = "invoke-static {p0}, Lcom/umeng/analytics/MobclickAgent;->onPause(Landroid/content/Context;)V";
                        ret = shell_utils.insert_smali_code(ref MainActivityContent,
                            SmaliInsertFunctionType.func_pos_onPause,
                            shell_env.insert_smali_pos_return,
                            insert_smali,
                            InsertPosType.insert_before);
                        if (!ret)
                        {
                            shell_utils.insert_smali_function(ref MainActivityContent, shell_env.insert_smali_function_dict[SmaliInsertFunctionType.func_pos_onPause], insert_smali);
                        }
                        //插入onResume代码
                        insert_smali = "invoke-static {p0}, Lcom/umeng/analytics/MobclickAgent;->onResume(Landroid/content/Context;)V";
                        ret = shell_utils.insert_smali_code(ref MainActivityContent,
                            SmaliInsertFunctionType.func_pos_onResume,
                            shell_env.insert_smali_pos_return,
                            insert_smali,
                            InsertPosType.insert_before);
                        if (!ret)
                        {
                            shell_utils.insert_smali_function(ref MainActivityContent, shell_env.insert_smali_function_dict[SmaliInsertFunctionType.func_pos_onResume], insert_smali);
                        }
                        File.WriteAllText(MainActivity, MainActivityContent, enc);
                    }
                    break;
                case SmaliInsertType.Inheritance:
                    {

                    }
                    break;
                case SmaliInsertType.Boot:
                    {

                    }
                    break;
                default:
                    break;
            }
        }
예제 #2
0
        public new void InsertSmali(SmaliInsertType type, string insert_activity, string insert_application)
        {
            base.InsertSmali(type,insert_activity,insert_application);

            Encoding enc = null;
            //
            switch (type)
            {
                case SmaliInsertType.InsertSmali:
                    {
                        string MainActivity = string.Empty;
                        if (insert_activity != string.Empty)
                            MainActivity = insert_activity;
                        else
                            MainActivity = m_apkinfo.settings.MainActivity;
                        MainActivity = m_apkinfo.in_smali + @"\" + MainActivity.Replace(@".", @"\") + ".smali";
                        enc = TxtFileEncoder.GetEncoding(MainActivity);
                        string MainActivityContent = File.ReadAllText(MainActivity, enc);

                        string insert_smali = string.Empty;
                        bool ret = false;
                        //插入onCreate代码
                        insert_smali = "invoke-static {p0}, Lcom/sdk_preload/init_sdk_umeng_push;->init(Landroid/content/Context;)V";
                        ret = shell_utils.insert_smali_code(ref MainActivityContent,
                            SmaliInsertFunctionType.func_pos_onCreate,
                            shell_env.insert_smali_pos_return,
                            insert_smali,
                            InsertPosType.insert_before);
                        if (!ret)
                        {
                            shell_utils.insert_smali_function(ref MainActivityContent, shell_env.insert_smali_function_dict[SmaliInsertFunctionType.func_pos_onCreate], insert_smali);
                        }
                        File.WriteAllText(MainActivity, MainActivityContent, enc);

                        //插入Application.smali代码
                        XmlDocument apk_doc = new XmlDocument();
                        apk_doc.Load(m_apkinfo.AndroidManifestPath);
                        XmlElement apk_application_node = (XmlElement)apk_doc.DocumentElement.SelectSingleNode("/manifest/application");
                        if (apk_application_node.Attributes["android:name"] != null)
                        {
                            string application_smali = apk_application_node.Attributes["android:name"].Value;
                            if (application_smali[0] == '.')
                            {
                                application_smali = m_apkinfo.settings.PackageName + application_smali;
                            }
                            string application_smali_path = m_apkinfo.in_smali + @"\" + application_smali.Replace(".", "\\") + ".smali";
                            if (File.Exists(application_smali_path))
                            {
                                enc = TxtFileEncoder.GetEncoding(application_smali_path);
                                string application_smali_content = File.ReadAllText(application_smali_path, enc);
                                insert_smali = "invoke-static {p0}, Lcom/um/util/Util;->initForApp(Landroid/content/Context;)V";

                                ret = shell_utils.insert_smali_code(ref application_smali_content,
                                    SmaliInsertFunctionType.func_pos_onCreate_app,
                                    shell_env.insert_smali_pos_return,
                                    insert_smali,
                                    InsertPosType.insert_before);
                                if (!ret)
                                {
                                    shell_utils.insert_smali_function(ref application_smali_content, shell_env.insert_smali_function_dict[SmaliInsertFunctionType.func_pos_onCreate_app], insert_smali);
                                }
                                File.WriteAllText(application_smali_path, application_smali_content, enc);
                            }
                        }
                        else {
                            //
                            XmlDocument sdk_doc = new XmlDocument();
                            sdk_doc.Load(m_sdkinfo.AndroidManifestPath);
                            XmlElement sdk_application_node = (XmlElement)sdk_doc.DocumentElement.SelectSingleNode("/manifest/application");
                            XmlAttribute application_name_attr = sdk_application_node.Attributes["android:name"];
                            apk_application_node.Attributes.Append((XmlAttribute)apk_doc.ImportNode(application_name_attr,true));
                            apk_doc.Save(m_apkinfo.AndroidManifestPath);
                        }
                    }
                    break;
                case SmaliInsertType.Inheritance:
                    {

                    }
                    break;
                case SmaliInsertType.Boot:
                    {

                    }
                    break;
                default:
                    break;
            }
        }
예제 #3
0
파일: ShellSdk.cs 프로젝트: baiziyi008/test
 /// <summary>
 /// 植入smali代码
 /// </summary>
 /// <param name="type"></param>
 public void InsertSmali(SmaliInsertType type,string insert_activity,string insert_application)
 {
 }