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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章