creator_tools/commands/android/
gen_debug_key.rs1use super::Key;
2use crate::error::*;
3use std::path::PathBuf;
4use std::process::Command;
5
6pub fn gen_debug_key() -> Result<Key> {
9 let path = android_dir()?.join("debug.keystore");
10 let password = "android".to_string();
11 if !path.exists() {
12 let mut keytool = keytool()?;
13 keytool
14 .arg("-genkey")
15 .arg("-v")
16 .arg("-keystore")
17 .arg(&path)
18 .arg("-storepass")
19 .arg("android")
20 .arg("-alias")
21 .arg("androiddebugkey")
22 .arg("-keypass")
23 .arg(&password)
24 .arg("-dname")
25 .arg("CN=Android Debug,O=Android,C=US")
26 .arg("-keyalg")
27 .arg("RSA")
28 .arg("-keysize")
29 .arg("2048")
30 .arg("-validity")
31 .arg("10000");
32 keytool.output_err(true)?;
33 }
34 Ok(Key { path, password })
35}
36
37fn android_dir() -> Result<PathBuf> {
38 let android_dir = dirs::home_dir()
39 .ok_or_else(|| Error::PathNotFound(PathBuf::from("$HOME")))?
40 .join(".android");
41 std::fs::create_dir_all(&android_dir)?;
42 Ok(android_dir)
43}
44
45fn keytool() -> Result<Command> {
46 if let Ok(keytool) = which::which(bin!("keytool")) {
47 return Ok(Command::new(keytool));
48 }
49 if let Ok(java) = std::env::var("JAVA_HOME") {
50 let keytool = PathBuf::from(java).join("bin").join(bin!("keytool"));
51 if keytool.exists() {
52 return Ok(Command::new(keytool));
53 }
54 }
55 Err(Error::CmdNotFound("keytool".to_string()))
56}