nodejs解析apk

项目再github上的目录:https://github.com/chen2009277025/nodejs_apkTool

nodejs无可厚非是新兴的后端语言,因为他的开发语言是javascript,javascript语言的自身优势,让nodejs迅速的火遍大江南北。

很多的nodejs的开发插件如雨后春笋般的涌现出来,比如文件操作的fs,解决数据库链接的各种中间件,mysql、mongoose等等。

但是目前我还没有发现关于nodejs解析apk的,这个需求并不是很大众,但是对于有些项目而言这个需求确实很重要的。其实实际上来讲需要安装好java环境,至少得是java1.6以上。

android就会有一个库文件是用来读取apk中的签名和信息的库了,而我们再这里所要做的就是用nodejs去调用这些库文件,把这些操作分装成一个个的子操作,使用的人只需要关心如何和我们的中间件交互得到自己想要的数据,而不需要去关心中间做了些什么。

一般的apk是用过一定的压缩格式压缩过的,我们可以通过将apk的后缀名修改成rar或者zip甚至是tar.gz然后解压提取里面的图片等的静态资源文件。

可是此时的applicationContext.xml文件是不能看的,或者它里面的class文件也是不能看到的。

此时这个apktool就有用了:

nodejs_apktool 是用nodejs写的一个对apk处理的一个工具

1.能对apk进行读取签名,读取apk内部的appkey,appid,

2.能对apk进行解包,打包

3.能写入指定的appid,appkey

使用:

//apkToolPath:这个是你的项目的绝对路径,比如:/users/chenjianhui/node_apktool,node_apktool是我的项目名

//sign:是项目中希望打进apk里面的签名,签名是一个和公司有关的文件,这个文件的生成可以去各大搜索引擎上就能搜到怎么生成

//sign_path:签名的路径,系统绝对路径

//sign_password:签名的密码,以防止别人给你解密的密码

//sign_align:签名的别名,这些参数在你创建签名的时候就会设置好

//apkTool的setting

apkTool.settings = {

apkToolPath: "",

sign: {

sign_path: "",

sign_password: "",

sign_align: ""

}

};

具体的使用请看我的测试用例里面的代码

/**
 * Created by chen on 15-7-30.
 */
var apktool = require("../index");
var fs = require("fs");

apktool.settings.apkToolPath = "/Users/chenjianhui/WebstormProjects/node_apktool";

//unpack apk
//解压apk包
apktool.apkTool_unpack("/Users/chenjianhui/Documents/apkTest/Pet.apk","/Users/chenjianhui/Documents/apkTest",function(err,result){
        if(err){console.log("error:"+err);}
        console.log(result)
});

/*
//pack apk
//打包apk
apktool.apkTool_pack("/home/chen/youyuan_test","/home/chen/youyuan_unsign.apk",function(err,result){
    if(err){console.log("error:"+err);}
    console.log(result)
});
*/

//这里的参数是需要向apk中写入的渠道号,版本号,appkey,appid等信息
//var params = {
//    channel_name:"COM_CHANNEL_BS",
//    channel_val:"default",
//    permissions:[],
//    appkey_name:"COM_APPKEY_BS",
//    appkey:"",
//    appid_name:"COM_APPID_BS",
//    appid:""
//}
//
//apktool.handle_manifest("/home/chen/youyuan_test",params,function(err,result){
//        if(err){console.log(err);}
//        console.log(result);
//})

/*//读取得到apk中的版本信息
//这个方法很有用,因为通过去applicationContext.xml里面找版本号是一个很不科学的办法,
//而且不一定能找到
apktool.getVersionOfApk("/home/chen/youyuan_test",function(err,result){

})
*/
/*重新签名apk,将apk签名成自己公司的apk,这个apk就是自己的了
apktool.resigned_apk("/home/chen/youyuan_unsign.apk","/home/chen/youyuan_sign.apk","/home/chen/android.keystore","haoxin","android",function(err,result){
    if(err){
        console.log(err);
        logger.writeErr(err);
        return;
    }
    console.log(result);
});

*/

/*//读取签名
apktool.readSign("/home/chen/youyuan_sign.apk",function(err,result){
    if(err){logger.writeErr(err);return;}
    console.log(result);
    console.log(result.data.MD5);
    console.log(result.data.SHA1);
    console.log(result.data.所有者);
})*/

/*这是解压的配置,
var pack_param = {
    unpack_folder:"/home/chen/haoxin_test", //解压目录
    desi_dir:"/home/chen/haoxin_2"  //压缩目标
};

//这是需要穿进去的一些渠道号和版本好等信息
var manifest_param = {
    channel_name:"COM_CHANNEL_BS",
    channel_val:"default",
    permissions:[],
    appkey_name:"COM_APPKEY_BS",
    appkey:"1231",
    appid_name:"COM_APPID_BS",
    appid:"12121"
};

var sign_param = {
    sign_file:"/home/chen/android.keystore",
    password:"haoxin",
    sign_align:"android"
}

apktool.handle_apk("/home/chen/youyuan.apk",pack_param,manifest_param,sign_param,function(err,result){
    if(err){console.log(err);return;}
    console.log(result);
    console.log( result.data["所有者"]);
})
*/
//
//var path = "/home/chen";
//
//console.log(fs.existsSync(path));
//
//获取MD5,这是获取apk MD5的方法
//apktool.getMd5("/Users/chenjianhui/Documents/apkTest/Pet.apk",function(err,result){
//    if(err)
//    {
//        console.log(err);
//        return;
//    }
//    console.log(result);
//})

这里面还有可以修改的空间,比如我们的apk需要的 权限,由于时间的问题,我并没有给该工具新增添加或者删除权限的功能,

如果有可能还可以将这个功能写成一个web,用户直接上传apk,手动输入自己需要的渠道号产品id等信息,手动选择需要的权限,就可以下载签名过后属于自己的apk

时间: 2024-09-27 04:24:13

nodejs解析apk的相关文章

Java环境解析apk文件信息

概述:Java解析apk文件,获取apk文件里的包名,版本号,图标文件等; 功能:可以提供给windows和linux平台使用; 原理:利用aapt.exe或者aapt这些anroid平台解析apk文件的工具,借用终端shell调用命令解析输出信息; 代码: 这里贴出一些关键代码,并给出代码注释,如下 1 package com.apkutils; 2 3 import java.io.BufferedReader; 4 import java.io.Closeable; 5 import ja

c# 借助cmd命令解析apk文件信息

借助aapt.exe文件 aapt.exe 解析apk包信息cmd命令: aapt dump badging *.apkaapt d badging *.apk >1.txt(保存成1.txt文件) ProcessStartInfo start = new ProcessStartInfo("cmd.exe"); start.CreateNoWindow = true; start.RedirectStandardInput = true; start.RedirectStand

android 利用 aapt 解析 apk 的应用名称 包名 版本号 权限等信息

在上传各大市场时发现 apk 上传后能自动解析出应用名称.包名.版本号.使用权限等信息,所以就研究了一下 1 直接解压 apk 解析  AndroidManifest.xml 是不行的,因为 apk 打包时 AndroidManifest.xml 文件被压缩混淆了. 2 主要有两种实现方式 1) 通过 aapt (android asset packaging tool) aapt 是打包.更新资源的一个工具,可以解析出 apk 的资源信息 2) apktool 著名的反编译工具,先反编译出 A

Java解析apk

概述:Java解析apk文件,获取apk文件里的包名,版本号,图标文件等; 功能:可以提供给windows和linux平台使用; 原理:利用aapt.exe或者aapt这些anroid平台解析apk文件的工具,借用终端shell调用命令解析输出信息; 代码: 这里贴出一些关键代码,并给出代码注释,如下 1 package com.apkutils; 2 3 import java.io.BufferedReader; 4 import java.io.Closeable; 5 import ja

通过上传的APK文件,解析APK文件内容,获取应用权限包名等

通过上传的APK文件,解析APK文件内容,获取应用权限包名等 1工具导入: 下载aapt.exe反编译执行程序,放入Java工程资源文件夹下(具体路径自己可定义) 2编写ApkUtil类,获取apk文件信息 public class ApkUtil { public static final String VERSION_CODE = "versionCode"; public static final String VERSION_NAME = "versionName&q

基于 jq 实现拖拽上传 APK 文件,js解析 APK 信息

技术栈 jquery 文件上传:jquery.fileupload,github 文档 apk 文件解析:app-info-parser,github 文档 参考:前端解析ipa.apk安装包信息 -- app-info-parser 支持功能 点击或拖拽上传 apk 文件 校验文件类型及文件大小 js 解析 apk 文件信息展示并通过上传接口提交给后端 支持上传过程中取消上传 支持上传成功显示上传信息 支持解析.上传等友好提示 支持从历史记录(所有已上传文件)中选择一个 支持假文件处理,比如

Android 利用 aapt 解析 apk 得到应用名称 包名 版本号 权限等信息

转:http://www.cnblogs.com/lesliefang/p/3864756.html 在上传各大市场时发现 apk 上传后能自动解析出应用名称.包名.版本号.使用权限等信息,所以就研究了一下 1 直接解压 apk 解析  AndroidManifest.xml 是不行的,因为 apk 打包时 AndroidManifest.xml 文件被压缩混淆了. 2 主要有两种实现方式 1) 通过 aapt (android asset packaging tool) aapt 是打包.更新

lib-qqwry v1.0 发布 nodejs解析纯真IP库(qqwry.dat)

lib-qqwry是当初学习node时用来练手的一个模块,用来解析纯真IP库的 现在发一个v1.0版本弥补我当时稚嫩的代码. 意外收获是,整理代码后发现,相比v0.x版本 急速模式下的效率提升大概20%; 但 v1.0 相比 v0.x 有很大改动,并不兼容之前的版本,所以升级碰到问题的同学需要好好了解一下. 1.初始化 v0.x 初使化的初衷是让用户可以使用指定版本的IP库文件, 在最合适的时候把IP库加载到内存中进行高速查询; v1.0 v1.0改变了程序结构,实现方式; 不将IP库加载到内存

python3 解析apk图标

有两处值小点,一是如何解压缩,另一个是如何写文件,第二点上我找的是phthon2的代码,一直写文件的时候报不是字符串的问题,将打开方式加上"b“的模式搞定 print文件出来直接删除了,原因是打印的时候死掉了,没办法,直接删除之. #!/usr/bin/env python3 # -*- coding: utf-8 -*- import zipfile zipFile=zipfile.ZipFile('E:\\apk\\找你妹.apk') #获取apk的文件列表 #print ('\n'.joi