当前位置:操作系统 > 安卓/Android >>

Android签名工厂

随手写的一个签名程序,Linux内核监听(监听文件夹内文件的变化),只要将你的文件后缀改成unsigned.apk放入到监听的目录即可快速签名。

希望对需要天天签名而烦恼的人有用哈。

 

 http://weibo.com/myzoooo

 

C代码

#include <unistd.h> 

#include <sys/inotify.h> 

#include <stdio.h> 

#include <string.h> 

 

#define MAX_BUF_SIZE 1024 

#define CHECK_PATH "/home/ffly/Desktop" 

 

int check_name(char *apk_name); 

int sign_apk(char *apk_name,char *apk_path); 

 

int check_dir(char *path) 

    int fd, wd; 

    int len, index; 

    char buffer[MAX_BUF_SIZE]; 

    struct inotify_event *event; 

    fd = inotify_init(); 

    if(fd < 0){ 

        printf("Failed to initialize inotify.\n"); 

        return 1; 

    } 

    wd = inotify_add_watch(fd, path,IN_CLOSE_WRITE | IN_MOVED_TO); 

    if(wd < 0){ 

        printf("Can't add watch for %s", path); 

        return 1; 

    } 

    while(len = read(fd, buffer, MAX_BUF_SIZE)){ 

        index = 0; 

        while(index < len){ 

            event = (struct inotify_event *)(buffer+index); 

            if(event->wd != wd) 

                continue; 

            if((event -> mask & IN_CLOSE_WRITE) || (event -> mask & IN_MOVED_TO)){ 

        int boolean; 

        char pathbuff[512]; 

        boolean = check_name(event->name); 

        sprintf(pathbuff,"%s/%s",CHECK_PATH,event->name); 

        if(boolean){ 

            sign_apk(event->name,pathbuff); 

        } 

        } 

            index += sizeof(struct inotify_event)+event->len; 

        } 

    } 

    return 0; 

 

int check_name(char *apk_name){ 

    int len,fix_len,idx,j,count; 

    char a,b; 

    char fix[] = "unsigned.apk"; 

    len = strlen(apk_name); 

    fix_len = strlen(fix); 

    count =0; 

    if(len<=fix_len) 

        return 0; 

    for(idx = len-fix_len,j = 0;idx<len;idx++,j++){ 

 

        a = apk_name[idx]; 

        b = fix[j]; 

        if(a == b){ 

            count++; 

        }else{ 

            count =0; 

            j=0; 

        } 

         if(count == fix_len) 

                   return 1; 

    } 

    return 0; 

 

int sign_apk(char *apk_name,char *apk_path){ 

    pid_t child_id; 

    child_id  = fork(); 

    char new_path_buf[512]; 

    sprintf(new_path_buf,"%s-signed.apk",apk_path); 

    printf("signed fileName:%s\n",apk_name); 

 

    if(child_id==0){  

        execl("/usr/bin/jarsigner","jarsigner","-storepass","ffly20110811","-keystore","/home/ffly/bin/lib/signapk_key/ffly.keystore","-signedjar",new_path_buf,apk_path,"ffly.keystore",(char *)0); 

    } 

     

    return 0; 

 

int main(){ 

    check_dir(CHECK_PATH); 

    return 0; 

}   

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,