#![cfg(feature = "android")]
use android_tools::java_tools::*;
use crossbundle_tools::{
commands::android::*,
types::{AndroidSdk, BuildApks, BuildBundle, GetSizeTotal},
};
#[test]
fn test_build_apks() {
let tempfile = tempfile::tempdir().unwrap();
let build_dir = tempfile.path().to_path_buf();
let sdk = AndroidSdk::from_env().unwrap();
let package_name = "test";
let target_sdk_version = 31;
assert!(build_dir.exists());
let aab_path =
gen_minimal_unsigned_aab(sdk, "unsigned", target_sdk_version, &build_dir).unwrap();
let android_dir = android_dir().unwrap();
let target = vec![android_dir.join("aab.keystore")];
remove(target).unwrap();
let aab_key = Key::new_default().unwrap();
Keytool::new()
.genkeypair(true)
.v(true)
.keystore(&aab_key.key_path)
.alias(&aab_key.key_alias)
.keypass(&aab_key.key_pass)
.storepass(&aab_key.key_pass)
.dname(&["CN=Android Debug,O=Android,C=US".to_owned()])
.keyalg(KeyAlgorithm::RSA)
.keysize(2048)
.validity(10000)
.run()
.unwrap();
JarSigner::new(&aab_path, &aab_key.key_alias)
.keystore(&aab_key.key_path)
.storepass(aab_key.key_pass.to_string())
.verbose(true)
.sigalg("SHA256withRSA".to_string())
.digestalg("SHA-256".to_string())
.run()
.unwrap();
let signed_aab = build_dir.join(format!("{}_signed.aab", package_name));
std::fs::rename(&aab_path, &signed_aab).unwrap();
let apks_path = build_dir.join(format!("{}.apks", package_name));
let apks = BuildApks::new(&signed_aab, &apks_path).run().unwrap();
GetSizeTotal::new(&apks).run().unwrap();
}
#[test]
fn build_bundle_test() {
let tempfile = tempfile::tempdir().unwrap();
let build_dir = tempfile.path().to_path_buf();
assert!(build_dir.exists());
let sdk = AndroidSdk::from_env().unwrap();
let package_name = "test";
let target_sdk_version = 31;
let aab_path =
gen_minimal_unsigned_aab(sdk, "unsigned", target_sdk_version, &build_dir).unwrap();
assert!(aab_path.exists());
let android_dir = android_dir().unwrap();
let target = vec![android_dir.join("aab.keystore")];
remove(target).unwrap();
let aab_key = Key::new_default().unwrap();
Keytool::new()
.genkeypair(true)
.v(true)
.keystore(&aab_key.key_path)
.alias(&aab_key.key_alias)
.keypass(&aab_key.key_pass)
.storepass(&aab_key.key_pass)
.dname(&["CN=Android Debug,O=Android,C=US".to_owned()])
.keyalg(KeyAlgorithm::RSA)
.keysize(2048)
.validity(10000)
.run()
.unwrap();
let jarsigner = JarSigner::new(&aab_path, &aab_key.key_alias)
.keystore(&aab_key.key_path)
.storepass(aab_key.key_pass.to_string())
.verbose(true)
.sigalg("SHA256withRSA".to_string())
.digestalg("SHA-256".to_string())
.run()
.unwrap();
assert!(jarsigner.exists());
let signed_aab = build_dir.join(format!("{}_signed.aab", package_name));
std::fs::rename(&aab_path, &signed_aab).unwrap();
for apk in std::fs::read_dir(build_dir).unwrap() {
let apk_path = apk.unwrap().path();
if apk_path.ends_with("apk") {
let build_dir = apk_path.parent().unwrap();
let output_dir = build_dir.join("extracted_apk_files");
let extracted_files = extract_archive(&apk_path, &output_dir).unwrap();
let gen_zip_modules = gen_zip_modules(build_dir, "test", &extracted_files).unwrap();
let aab = build_dir.join(format!("{}_unsigned.aab", package_name));
BuildBundle::new(&[gen_zip_modules], &aab).run().unwrap();
}
}
}