JSON在android中應用

2021-06-16 22:11:13 字數 4241 閱讀 8474

android裡面許可權控制的比較嚴,一般的應用當需要使用系統或者root許可權是,比較麻煩,所以編寫乙個root service用來處理root許可權請求,通過socket通訊

[cpp]view plain

copy

print?

/* 標準標頭檔案放在前面,否則有些函式定義會被覆蓋掉 */

#include 

#include 

#include 

#include 

#include 

#define log_tag "root_server"

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include 

#include "mjson.h"

#include 

#include 

#define server_name "@server_root_permission_socket"

#define max_param_num  10

typedef

enum

e_root_call_type  

;  static

inline

long

long

current_time_millis()  

/* 檢測狀態,timeout單位ms, timeout=-1表示無限等待 */

intmain(

intargc, 

char

**argv)  

//set server addr_param

struct

sockaddr_un server_addr;    

server_addr.sun_family = af_unix;    

strncpy(server_addr.sun_path, server_name, sizeof

(server_addr.sun_path) - 1);  

ret = bind(server_sockfd,(struct

sockaddr*)&server_addr,

sizeof

(server_addr));  

if(ret == -1)   

//listen the server

listen(server_sockfd, 5);  

client_sockfd = -1;  

memset(&client_addr,0,sizeof

(struct

sockaddr_un));  

client_len = sizeof

(client_addr);  

sleep(1);  

fd_set(server_sockfd, &read_fds);  

max = server_sockfd;  

mjson_init();  

while

(1)  

else

if(!ret)  

continue

;   

logi("ret select-------------"

);  

if((client_sockfd = accept(server_sockfd,(

struct

sockaddr*)&client_addr, &client_len)) < 0)   

logi("client_sockfd = %d"

, client_sockfd);  

//read  data from client socket

nread = read( client_sockfd, ¶m_len, 4);  

if(nread != 0)     

logi("param_len = %d"

, param_len);  

nread = read( client_sockfd, buffer, param_len);  

if(nread != 0)    

logi("nread = %d"

, nread);  

logi("buffer = %s"

, buffer);  

json = buffer;  

if(mjson_parse(&root, (

char

*) json) != 0)   

if(mjson_try_begin() < 0)   

q = root;  

type =(e_root_call_type) mjson_locate_number(q, "call_type"

);  

logi("call_type = %d"

, type);  

if(root_system_call == type)  

}  else

if(root_system_exe == type)  

if(0 == pid)  

switch

(param_num)  

if(ret < 0)  

}  else

logi( "waitpid out pid:%d"

, pid);  

}  }         

}  ret = write(client_sockfd, &ret, 4);  

logi("ret = %d"

, ret);    

bail:  

close(client_sockfd);  

mjson_try_end();  

}  return

0;  

}  

以json方式傳遞資料,server解析

client 乙個例子:

[cpp]view plain

copy

print?

define server_name 

"@server_root_permission_socket"

static

inline

long

long

current_time_millis()  

intdo_root_call(

char

*json)  

struct

sockaddr_un address;    

address.sun_family = af_unix;    

strcpy(address.sun_path, server_name);   

ret = connect(sockfd, (struct

sockaddr *)&address, 

sizeof

(address));   

if(ret == -1)   

porting_info(port_module_base,"sockfd = %d"

, sockfd);  

porting_info(port_module_base,"result = %d"

, ret);  

len = strlen(json);  

ret = write(sockfd, &len, 4);  

porting_info(port_module_base,"ret2 = %d"

, ret);  

porting_info(port_module_base,"json = %s"

, json);  

ret = write(sockfd, json, strlen(json));  

porting_info(port_module_base,"ret3 = %d"

, ret);  

read( sockfd, &ret, 4);  

porting_info(port_module_base,"ret4 = %d"

, ret);  

close(sockfd);  

sockfd = -1;  

porting_info(port_module_base," client ok"

);  

return

0;  

}  

Android中與JSON相關的應用

json的定義 一種輕量級的資料交換格式,具有良好的可讀和便於快速編寫的特性。業內主流技術為其提供了完整的解決方案 有點類似於正規表示式 獲得了當今大部分語言的支援 從而可以在不同平台間進行資料交換。json採用相容性很高的文字格式,同時也具備類似於c語言體系的行為。json.org json的結構...

Android中與JSON相關的應用

json的定義 一種輕量級的資料交換格式,具有良好的可讀和便於快速編寫的特性。業內主流技術為其提供了完整的解決方案 有點類似於正規表示式 獲得了當今大部分語言的支援 從而可以在不同平台間進行資料交換。json採用相容性很高的文字格式,同時也具備類似於c語言體系的行為。json.org json的結構...

json在php和ajax中應用

馬永佔,myz,mayongzhan json是啥.應該是一種儲存的格式吧.最強的是這種格式可以被js直接當成物件讀 php中有json encode arr 還有json decode str,assoc 其中assoc為true則返回陣列而不是物件 很簡單的用法 手冊中的例子 arr array...