你沒有指定RNG的Provider
未指定的情況下 Android 2.3以上版本使用的是 隨機數序列是 Android's OpenSSL-backed security provider
以下版本是 BouncyCastle Security Provider
JDK 1.7內沒有這個Provider, 這個Android自己搞的,你服務端一定解不出來的。
目前Android支持的 RNG有以下幾種
Android's OpenSSL-backed security provider 1ASN.1, DER, PkiPath, PKCS7
BouncyCastle Security Provider v1.49 HARMONY (SHA1 digest; SecureRandom; SHA1withDSA signature) Harmony JSSE Provider Android KeyStore security provider
服務端如果也沒指定的話,默認使用的是
SUN (DSA key/parameter generation; DSA signing; SHA-1, MD5 digests; SecureRandom; X.509 certificates; JKS keystore; PKIX CertPathValidator; PKIX CertPathBuilder; LDAP, Collection CertStores, javaPolicy Policy; JavaLoginConfig Configuration)
Oracle JDK 1.7 環境下 支持以下
SUN (DSA key/parameter generation; DSA signing; SHA-1, MD5 digests; SecureRandom; X.509 certificates; JKS keystore; PKIX CertPathValidator; PKIX CertPathBuilder; LDAP, Collection CertStores, JavaPolicy Policy; JavaLoginConfig Configuration)
Sun RSA signature provider
Sun Elliptic Curve provider (EC, ECDSA, ECDH)
Sun JSSE provider(PKCS12, SunX509 key/trust factories, SSLv3, TLSv1)
SunJCE Provider (implements RSA, DES, Triple DES, AES, Blowfish, ARCFOUR, RC2, PBE, Diffie-Hellman, HMAC)
Sun (Kerberos v5, SPNEGO)
Sun SASL provider(implements client mechanisms for: DIGEST-MD5, GSSAPI, EXTERNAL, PLAIN, CRAM-MD5, NTLM; server mechanisms for: DIGEST-MD5, GSSAPI, CRAM-MD5, NTLM)
XMLDSig (DOM XMLSignatureFactory; DOM KeyInfoFactory)
Sun PC/SC provider
Sun's Microsoft Crypto API provider
你們服務端要是用的 什麼 OPENJDK 第三方虛擬機,php什麼的話,那就只有天知道支不支持了。
不過你看也知道了 JDK里的都是SUN自己搞的, Android JVM里掛載的不是Android專用的就是第三方開源的,我估計你是找不到一樣的 隨機數生成器 方案了
㈡ 如何生成android的BKS證書
android 系統中使用的證書要求以BKS的庫文件結構保存,通常情況下,我們使用java的keytool只能生成jks的證書庫,如果生成BKS的則需要下載BC庫,如是JDK1.6則下載bcprov-jdk16-141.jar,且將該文件放到jdk1.6.0_03\jre\lib\ext目錄下,然後運行以下命令即可以生成BKS的證書庫和相應的證書。
keytool -genkey -alias <別名> -keypass <密鑰口令> -keyalg RSA -keysize 1024 -validity 365 -keystore <庫文件名,如runcerts.keystore> -storepass <證書庫密碼> -dname "cn=runtestuser3, ou=vpn, o=run, c=CN, l=shanghai" -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider
或是:
keytool -import -alias serverkey -file server.crt -keystore tclient.bks -
storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider
頂
1
踩
android 系統中使用的證書要求以BKS的庫文件結構保存,通常情況下,我們使用java的keytool只能生成jks的證書庫,如果生成BKS的則需要下載BC庫,如是JDK1.6則下載bcprov-jdk16-141.jar,且將該文件放到jdk1.6.0_03\jre\lib\ext目錄下,然後運行以下命令即可以生成BKS的證書庫和相應的證書。
keytool -genkey -alias <別名> -keypass <密鑰口令> -keyalg RSA -keysize 1024 -validity 365 -keystore <庫文件名,如runcerts.keystore> -storepass <證書庫密碼> -dname "cn=runtestuser3, ou=vpn, o=run, c=CN, l=shanghai" -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider
或是:
keytool -import -alias serverkey -file server.crt -keystore tclient.bks -
storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider
頂
1
踩
㈢ 在Android應用中使用自定義https證書,CER轉BKS
安卓配置這些需要:
1.客戶端的P12證書 :發送給服務端驗證
2.服務端的cer證書: App本地需要轉BKS證書,因為安卓只識別此證書
CER轉BKS
keytool -importcert -v -trustcacerts -alias 位置1 \
-file 位置2 \
-keystore 位置3 -storetype BKS \
-providerclass org.bouncycastle.jce.provider.BouncyCastleProvider \
-providerpath 位置4 -storepass 位置5
例子
keytool -importcert -v -trustcacerts -alias xx -file E:\bks\xx.cer -keystore E:\bks\xx.bks -storetype BKS -providerclass org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath E:\bks\bcprov-jdk15on-146.jar -storepass xxxxxx
將證書內容提取成字元串:
keytool -printcert -rfc -file xxx.cer
查看bks證書庫列表
命令:
keytool -list -rfc -keystore mytrustcerts.bks -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider -storepass '123456'
㈣ Android在用AES加密字元串之後再用base64加密,加密的結果跟ios端不一樣,
之前在項目上用到AES256加密解密演算法,剛開始在java端加密解密都沒有問題,在iOS端加密解密也沒有問題。但是奇怪的是在java端加密後的文件在iOS端無法正確解密打開,然後簡單測試了一下,發現在java端和iOS端採用相同明文,相同密鑰加密後的密文不一樣!上網查了資料後發現iOS中AES加密演算法採用的填充是PKCS7Padding,而java不支持PKCS7Padding,只支持PKCS5Padding。我們知道加密演算法由演算法+模式+填充組成,所以這兩者不同的填充演算法導致相同明文相同密鑰加密後出現密文不一致的情況。那麼我們需要在java中用PKCS7Padding來填充,這樣就可以和iOS端填充演算法一致了。
要實現在java端用PKCS7Padding填充,需要用到bouncycastle組件來實現,下面我會提供該包的下載。啰嗦了一大堆,下面是一個簡單的測試,上代碼!
001 package com.encrypt.file;
002
003
004 import java.io.UnsupportedEncodingException;
005 importjava.security.Key;
006 import java.security.Security;
007
008 importjavax.crypto.Cipher;
009 importjavax.crypto.SecretKey;
010 importjavax.crypto.spec.SecretKeySpec;
011
012 public classAES256Encryption{
013
014 /**
015 * 密鑰演算法
016 * java6支持56位密鑰,bouncycastle支持64位
017 * */
018 public static finalString KEY_ALGORITHM="AES";
019
020 /**
021 * 加密/解密演算法/工作模式/填充方式
022 *
023 * JAVA6 支持PKCS5PADDING填充方式
024 * Bouncy castle支持PKCS7Padding填充方式
025 * */
026 public static finalString CIPHER_ALGORITHM="AES/ECB/PKCS7Padding";
027
028 /**
029 *
030 * 生成密鑰,java6隻支持56位密鑰,bouncycastle支持64位密鑰
031 * @return byte[] 二進制密鑰
032 * */
033 public static byte[] initkey() throwsException{
034
035 // //實例化密鑰生成器
036 // Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
037 // KeyGenerator kg=KeyGenerator.getInstance(KEY_ALGORITHM, "BC");
038 // //初始化密鑰生成器,AES要求密鑰長度為128位、192位、256位
039 //// kg.init(256);
040 // kg.init(128);
041 // //生成密鑰
042 // SecretKey secretKey=kg.generateKey();
043 // //獲取二進制密鑰編碼形式
044 // return secretKey.getEncoded();
045 //為了便於測試,這里我把key寫死了,如果大家需要自動生成,可用上面注釋掉的代碼
046 return new byte[] { 0x08, 0x08, 0x04, 0x0b, 0x02, 0x0f, 0x0b, 0x0c,
047 0x01, 0x03, 0x09, 0x07, 0x0c, 0x03, 0x07, 0x0a, 0x04, 0x0f,
048 0x06, 0x0f, 0x0e, 0x09, 0x05, 0x01, 0x0a, 0x0a, 0x01, 0x09,
049 0x06, 0x07, 0x09, 0x0d };
050 }
051
052 /**
053 * 轉換密鑰
054 * @param key 二進制密鑰
055 * @return Key 密鑰
056 * */
057 public static Key toKey(byte[] key) throwsException{
058 //實例化DES密鑰
059 //生成密鑰
060 SecretKey secretKey=newSecretKeySpec(key,KEY_ALGORITHM);
061 returnsecretKey;
062 }
063
064 /**
065 * 加密數據
066 * @param data 待加密數據
067 * @param key 密鑰
068 * @return byte[] 加密後的數據
069 * */
070 public static byte[] encrypt(byte[] data,byte[] key) throwsException{
071 //還原密鑰
072 Key k=toKey(key);
073 /**
074 * 實例化
075 * 使用 PKCS7PADDING 填充方式,按如下方式實現,就是調用bouncycastle組件實現
076 * Cipher.getInstance(CIPHER_ALGORITHM,"BC")
077 */
078 Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
079 Cipher cipher=Cipher.getInstance(CIPHER_ALGORITHM, "BC");
080 //初始化,設置為加密模式
081 cipher.init(Cipher.ENCRYPT_MODE, k);
082 //執行操作
083 returncipher.doFinal(data);
084 }
085 /**
086 * 解密數據
087 * @param data 待解密數據
088 * @param key 密鑰
089 * @return byte[] 解密後的數據
090 * */
091 public static byte[] decrypt(byte[] data,byte[] key) throwsException{
092 //歡迎密鑰
093 Key k =toKey(key);
094 /**
095 * 實例化
096 * 使用 PKCS7PADDING 填充方式,按如下方式實現,就是調用bouncycastle組件實現
097 * Cipher.getInstance(CIPHER_ALGORITHM,"BC")
098 */
099 Cipher cipher=Cipher.getInstance(CIPHER_ALGORITHM);
100 //初始化,設置為解密模式
101 cipher.init(Cipher.DECRYPT_MODE, k);
102 //執行操作
103 returncipher.doFinal(data);
104 }
105 /**
106 * @param args
107 * @throws UnsupportedEncodingException
108 * @throws Exception
109 */
110 public static void main(String[] args) {
111
112 String str="AES";
113 System.out.println("原文:"+str);
114
115 //初始化密鑰
116 byte[] key;
117 try {
118 key = AES256Encryption.initkey();
119 System.out.print("密鑰:");
120 for(int i = 0;i<key.length;i++){
121 System.out.printf("%x", key[i]);
122 }
123 System.out.print("\n");
124 //加密數據
125 byte[] data=AES256Encryption.encrypt(str.getBytes(), key);
126 System.out.print("加密後:");
127 for(int i = 0;i<data.length;i++){
128 System.out.printf("%x", data[i]);
129 }
130 System.out.print("\n");
131
132 //解密數據
133 data=AES256Encryption.decrypt(data, key);
134 System.out.println("解密後:"+newString(data));
135 } catch (Exception e) {
136 // TODO Auto-generated catch block
137 e.printStackTrace();
138 }
139
140 }
141 }
運行程序後的結果截圖:
ViewController.m文件
01 //
02 // ViewController.m
03 // AES256EncryptionDemo
04 //
05 // Created by 孫 裔 on 12-12-13.
06 // Copyright (c) 2012年 rich sun. All rights reserved.
07 //
08
09 #import "ViewController.h"
10 #import "EncryptAndDecrypt.h"
11
12 @interface ViewController ()
13
14 @end
15
16 @implementation ViewController
17 @synthesize plainTextField;
18 - (void)viewDidLoad
19 {
20 [super viewDidLoad];
21 // Do any additional setup after loading the view, typically from a nib.
22 }
23
24 - (void)didReceiveMemoryWarning
25 {
26 [super didReceiveMemoryWarning];
27 // Dispose of any resources that can be recreated.
28 }
29 //這個函數實現了用戶輸入完後點擊視圖背景,關閉鍵盤
30 - (IBAction)backgroundTap:(id)sender{
31 [plainTextField resignFirstResponder];
32 }
33
34 - (IBAction)encrypt:(id)sender {
35
36 NSString *plainText = plainTextField.text;//明文
37 NSData *plainTextData = [plainText dataUsingEncoding:NSUTF8StringEncoding];
38
39 //為了測試,這里先把密鑰寫死
40 Byte keyByte[] = {0x08,0x08,0x04,0x0b,0x02,0x0f,0x0b,0x0c,0x01,0x03,0x09,0x07,0x0c,0x03,
41 0x07,0x0a,0x04,0x0f,0x06,0x0f,0x0e,0x09,0x05,0x01,0x0a,0x0a,0x01,0x09,
42 0x06,0x07,0x09,0x0d};
43 //byte轉換為NSData類型,以便下邊加密方法的調用
44 NSData *keyData = [[NSData alloc] initWithBytes:keyByte length:32];
45 //
46 NSData *cipherTextData = [plainTextData AES256EncryptWithKey:keyData];
47 Byte *plainTextByte = (Byte *)[cipherTextData bytes];
48 for(int i=0;i<[cipherTextData length];i++){
49 printf("%x",plainTextByte[i]);
50 }
51
52 }
53 @end
㈤ 有什麼軟體可以使androidtv 重啟到recovery
本文內容ROM開發者聯盟小編將給大家介紹的就是怎樣在中關機菜單加入重啟模式!
一、修改framework-res.apk
1、反編譯後添加三張圖片到resdrawable-hdpi目錄下。
2、打開resvaluesstrings.xml,在最下面添加:
<string name="reboot">Reboot</string>
<string name="recovery">Recovery</string>
<string name="bootloader">Bootloader</string>
3、打開resvalues-zh-rCNstrings.xml,在最下面添加:
<string name="reboot">重啟</string>
<string name="recovery">重啟至Recovery</string>
<string name="bootloader">重啟至Bootloader</string>
4、重新編譯framework-res為framework-res-new.apk,解出resources.arsc以不壓縮的形式替換到原版framework-res.apk中,然後將三張圖片加入到相應位置。
二、修改android.policy.jar
1、打開.smali文件,在
.method private createDialog()Landroid/app/AlertDialog;
范圍內(電源選項)查找
[Lcom/android/internal/policy/impl/GlobalActions$Action;
找到後修改為:
const/4 v0, 0x4
new-array v0, v0, [Lcom/android/internal/policy/impl/GlobalActions$Action;
註:0x4表示電源選項中有4個菜單,可修改為自己需要的條目數量。
2、
const/4 v1, 0x
0
new-instance v2, Lcom/android/internal/policy/impl/GlobalActions$
4
;
const v3,
0x1080030
# 所對應的圖標
const v4,
0x104011a
# 所對應的文字
invoke-direct {v2, p0, v3, v4}, Lcom/android/internal/policy/impl/GlobalActions$
4
;-><init>(Lcom/android/internal/policy/impl/GlobalActions;II)V
aput-object v2, v0, v1
此為一個完整的菜單命令。一般有多個,可改變它們的順序、亦可增加或刪減。
註:0x1080030在framework-res esvaluespublic.xml中所對應的數值為:0x01080030。
一般修改的話復制關機的那條命令修改,修改的地方為上面代碼紅色部分。
3、這段代碼最後總的結尾為:
invoke-static {v0}, Lcom/google/android/collect/Lists;->newArrayList([Ljava/lang/Object;)Ljava/util/ArrayList;
move-result-object v0
iput-object v0, p0, Lcom/android/internal/policy/impl/GlobalActions;->mItemsjava/util/ArrayList;
所以添加命令的時候一定要注意加在上一個代碼的aput-object v2, v0, v1後面和總結尾的前面。
4、將GlobalActions$4.smali(關機所對應的那個文件)復制三份,分別命名為:GlobalActions$8.smali、
GlobalActions$9.smali、GlobalActions$10.smali(命名規則是:GlobalActions$xx.smali,「xx-1」為最後一個數
字)。
5、以修改GlobalActions$8.smali為例說明:
(1)打開後替換GlobalActions$4為GlobalActions$8,一共三處。
(2)找到:
invoke-static {v0, v1}, Lcom/android/internal/app/ShutdownThread;->shutdown(Landroid/content/Context;Z)V
修改為: (重啟)
const-string v2, "now"
invoke-static {v0, v2, v1}, Lcom/android/internal/app/ShutdownThread;->reboot(Landroid/content/Context;Ljava/lang/String;Z)V
修改為: (重啟到recovery)
const-string v2, "recovery"
invoke-static {v0, v2, v1}, Lcom/android/internal/app/ShutdownThread;->reboot(Landroid/content/Context;Ljava/lang/String;Z)V
修改為: (重啟到bootloader)
const-string v2, "bootloader"
invoke-static {v0, v2, v1}, Lcom/android/internal/app/ShutdownThread;->reboot(Landroid/content/Context;Ljava/lang/String;Z)V
註:有的機器重啟到bootloader命令為download,例如三星的機器。
要使用ANSI編碼
6、打包
java -jar smali.jar 1132 -o classes.dex
7、刷入即可。
如果為odex化的rom修改方法如下:
1、解包android.policy.odex
復制/system/framework目錄下的所有文件到smali文件夾下(可用adb命令)
然後執行:
java -Xmx1024m -jar baksmali.jar -c :core.jar:bouncycastle.jar:ext.jar:framework.jar:android.policy.jar:services.jar:core-junit.jar -x android.policy.odex
得到out目錄
修改過程同上。
2、打包:
java -Xmx1024m -jar smali.jar out -o classes.dex
3、用winrar打開android.policy.jar把得到的classes.dex拖放進去。
4、把dexopt-wrapper上傳到手機,並給許可權
adb push dexopt-wrapper /system/bin
adb shell chmod 755 /system/bin/dexopt-wrapper
5、把android.policy.jar傳送到手機/sdcard/
adb push android.policy.jar /sdcard/android.policy.jar
6、然後執行以下命令:
adb shell
busybox mount -o remount,rw /system
busybox cp -f /system/framework/android.policy.jar /system/framework/android.policy.jar.bak
busybox cp -f /system/framework/android.policy.odex /system/framework/android.policy.odex.bak
busybox cp -f /sdcard/android.policy.jar /system/framework/android.policy.jar
rm /system/framework/android.policy.odex
dexopt-wrapper /system/framework/android.policy.jar /system/framework/android.policy.odex /system/framework/core.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/core-junit.jar
busybox dd if=/system/framework/android.policy.odex.bak of=/system/framework/android.policy.odex bs=1 count=20 skip=52 seek=52 conv=notrunc
busybox cp -f /system/framework/android.policy.jar.bak /system/framework/android.policy.jar
rm /system/framework/android.policy.jar.bak
rm /system/framework/android.policy.odex.bak
reboot
命令解釋:
busybox dd if=/system/framework/android.policy.odex.bak of=/system/framework/android.policy.odex bs=1 count=20 skip=52 seek=52 conv=notrunc
意思為復制android.policy.odex.bak中的簽名到android.policy.odex中即可。
㈥ 如何訪問一個SSL連接通過Android的
在用Android平台上使用SSL,需要三步:
第一步 生成證書
1. 生成伺服器端的證書
keytool-genkey-aliastest-keystoretest.jks
2. 將keystore中的cert導出來,用來生成客戶端的驗證證書
keytool-exportcert-aliastest-filetest.cert-keystoretest.jks
3. 生成Android平台的證書
因為Android 要求要BC證書,而Java的keytool本身不提供BKS格式,因此要自己
手動配置。個人在配置的過程到了文件正在使用中,保存失敗的情況,我的做法是將
文件備份一下,用unlocker刪除後將修改好備份放到原位置就好了。方法如下:
(1)下載bcprov-ext-jdk15on-146.jar
可以選擇到官網,也可以到我上傳好的文件去下載,注意,用最新的149版本的會
有證書版本號不對的異常,改用146的則沒有這個問題
(2) 配置bcprov
在jdk_homejrelibsecurity目錄中找到java.security 在內容增加一行(數字
可以自己定義)
security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvider
(3) 生成android平台的證書
keytool-importcert-keystoretest.bks-filetest.cert-storetypeBKS-providerorg.bouncycastle.jce.provider.BouncyCastleProvider
第二步 編寫伺服器代碼(主要代碼如下)
importjava.io.BufferedInputStream;
importjava.io.FileNotFoundException;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.ObjectInputStream;
importjava.io.ObjectOutputStream;
importjava.net.ServerSocket;
importjava.net.Socket;
importjava.net.SocketAddress;
importjava.security.KeyManagementException;
importjava.security.KeyStore;
importjava.security.KeyStoreException;
importjava.security.NoSuchAlgorithmException;
importjava.security.UnrecoverableKeyException;
importjava.security.cert.CertificateException;
importjavax.net.ServerSocketFactory;
importjavax.net.ssl.KeyManager;
importjavax.net.ssl.KeyManagerFactory;
importjavax.net.ssl.SSLContext;
/**
*@TODOjava線程開發之四SSL加密
*開發步驟
*1.生成服務端密鑰
*2.導出服務端證書
*3.生成客戶端密鑰
*4.程序開發測試
*參考資料:http://chrui.iteye.com/blog/1018778
*@version1.0
*@date2013-5-723:22:45
*@update2013-5-810:22:45
*/
publicclassServer{
;
privatefinalstaticchar[]password="1qaz2wsx".toCharArray();
privateSSLContextcontext;
privateInputStreaminputStream;
publicServer(){
inputStream=this.getClass().getResourceAsStream("/test.jks");
initContext();
try{
//直接運行會報javax.net.ssl.SSLException:
//ServerSocketFactoryfactory=SSLServerSocketFactory.getDefault();
ServerSocketFactoryfactory=context.getServerSocketFactory();
//serverSocket=newServerSocket(10000);
serverSocket=factory.createServerSocket(10000);
System.out.println("======啟動安全SocektServer成功=========");
while(true){
Socketsocket=serverSocket.accept();
newReceiveSocket(socket).start();
}
}catch(IOExceptione){
e.printStackTrace();
}
}
//ssl上下文對象的初始化
privatevoidinitContext(){
try{
KeyStorestore=KeyStore.getInstance("JKS");
store.load(inputStream,password);
KeyManagerFactoryfactory=KeyManagerFactory.getInstance("SunX509");
factory.init(store,password);
KeyManager[]keyManagers=factory.getKeyManagers();
context=SSLContext.getInstance("SSL");
context.init(keyManagers,null,null);
}catch(KeyStoreExceptione){
e.printStackTrace();
}catch(NoSuchAlgorithmExceptione){
e.printStackTrace();
}catch(CertificateExceptione){
e.printStackTrace();
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}catch(UnrecoverableKeyExceptione){
e.printStackTrace();
}catch(KeyManagementExceptione){
e.printStackTrace();
}
}
publicstaticvoidmain(String[]args){
newServer();
}
{
privateSocketsocket;
publicReceiveSocket(Socketsocket){
this.socket=socket;
}
;
;
@Override
publicvoidrun(){
try{
reader=newObjectInputStream(newBufferedInputStream(socket.getInputStream()));
//writer=newObjectOutputStream(socket.getOutputStream());
//開啟無限循環監控消息
//java.io.EOFException
Objectobj=reader.readUTF();
SocketAddressaddress=socket.getRemoteSocketAddress();
System.out.println(address.toString()+"> "+obj);
//Objectobj=reader.readObject();
//if(obj!=null)
//{
//Useruser=(User)obj;
//System.out.println("id=="+user.getPassword()+" name=="+user.getName());
//}
//while(true){}
}catch(IOExceptione){
e.printStackTrace();
}finally{
if(null!=reader){
try{
reader.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
if(null!=writer){
try{
reader.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
try{
socket.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}
}
第三步 Android端代碼
主要是發送數據的代碼
protectedVoiddoInBackground(Void...params){
Log.i(TAG,"doInBackground");
try{
SSLContextcontext;
KeyStorets=KeyStore.getInstance("BKS");
ts.load(getResources().openRawResource(R.raw.test),
"1qaz2wsx".toCharArray());
TrustManagerFactorytmf=TrustManagerFactory
.getInstance("X509");
tmf.init(ts);
TrustManager[]tm=tmf.getTrustManagers();
context=SSLContext.getInstance("SSL");
context.init(null,tm,null);
SocketFactoryfactory=context.getSocketFactory();
SSLSocketsocket=(SSLSocket)factory.createSocket(
"192.168.70.249",10000);
ObjectOutputStreamout=newObjectOutputStream(
socket.getOutputStream());
out.writeUTF(UUID.randomUUID().toString());
out.flush();
System.out.println("========客戶端發送成功=========");
;
socket.close();
}catch(Exceptionex){
ex.printStackTrace();
}
returnnull;
}
以上是主要流程代碼,可以根據自身需要適當進行修改
㈦ android開發要哪些jar
am.jar:終端下執行am命令時所需的java庫。源碼目錄:framework/base/cmds/am
android.policy.jar:鎖屏界面需要用到的jar包,該包引用了android.test.runner.jar,源碼目錄:framework/base/policy
android.test.runner.jar:測試應用所需的jar包,該包引用了core.jar,core-junit.ajr以及framework.jar,源碼目錄:framework/base/test-runner
bmgr.jar:adb shell命令下對Android Device所有package備份和恢復的操作時所需的java庫。 不過這個android服務默認是Disabled,而且要backup的應用必須實現BackupAgent,在AndroidManifest.xml的application標簽中加入android:backupAgent屬性。源碼目錄:framework/base/cmds/bmgr
bouncycastle.jar: java三方的密匙庫,網上資料說用來apk簽名、https鏈接之類,官網 :http://www.bouncycastle.org/java.html
com.android.future.usb.accessory.jar:用於管理USB的上層java庫,在系統編譯時hardware層會調用到。源碼目錄:frameworks/base/libs/usb
com.android.location.provider.jar:
com.android.nfc_extras.jar:NFC外部庫。android/nfc/NfcAdapter.java會調用到包中的NfcAdapterExtras.java。源碼目錄:frameworks/base/nfc-extras
core-junit.jar :junit核心庫,在運行*Test.apk時被調用。
core-junitrunner.jar:未知,公司話機上有。
core-tests*.jar:framework下的一系列測試jar包,不做測試時可刪除。
core.jar:核心庫,啟動桌面時首先載入這個。源碼目錄:
ext.jar:android外部三方擴展包,源碼主要是external/nist-sip(java下的sip三方庫)、external/apache-http(apache的java三方庫)、external/tagsoup(符合SAX標準的HTML解析器)。其實這個jar包可以添加外部擴展jar包,只需在framework/base/Android.mk中的ext-dir添加src目錄即可。
framework-res.apk:android系統資源庫。
framework.jar:android的sdk中核心代碼。
ime.jar:ime命令所需jar包,用於查看當前話機輸入法列表、設置輸入法。源碼目錄:framework/base/cmds/ime
input.jar:input命令所需的jar包,用於模擬按鍵輸入。源碼目錄:framework/baes/cmds/input
javax.obex.jar:java藍牙API,用於對象交換協議。源碼目錄:framework/base/obex
monkey.jar:執行monkey命令所需jar包。源碼目錄:framework/base/cmds/monkey
pm.jar:執行pm命令所需的jar包,pm詳情見adb shell pm,源碼目錄:framework/base/cmds/pm
services.jar:話機框架層服務端的編譯後jar包,配合libandroid_servers.so在話機啟動時通過SystemServer以循環閉合管理的方式將各個service添加到ServiceManager中。源碼目錄:framework/base/service
sqlite-jdbc.jar: sqlite的Java DataBase Connextivity jar包。
svc.jar:svc命令所需jar包,可硬用來管理wifi,power和data。源碼目錄:framework/base/cmds/svc