设为首页 收藏本站
查看: 861|回复: 0

[经验分享] nodejs解析apk

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-12-23 09:28:20 | 显示全部楼层 |阅读模式
项目再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: ""
    }
};

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
/**
* 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


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-155056-1-1.html 上篇帖子: 安装和配置nginx、NodeJS和MongoDB 下篇帖子: 用Nginx做NodeJS应用的负载均衡
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表