示例#1
0
        //==========================
        // apk解包打包逻辑封装

        /// <summary>
        /// 若为apk文件,则先行解包
        /// </summary>
        public static String apkUnpack(String apkFile, Apk2Resource.Cmd.Callback call, bool deletPublicXML = false, string UnpackDestDir = "")
        {
            // 若输入的为apk文件,则自动进行解包
            if (Apk2Resource.Apktool.isApkFile(apkFile))
            {
                if (call != null)
                {
                    call("【I】" + Path.GetFileName(apkFile));
                }
                if (call != null)
                {
                    call("【I】apk解包开始...");
                }

                string dir = Apk2Resource.Apktool.unPackage(apkFile, call, deletPublicXML, UnpackDestDir.Equals(""), UnpackDestDir);   // 使用apktool进行apk的解包
                if (dir.Contains("【E】"))
                {
                    return(dir);
                }

                if (call != null)
                {
                    call("【I】apk解包结束!\r\n");
                }
                return(dir);
            }
            else
            {
                return(apkFile);
            }
        }
示例#2
0
        /// <summary>
        /// 对给定的所有apk执行自打包修改
        /// </summary>
        public static void Modify(String[] apks, String sign, Apk2Resource.Cmd.Callback call)
        {
            int index = 0;

            foreach (String apk in apks)
            {
                if (call != null)
                {
                    call("【T】" + "-----------------------------------------------------------");
                }
                if (call != null)
                {
                    call("【T】" + "处理第" + ++index + "个apk,共" + apks.Length + "个");
                }
                if (call != null)
                {
                    call("【T】" + "-----------------------------------------------------------");
                }



                //// 设置修改后的文件名称
                //String Dir = apk.Replace(".apk", "");

                //if (batchSign) Apk2Resource.Apktool.outputAPK_name = Dir.Substring(Dir.LastIndexOf("\\") + 1) + "_b.apk";
                //else Apk2Resource.Apktool.outputAPK_name = Dir.Substring(Dir.LastIndexOf("\\") + 1) + ".apk";

                //unpackPath = apkUnpack(apk, call);                         // apk解包

                // 根据apk路径生成解包路径
                string fileName      = Path.GetFileNameWithoutExtension(apk).Replace("Ltsdk_", "").Replace("ltsdk_", "");
                string path          = Path.GetDirectoryName(apk);
                string UnpackDestDir = path + "\\source配置_" + fileName + "\\combine\\" + fileName;

                unpackPath = apkUnpack(apk, call, true, UnpackDestDir);                         // apk解包


                //// 获取移动计费apk文件路径
                //String chargeApk = getChargeApk(unpackPath, call);
                //if (chargeApk.Equals("")) continue;
                //Modify_Process(chargeApk, unpackPath, call);            // 执行资源修改逻辑
                if (modifyMethod != null)
                {
                    call("【I】执行修改逻辑...");
                    modifyMethod();                                     // 执行指定的处理逻辑
                    call("【I】执行修改逻辑结束\r\n");
                }

                //String newAPK = apkPackage(unpackPath, sign, call);       // apk打包
            }
        }
示例#3
0
        /// <summary>
        /// 执行apk打包逻辑
        /// </summary>
        public static String apkPackage(String apkUnPackageDir, String signFileName0, Apk2Resource.Cmd.Callback call)
        {
            // 重新打包apk,并签名
            if (call != null)
            {
                call("【I】apk打包开始...");
            }
            String result0 = Apk2Resource.Apktool.package(apkUnPackageDir, call);     // 使用apktool进行打包

            if (result0.Contains("【E】"))
            {
                return(result0);
            }

            if (call != null)
            {
                call("【I】apk未签名文件已生成!\r\n");
            }


            String apkNAME = Apk2Resource.Apktool.outputAPK_name;

            List <String> signs = new List <String>();

            if (batchSign)
            {
                signs = Signs;
            }
            else
            {
                signs.Add(signFileName0);
            }

            String apkName = apkUnPackageDir + "..apk"; // 生成的未签名apk

            // 执行批量签名逻辑
            foreach (String signFileName in signs)
            {
                // 生成新的输出名
                int index = apkNAME.LastIndexOf(".apk");
                Apk2Resource.Apktool.outputAPK_name = apkNAME.Substring(0, index) + "_" + signFileName + ".apk";

                String result = result0;

                if (batchSign && call != null)
                {
                    call("【I】批量签名,执行中...");
                }

                // 若有签名文件,则进行签名
                if (!signFileName.Equals(""))
                {
                    if (call != null)
                    {
                        call("【I】apk签名中," + signFileName + "...");
                    }

                    String pem = SinPath() + "\\" + signFileName + ".x509.pem";
                    String pk8 = SinPath() + "\\" + signFileName + ".pk8";
                    String psw = "letang123";
                    result = Apk2Resource.Apktool.Sign(apkName, pem, pk8, psw, call);
                    if (result.Contains("【E】"))
                    {
                        return(result);
                    }

                    if (call != null)
                    {
                        call("【I】apk签名完成!\r\n");
                    }

                    //// 删除打包生成的未签名文件
                    //if (!batchSign && File.Exists(apkName)) File.Delete(apkName);
                }
            }

            if (File.Exists(apkName))
            {
                File.Delete(apkName);                          // 删除打包生成的未签名文件
            }
            if (call != null)
            {
                call("【I】apk打包结束!\r\n");
            }

            // 打包完成后清除缓存中的解包文件
            if (call != null)
            {
                call("【I】清除缓存目录," + apkUnPackageDir);
            }
            Apk2Resource.Apktool.DeletDir(apkUnPackageDir);

            batchSign = false;

            return("");
        }