nodejs解析apk
? ? ? 項目再github上的目錄:https://github.com/chen2009277025/nodejs_apkTool
? ? ? ?nodejs無可厚非是新興的后端語言,因為他的開發(fā)語言是javascript,javascript語言的自身優(yōu)勢,讓nodejs迅速的火遍大江南北。
? ? ? 很多的nodejs的開發(fā)插件如雨后春筍般的涌現(xiàn)出來,比如文件操作的fs,解決數(shù)據(jù)庫鏈接的各種中間件,mysql、mongoose等等。
? ? ?但是目前我還沒有發(fā)現(xiàn)關(guān)于nodejs解析apk的,這個需求并不是很大眾,但是對于有些項目而言這個需求確實很重要的。其實實際上來講需要安裝好java環(huán)境,至少得是java1.6以上。
? ? ?android就會有一個庫文件是用來讀取apk中的簽名和信息的庫了,而我們再這里所要做的就是用nodejs去調(diào)用這些庫文件,把這些操作分裝成一個個的子操作,使用的人只需要關(guān)心如何和我們的中間件交互得到自己想要的數(shù)據(jù),而不需要去關(guān)心中間做了些什么。
????
? ? ? ? 一般的apk是用過一定的壓縮格式壓縮過的,我們可以通過將apk的后綴名修改成rar或者zip甚至是tar.gz然后解壓提取里面的圖片等的靜態(tài)資源文件。
可是此時的applicationContext.xml文件是不能看的,或者它里面的class文件也是不能看到的。
此時這個apktool就有用了:
nodejs_apktool 是用nodejs寫的一個對apk處理的一個工具
1.能對apk進行讀取簽名,讀取apk內(nèi)部的appkey,appid,
2.能對apk進行解包,打包
3.能寫入指定的appid,appkey
? ? ? ?
使用:
//apkToolPath:這個是你的項目的絕對路徑,比如:/users/chenjianhui/node_apktool,node_apktool是我的項目名
//sign:是項目中希望打進apk里面的簽名,簽名是一個和公司有關(guān)的文件,這個文件的生成可以去各大搜索引擎上就能搜到怎么生成
//sign_path:簽名的路徑,系統(tǒng)絕對路徑
//sign_password:簽名的密碼,以防止別人給你解密的密碼
//sign_align:簽名的別名,這些參數(shù)在你創(chuàng)建簽名的時候就會設(shè)置好
//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) }); *///這里的參數(shù)是需要向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需要的?權(quán)限,由于時間的問題,我并沒有給該工具新增添加或者刪除權(quán)限的功能,
? ? ? ?如果有可能還可以將這個功能寫成一個web,用戶直接上傳apk,手動輸入自己需要的渠道號產(chǎn)品id等信息,手動選擇需要的權(quán)限,就可以下載簽名過后屬于自己的apk
轉(zhuǎn)載于:https://blog.51cto.com/snaile/1727234
總結(jié)
以上是生活随笔為你收集整理的nodejs解析apk的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在Hadoop上运行基于RMM中文分词算
- 下一篇: deferred Transports