public static void RepackAPK(string pathToApk, string unpackedDir)
    {
        bool apiLevel11OrGreater = (PlayerSettings.Android.minSdkVersion >= AndroidSdkVersions.AndroidApiLevel11);

        ModifyManifestFile(Path.Combine(unpackedDir, "AndroidManifest.xml"), apiLevel11OrGreater);

        CleanStreamingAssets(Path.Combine(unpackedDir, "assets"));

        // Pack the unpacked apk
        StartProcess("java", string.Format("-jar \"{0}\" b \"{1}\"", Path.Combine(GetAPKToolDir(), "apktool.jar"), unpackedDir));

        // Sign the apk
        string       apkName           = Path.GetFileName(pathToApk);
        string       pathToRepackedApk = Path.Combine(Path.Combine(unpackedDir, "dist"), apkName);
        KeyStoreInfo ksInfo            = GetKeyStoreInfo();

        StartProcess("jarsigner",
                     string.Format("-sigalg MD5withRSA -digestalg SHA1 -keystore \"{0}\" -storepass {1} -keypass {2} \"{3}\" {4}",
                                   ksInfo.KeyStoreFile,
                                   ksInfo.StorePass,
                                   ksInfo.KeyPass,
                                   pathToRepackedApk,
                                   ksInfo.Alias
                                   )
                     );

        // Align the apk

        string pathToZipAlign = Path.Combine(GetAndroidSDKDir(), "tools/zipalign");

        StartProcess(pathToZipAlign, string.Format("-f 4 \"{0}\" \"{1}\"", pathToRepackedApk, pathToApk));

        // Delete the temp dir
        Directory.Delete(unpackedDir, true);
    }
    private static KeyStoreInfo GetKeyStoreInfo()
    {
        KeyStoreInfo ksInfo = new KeyStoreInfo();

        if (!string.IsNullOrEmpty(PlayerSettings.Android.keystoreName))
        {
            ksInfo.KeyStoreFile = PlayerSettings.Android.keystoreName;
            ksInfo.StorePass    = PlayerSettings.Android.keystorePass;
            ksInfo.KeyPass      = PlayerSettings.Android.keyaliasPass;
            ksInfo.Alias        = PlayerSettings.Android.keyaliasName;
        }

        return(ksInfo);
    }
Esempio n. 3
0
    public static void RepackAPK(string pathToApk, string unpackedDir)
    {
        bool apiLevel11OrGreater = (PlayerSettings.Android.minSdkVersion >= AndroidSdkVersions.AndroidApiLevel11);

        ModifyManifestFile(Path.Combine(unpackedDir, "AndroidManifest.xml"), apiLevel11OrGreater);

        CleanStreamingAssets(Path.Combine(unpackedDir, "assets"));

        CopyMobileNetDll(Path.Combine(unpackedDir, "assets/bin/Data/Managed"),
                         Path.Combine(Application.dataPath, "Plugins"));

        // Pack the unpacked apk
        StartProcess("java", string.Format("-jar \"{0}\" b \"{1}\"", Path.Combine(GetAPKToolDir(), "apktool.jar"), unpackedDir));

        // Sign the apk
        string       apkName           = Path.GetFileName(pathToApk);
        string       pathToRepackedApk = Path.Combine(Path.Combine(unpackedDir, "dist"), apkName);
        KeyStoreInfo ksInfo            = GetKeyStoreInfo();

        StartProcess("jarsigner",
                     string.Format("-sigalg MD5withRSA -digestalg SHA1 -keystore \"{0}\" -storepass {1} -keypass {2} \"{3}\" {4}",
                                   ksInfo.KeyStoreFile,
                                   ksInfo.StorePass,
                                   ksInfo.KeyPass,
                                   pathToRepackedApk,
                                   ksInfo.Alias
                                   )
                     );

        // Align the apk

        string zipalignExt = Application.platform == RuntimePlatform.WindowsEditor
                                                                                                ? ".exe" : "";
        string pathToZipAlign = Path.Combine(GetAPKToolDir(),
                                             "zipalign" + zipalignExt);

        StartProcess(pathToZipAlign, string.Format("-f 4 \"{0}\" \"{1}\"", pathToRepackedApk, pathToApk));

        // Delete the temp dir
        Directory.Delete(unpackedDir, true);
    }
Esempio n. 4
0
	private static KeyStoreInfo GetKeyStoreInfo()
	{
		KeyStoreInfo ksInfo = new KeyStoreInfo();
		
		if (!string.IsNullOrEmpty(PlayerSettings.Android.keystoreName))
		{
			ksInfo.KeyStoreFile = PlayerSettings.Android.keystoreName;
			ksInfo.StorePass = PlayerSettings.Android.keystorePass;
			ksInfo.KeyPass = PlayerSettings.Android.keyaliasPass;
			ksInfo.Alias = PlayerSettings.Android.keyaliasName;
		}
		
		return ksInfo;
	}