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

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

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

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

                if (signFileName.EndsWith(".keystore"))
                {
                    String keysotreName = Form1.SinPath() + "\\" + signFileName;

                    String[] I        = getKestoreInfo(signFileName); // 获取对应的签名信息
                    String   alias    = I[0];
                    String   password = I[1];

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

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

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

            if (call != null)
            {
                call("【I】apk打包结束!\r\n");
            }

            return("");
        }