项目再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

转载于:https://blog.51cto.com/snaile/1727234

nodejs解析apk相关推荐

  1. nodejs 解析Android apk获取app icon

    最近在做平台上传应用的时候,需要解析apk拿到icon显示在前端.在npm,github上搜了一圈没找到可用lib.后来想到adbkit-apkreader这个库,依靠里面的一个函数,解决了这个问题 ...

  2. Android中使用apk-parser解析apk

    一.前言 Apk Parser是一个优秀的解码二进制文件与获取apk各种信息的开源库,具备众多实用的特性: 获取apk各种元数据信息,比如应用名.图标.包名.版本号等 解析二进制XML文件并将其转换为 ...

  3. JavaScript实现拖拽上传 解析 APK 信息

    点击上方蓝字,关注我们 技术栈 jquery 文件上传:jquery.fileupload,github 文档 apk 文件解析:app-info-parser,github 文档 参考:前端解析ip ...

  4. java 实现解析apk的包名和版本号

    java 实现解析apk的包名和版本号 package com.util;import java.util.Enumeration; import java.util.HashMap; import ...

  5. nodejs 解析http_如何在NodeJS中大规模解析PDF:做什么和不做什么

    nodejs 解析http by Tom 由汤姆 如何在NodeJS中大规模解析PDF:做什么和不做什么 (How to parse PDFs at scale in NodeJS: what to ...

  6. Dex文件内容解析APK相关信息

    Dex文件格式 我们都知道Android项目在构建的时候,会将class文件的jar包通过dx工具将其转化成dex文件,目的是将所有的class文件整合到一个dex文件中,这样的目的是降低冗余,因为每 ...

  7. python解析apk文件_Python获取apk文件URL地址实例

    Python获取apk文件URL地址实例 更新时间:2013年11月01日 10:22:39   作者:   我要评论 需要提取apk文件的特定URL地址的朋友可以看一下这个代码实例. 工作中经常需要 ...

  8. 安卓浏览器解析apk文件 大小信息_apk提取器安卓版最新版下载_apk提取器安卓版免root下载2020...

    详情 APK提取器安卓版能够一键提取或备份手机系统应用的apk文件,提取出来之后还能分享给好友一起使用哦,你能通过APK提取器了解到所有软件apk文件.大小.版本号等信息,兼容性强适用于所有安卓手机, ...

  9. JAVA解析APK:读取apk的应用名称、包名、版本号、图标、大小等信息

    1.添加依赖 <dependency><groupId>net.dongliu</groupId><artifactId>apk-parser</ ...

最新文章

  1. 中小企业信息化--网页设计模拟题1
  2. WCF与 Web Service的区别
  3. Jax-RS自定义异常处理
  4. php 强制刷新一次,强制浏览器使用PHP刷新所有内容
  5. 1327集群_MPT1327集群通讯系统
  6. LeetCode(620)——有趣的电影(MySQL)
  7. match_parent和fill_parent有什么区别?
  8. 苹果mac菜单栏应用管理软件Bartender 让Mac选项列不再拥挤
  9. 全球数字高程数据(DEM)详解,还有地形晕渲、等高线等干货
  10. 网页导出pdf不完整_这些 PDF 神器,请你务必收藏
  11. Nacos注册中心和配置中心
  12. mysqldump: Got error: 145:
  13. SLAM论文笔记---- FlowNet及FlowNet2.0
  14. 江西计算机好的本科学校,江西本科学校计算机及应用顶岗实习
  15. linux指令查询ip地址
  16. 笔记:Spring基础
  17. 中小网站在域名、服务器等选择上的一点总结
  18. gcc/g++ 编译C/C++代码
  19. 基于JAVA酒店信息管理计算机毕业设计源码+数据库+lw文档+系统+部署
  20. 软件及硬件联调测试情况,基于ZigBee的无线输液监控方案 - RF/无线 - 电子发烧友网...

热门文章

  1. 【转载】最短路径之Dijkstra算法详细讲解
  2. 牛客网选择题之linux
  3. linux 线程学习初步01
  4. Educational Codeforces Round 114总结
  5. Ubuntu在vmware虚拟机无法上网的解决方法
  6. rename、remove
  7. 01-复杂度1 最大子列和问题 (20 分)
  8. 1149 Dangerous Goods Packaging (25 分)
  9. 【C++ Priemr | 15】派生类向基类转换的可访问性
  10. web开发课程培训,10大前端常用算法,学习路线+知识点梳理