Update src/main.rs
This commit is contained in:
+85
@@ -0,0 +1,85 @@
|
||||
mod axml;
|
||||
mod bigint;
|
||||
mod cert;
|
||||
mod deflate;
|
||||
mod keydata;
|
||||
mod sha256;
|
||||
mod sign_v2;
|
||||
mod zip;
|
||||
|
||||
use axml::{val, AxmlBuilder};
|
||||
|
||||
fn build_manifest() -> Vec<u8> {
|
||||
let mut b = AxmlBuilder::new();
|
||||
|
||||
let a_name = b.intern("name");
|
||||
let a_hascode = b.intern("hasCode");
|
||||
let a_exported = b.intern("exported");
|
||||
let a_minsdk = b.intern("minSdkVersion");
|
||||
|
||||
let s_manifest = b.intern("manifest");
|
||||
let s_uses_sdk = b.intern("uses-sdk");
|
||||
let s_application = b.intern("application");
|
||||
let s_activity = b.intern("activity");
|
||||
let a_package = b.intern("package");
|
||||
|
||||
let v_package = b.intern("android.app");
|
||||
let v_activity = b.intern(".Activity");
|
||||
|
||||
let resmap = vec![
|
||||
(a_name, AxmlBuilder::res_id_for("name").unwrap()),
|
||||
(a_minsdk, AxmlBuilder::res_id_for("minSdkVersion").unwrap()),
|
||||
(a_hascode, AxmlBuilder::res_id_for("hasCode").unwrap()),
|
||||
(a_exported, AxmlBuilder::res_id_for("exported").unwrap()),
|
||||
];
|
||||
|
||||
b.start();
|
||||
b.open_ns(
|
||||
s_manifest,
|
||||
&[(a_package, val::TYPE_STRING, v_package, v_package as i32, false)],
|
||||
);
|
||||
b.open(s_uses_sdk, &[(a_minsdk, val::TYPE_INT_DEC, 34, -1)]);
|
||||
b.close(s_uses_sdk);
|
||||
b.open(s_application, &[(a_hascode, val::TYPE_INT_BOOL, 0, -1)]);
|
||||
b.open(
|
||||
s_activity,
|
||||
&[
|
||||
(a_name, val::TYPE_STRING, v_activity, v_activity as i32),
|
||||
(a_exported, val::TYPE_INT_BOOL, 0xFFFF_FFFF, -1),
|
||||
],
|
||||
);
|
||||
let s_intent_filter = b.intern("intent-filter");
|
||||
let s_action = b.intern("action");
|
||||
let s_category = b.intern("category");
|
||||
let v_action_main = b.intern("android.intent.action.MAIN");
|
||||
let v_cat_launcher = b.intern("android.intent.category.LAUNCHER");
|
||||
b.open(s_intent_filter, &[]);
|
||||
b.open(s_action, &[(a_name, val::TYPE_STRING, v_action_main, v_action_main as i32)]);
|
||||
b.close(s_action);
|
||||
b.open(s_category, &[(a_name, val::TYPE_STRING, v_cat_launcher, v_cat_launcher as i32)]);
|
||||
b.close(s_category);
|
||||
b.close(s_intent_filter);
|
||||
b.close(s_activity);
|
||||
b.close(s_application);
|
||||
b.close(s_manifest);
|
||||
b.end();
|
||||
b.finish(&resmap)
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let manifest = build_manifest();
|
||||
|
||||
let mut z = zip::Zip::new();
|
||||
z.add_deflated("AndroidManifest.xml", manifest);
|
||||
let apk_unsigned = z.finish();
|
||||
|
||||
let apk = sign_v2::add_v2_signature(&apk_unsigned);
|
||||
|
||||
std::fs::create_dir_all("out").expect("create out dir");
|
||||
let path = "out/app.apk";
|
||||
std::fs::write(path, &apk).expect("write apk");
|
||||
|
||||
println!("{} ({} bytes)", path, apk.len());
|
||||
println!("adb install -r {}", path);
|
||||
println!("adb shell am start -n android.app/.Activity");
|
||||
}
|
||||
Reference in New Issue
Block a user