導航:首頁 > 操作系統 > androidchain

androidchain

發布時間:2022-08-15 05:35:59

『壹』 安卓這邊如何用代碼生成帶備用名的CSR文件

public java.security.cert.Certificate certToX509Cert(X509Certificate cert) {
try {
CertificateFactory cf = new CertificateFactory();
InputStream is = new ByteArrayInputStream(cert.getEncoded());
Collection coll = cf.engineGenerateCertificates(is);
java.security.cert.Certificate jcrt = null;
Iterator it = coll.iterator();
if (it.hasNext()) {
jcrt = (java.security.cert.Certificate) it.next();
return jcrt;
}
} catch (CertificateEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (CertificateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}

public int storeP12(String caCertPath, String certPath, String pemPath, String pemPassword,
String p12Path, String p12Password) {
KeyPair kp;
try {
kp = getPrivateKey(pemPath, pemPassword);
X509Certificate caCert = getCertificate(caCertPath);
X509Certificate cert = getCertificate(certPath);
java.security.cert.Certificate[] chain = new java.security.cert.Certificate[2];
chain[0] = certToX509Cert(cert);
chain[1] = certToX509Cert(caCert);
KeyStore ks = KeyStore.getInstance("PKCS12", "BC");
ks.load(null, null);
ks.setKeyEntry(parseCertDN(cert.getSubjectDN().getName(), "CN"),
kp.getPrivate(), null, chain);
FileOutputStream fOut = new FileOutputStream(p12Path);
ks.store(fOut, p12Password.toCharArray());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return 0;
}

public static void main(String[] args) {
// TODO Auto-generated method stub

}

}

『貳』 android okhttp超時怎麼辦

OkHttp是一個在開發可汗學院AndroidAPP過程中非常重要的依賴庫。它的默認的配置為我們提供了非常重要實用功能,下面一些步驟我們可以讓Okhttp提供功能使用靈活和內省能力。1.啟用文件系統上的響應緩存默認情況下,Okhttp不支持響應緩存,包括HTTPCache-Control頭允許緩存響應。因此,客戶端通過一次又一次的請求相同的資源浪費時間和帶寬。而不是簡單地讀取初始響應後緩存的副本。要在文件系統中啟用響應緩存,需要配置com.squareup.okhttp.Cache實例,並把它傳遞給你的OkHttpClient實例的setCache方法。你必須初始化緩存與存放目錄的文件,並以位元組為單位的最大值。響應返回數據可以寫入給定目錄文件,如果一個響應的緩存超過了給定的大小。我們可以採取LRUpolicy。我們可以在stackoverflow查看JesseWilson的回復。我們可以通過context.getCacheDir()在子目錄中緩存我們的響應://Basedirectoryrecommendedby/q/4441849/400717.final@NullableFilebaseDir=context.getCacheDir();if(baseDir!=null){finalFilecacheDir=newFile(baseDir,"HttpResponseCache");okHttpClient.setCache(newCache(cacheDir,HTTP_RESPONSE_DISK_CACHE_MAX_SIZE));}//Basedirectoryrecommendedby/q/4441849/400717.final@NullableFilebaseDir=context.getCacheDir();if(baseDir!=null){finalFilecacheDir=newFile(baseDir,"HttpResponseCache");okHttpClient.setCache(newCache(cacheDir,HTTP_RESPONSE_DISK_CACHE_MAX_SIZE));}在可汗學院的程序中我們指定HTTP_RESPONSE_DISK_CACHE_MAX_SIZEas10*1024*1024,or10MB的大小2.集成StethoStetho是Facebook的一個可愛的庫,可以使用Chrome瀏覽器的Chrome開發人員工具功能來檢查你的Android應用程序。Stetho除了允許你檢查你的應用程序的SQLite資料庫,還可以查看View的層次結構。允許你檢查由OkHttp發起的每個請求和響應:這種自省機制是確保伺服器返回允許資源緩存的HTTP頭是非常有用的,以及驗證沒有請求時,保證緩存的資源存在。要想使用Stetho,只需添加一個StethoInterceptor實例的網路攔截器列表:okHttpClient.networkInterceptors().add(newStethoInterceptor());okHttpClient.networkInterceptors().add(newStethoInterceptor());然後,運行應用程序,打開瀏覽器後,輸入chrome://inspect。然後你就會看到應用程序的設備和標識符的列表。然後滑鼠右鍵選擇inspect打開開發者工具,然後打開新的tab,開始監控OkHttp請求。3.使用Picasso和Retrofit你可能使用過Picasso來載入網路圖片,或者使用Retrofit來簡化發出請求和解碼響應。這些第三方庫將隱式地創建自己的OkHttpClient供內部使用,如果你不明確指定一個。Picassoversion2.5.2的OkHttpDownloader類:(){OkHttpClientclient=newOkHttpClient();client.setConnectTimeout(Utils.DEFAULT_CONNECT_TIMEOUT_MILLIS,TimeUnit.MILLISECONDS);client.setReadTimeout(Utils.DEFAULT_READ_TIMEOUT_MILLIS,TimeUnit.MILLISECONDS);client.setWriteTimeout(Utils.DEFAULT_WRITE_TIMEOUT_MILLIS,TimeUnit.MILLISECONDS);returnclient;}(){OkHttpClientclient=newOkHttpClient();client.setConnectTimeout(Utils.DEFAULT_CONNECT_TIMEOUT_MILLIS,TimeUnit.MILLISECONDS);client.setReadTimeout(Utils.DEFAULT_READ_TIMEOUT_MILLIS,TimeUnit.MILLISECONDS);client.setWriteTimeout(Utils.DEFAULT_WRITE_TIMEOUT_MILLIS,TimeUnit.MILLISECONDS);returnclient;}Retrofit也有類似的工廠方法來創建自己的OkHttpClient。圖片一般在應用程序中需要載入的比較大的資源。盡管Picasso自己維護它的LRU機制來緩存圖片,在內存中嚴格執行。如果客戶端嘗試使用Picasso來載入圖片。Picasso會找不到其在內存中緩存圖像,然後將委託載入該圖片到它的內部OkHttpClient實例。並且默認情況下該實例將始終從伺服器載入圖片資源。作為defaultOkHttpClient的方法不能與上面提到的文件系統中的響應緩存配置結合起來。指定你自己的OkHttpClient實例允許返回數據從文件系統緩存響應,圖片不會從伺服器載入。這是非常重要的在程序第一次啟動以後。這個時候Picasso的內存緩存是冷的。所以它會頻繁的委託OkHttpClient實例去載入圖片。這就需要構建配置了您Picasso的OkHttpClient實例,如果你在你的代碼中使用Picasso.with(context).load()Picasso.with(context).load()載入圖片,你是用的是Picasso的單例模式。這是通過with方法懶漢模式地實例化並配置自己的OkHttpClient。因此,我們必須使我們自己的Picasso實例在單例之前通過wiht方法調用。實現這個,可以簡單的將OkHttpClient實例封裝在OkHttpDownloader中,然後傳遞給Picasso.Builder實例的downloader方法。finalPicassopicasso=newPicasso.Builder(context).downloader(newOkHttpDownloader(okHttpClient)).build();//,butreplacethesingleton//instancejustincase.Picasso.setSingletonInstance(picasso);finalPicassopicasso=newPicasso.Builder(context).downloader(newOkHttpDownloader(okHttpClient)).build();//,butreplacethesingleton//instancejustincase.Picasso.setSingletonInstance(picasso);在Retrofit中要使用OkHttpClient實例,需要改造1.9.x的一個RestAdapter,需要將OkHttpClient封裝OkClient的實例中。然後把它傳遞給RestAdapter.Builder實例的setClient方法。restAdapterBuilder.setClient(newOkClient(httpClient));restAdapterBuilder.setClient(newOkClient(httpClient));在Retrofit2.0中只需要簡單的將OkHttpClient傳遞給Retrofit.Builder實例的client方法。在可汗學院的APP中我們通過Dagger依賴注入來確保我們只有一個OkHttpClient的實例。這種方法同樣也適用於Picasso和Retrofit我們提供了一個為OkHttpClient實例提供單例模式的註解示例:@Provides@(finalContextcontext,){finalOkHttpClientokHttpClient=newOkHttpClient();configureClient(okHttpClient,);returnokHttpClient;}@Provides@(finalContextcontext,){finalOkHttpClientokHttpClient=newOkHttpClient();configureClient(okHttpClient,);returnokHttpClient;}OkHttpClient將會通過Dagger的註解創建一個實例提供給我們的Picasso和Retrofit。4.指定一個用戶代理攔截器日誌文件和分析為我們提供了有用的信息,當客戶在每個請求提供詳細的User-Agentheader值的時候。默認情況下,Okhttp包含User-Agent值只有在特定的Okhttp版本中。為了指定我們自己的useragent。首先創建攔截器的替換值,我們可以看stackoverflow的建議。{privatestaticfinalStringUSER_AGENT_HEADER_NAME="User-Agent";;publicUserAgentInterceptor(StringuserAgentHeaderValue){this.userAgentHeaderValue=Preconditions.checkNotNull(userAgentHeaderValue);}@(Chainchain)throwsIOException{finalRequestoriginalRequest=chain.request();=originalRequest.newBuilder().removeHeader(USER_AGENT_HEADER_NAME).addHeader(USER_AGENT_HEADER_NAME,userAgentHeaderValue).build();returnchain.proceed(requestWithUserAgent);}}{privatestaticfinalStringUSER_AGENT_HEADER_NAME="User-Agent";;publicUserAgentInterceptor(StringuserAgentHeaderValue){this.userAgentHeaderValue=Preconditions.checkNotNull(userAgentHeaderValue);}@(Chainchain)throwsIOException{finalRequestoriginalRequest=chain.request();=originalRequest.newBuilder().removeHeader(USER_AGENT_HEADER_NAME).addHeader(USER_AGENT_HEADER_NAME,userAgentHeaderValue).build();returnchain.proceed(requestWithUserAgent);}}為了創建User-Agentheader值人然後傳遞給UserAgentInterceptor的構造器,使用你得到的任何信息。我們可以使用:android的系統信息可以清晰的傳遞出這是一台android設備Build.MODEL或者「製造商提供的用戶可見最終可見的名稱」Build.BRAND或者「消費者可見的品牌與產品/硬體相關信息」Build.VERSION.SDK_INT或者「消費者可見的Android提供的SDK版本號」BuildConfig.APPLICATION_IDBuildConfig.VERSION_NAMEBuildConfig.VERSION_CODE最後三個值由的applicationID,VERSIONCODE和VERSIONNAME的值在我們的Gradlebuild腳本中了解信息可以查看versioningyourapplications和請注意,如果您的應用程序使用的是WebView,您可以配置使用相同的User-Agentheader值,你可以通過下面方法創建UserAgentInterceptor:WebSettingssettings=webView.getSettings();settings.setUserAgentString(userAgentHeaderValue);WebSettingssettings=webView.getSettings();settings.setUserAgentString(userAgentHeaderValue);5.指定合理的超時2.5.0版本之前,OkHttp請求默認為永不超時。2.5.0版本開始如果建立連接請求超時,如果從連接讀取下一個位元組或寫入的下一個位元組到連接,花費超過10秒,就終止。這樣做需要更新到2.5.0版本我們就不需要在我們的代碼中修改bug。原因很簡單是我因為我們第一次使用的時候使用了錯誤的路徑。要覆蓋這些默認值,可以分別調用setConnectTimeout,setReadTimeout或setWriteTimeout。需要注意的是Picasso和Retrofit為OkHttpClient實例指定不同的超時值時,默認情況下,Picasso指定:連接超過15秒.讀取超過20秒寫入超過20秒而Retrofit指定:連接超過15秒.讀取超過20秒沒有寫入超時通過配置Picasso和Retrofit自己的OkHttpClient實例你可以確保所有的請求超時是一致的

『叄』 如何使用charles對Android Https進行抓包

1、給Mac安裝證書。
打開Charles,在Menu選擇SSL Proxying > Install Charles Root Certificate,Keychain Access(鑰匙訪問串)被打開,我們可以看到Charles Certificate已經被安裝,
2、信任證書
但此時該證書並沒有被信任,雙擊該行彈出證書詳情,選擇「Always Trust」。
3、給手機安裝證書
打開Charles,在Menu選擇SSL Proxying > Install Charles Root Certificate on a Mobile Device or Remote Browser,彈出提示框
安裝提示進行配置,需要注意的是192.168.0.101是我演示時候的IP,你要改成你自己的IP地址。IP配置之後用手機瀏覽器打開http://charlesproxy.com/getssl 下載證書。如果是Android設備,選擇設置->從儲存設備安裝。
4、開啟SSL代理功能
在Menu選擇Proxy->SSL Proxying Setting,選中Enable SSL Proxying,在Locations裡面添加要使用SSL代理的網站,埠號輸入443,如果需要匹配所有的HTTPS網站則輸入 * 號即可。現在即可攔截Https的數據包。

『肆』 android retrofit cookie怎麼處理

首先是抽象的基類
public abstract class BaseApi {
public static final String API_SERVER = "伺服器地址"
private static final OkHttpClient mOkHttpClient = new OkHttpClient();
private static Retrofit mRetrofit;

protected static Retrofit getRetrofit() {
if (Retrofit == null) {
Context context = Application.getInstance().getApplicationContext();
//設定30秒超時
mOkHttpClient.setConnectTimeout(30, TimeUnit.SECONDS);
//設置攔截器,以用於自定義Cookies的設置
mOkHttpClient.networkInterceptors()
.add(new CookiesInterceptor(context));
//設置緩存目錄
File cacheDirectory = new File(context.getCacheDir()
.getAbsolutePath(), "HttpCache");
Cache cache = new Cache(cacheDirectory, 20 * 1024 * 1024);
mOkHttpClient.setCache(cache);
//構建Retrofit
mRetrofit = new Retrofit.Builder()
//配置伺服器路徑
.baseUrl(API_SERVER + "/")
//設置日期解析格式,這樣可以直接解析Date類型
.setDateFormat("yyyy-MM-dd HH:mm:ss")
//配置轉化庫,默認是Gson
.addConverterFactory(ResponseConverterFactory.create())
//配置回調庫,採用RxJava
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
//設置OKHttpClient為網路客戶端
.client(mOkHttpClient)
.build();
}
return mRetrofit;
}
}

然後是Cookies攔截器
public class CookiesInterceptor implements Interceptor{
private Context context;

public CookiesInterceptor(Context context) {
this.context = context;
}
//重寫攔截方法,處理自定義的Cookies信息
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Request compressedRequest = request.newBuilder()
.header("cookie", CookieUtil.getCookies(context))
.build();
Response response = chain.proceed(compressedRequest);
CookieUtil.saveCookies(response.headers(), context);
return response;
}
}123456789101112131415161718

CookieUtil則是一些自定義解析和生成方法以及SharedPreferences的存取,代碼略
然後是Api類
public class UserApi extends BaseApi{
//定義介面
private interface UserService {
//GET註解不可用@FormUrlEncoded,要用@Query註解引入請求參數
@GET("user/user_queryProfile")
Observable<UserProfileResp> queryProfile(@Query("userId") int userId);

//POST方法沒有緩存,適用於更新數據
@FormUrlEncoded
@POST("user/user_updateUserName")
Observable<BaseResp> updateUserName(@Field("userName") String userName);
}
protected static final UserService service = getRetrofit().create(UserService.class);

//查詢用戶信息介面
public static Observable<UserProfileResp> queryProfile(int userId){
return service.queryProfile(userId);
}

//更新用戶名介面
public static Observable<BaseResp> updateUserName(String userName){
return service.updateUserName(userName);
}
}

再就是將Retrofit的響應消息經過Gson解析成期望的數據結構,稱之為Model類
上文的BaseResp和UserProfileResp則是自定義的Model
假定伺服器約定返回的Json格式為
{
"result":"結果代號,0表示成功",
"msg":"異常信息,僅在失敗時返回數據",
"userInfo":
{
"id":"用戶id",
"userName":"用戶名名字"
}
}123456789

那麼UserProfileResp可以寫成
public class UserProfileResp {
//@SerializedName是指定Json格式中的Key名
//可以不寫,則默認採用與變數名一樣的Key名
@SerializedName("userInfo")
private UserProfileModel userInfo;

public UserProfileModel getUserInfo() {
return userInfo;
}
}12345678910

UserProfileModel則是具體的數據結構
public class UserProfileModel {
private int userId;
private String userName;

public String getUserName(){
return userName;
}
}12345678

需要注意的是,如果沒有使用@SerializedName指定Key名,當工程被混淆時,變數名會被混淆得與期望的Key名不符。因此需要將這類Model類統一放到一個工程目錄,再在proguard-project文件中加入排除項
//不混淆Model類
-keep class com.xxx.model.xxx.** { *; }12

最後是實際調用
public void getProfile(int userId){
UserApi.queryProfile(userId)
.subscribeOn(Schelers.io())
.subscribe(new Subscriber<UserProfileResp>(){
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(UserProfileResp userProfileResp) {
}
});
}

『伍』 android中的key chain是干什麼用的,請教高人,謝謝。。。

你說的如果是那個key chain的話,這玩意不光是android,很多系統和軟體裡面都有這個概念,就是用來存儲你輸入過的用戶名密碼之類的。比如連接某台需要認證的文件伺服器,可以讓系統幫你記住輸入的用戶名密碼,下次就不用重復輸入了,用戶名密碼就是存在key chain裡面的。

『陸』 如何使用adb命令查看android中的資料庫

1,進入到控制台中,輸入adb shell,進入到命令模式的環境中

2,輸入:cd /data/data/

3, 選擇你所在的資料庫文件,比如我的com.android.homework, 輸入命令:cd com.android.homework

4, 可以使用ls -l 命令查看當前目錄中的文件

5,輸入: cd databases 進入到資料庫文件中

6, ls -l 顯示你資料庫中你建立的資料庫

7, sqlite3 info.db 進入到你選擇的資料庫中

8, .tables :查看你建的表

9, select * from table_name;s 可以查看整個表的信息

10, 使用其他的SQL語句可以進一步對表進行操作,注意SQL語句必須用分號(;)結尾

『柒』 在android系統中有類似於ios的keychain的存儲嗎

android手機是無法運行IOS的程序的,android運行的是apk程序,IOS運行的ipa程序,兩者互不兼容。 APK是AndroidPackage的縮寫,即Android安裝包(apk)。APK是類似Symbian Sis或Sisx的文件格式。通過將APK文件直接傳到Android模擬器或Android手機中執行即可安裝。apk文件和sis一樣,把android sdk編譯的工程打包成一個安裝程序文件,格式為apk。 IPA是Apple程序應用文件iPhoneApplication的縮寫。簡單來說,Mac 下的軟體就像是 Windows 下的綠色軟體一樣,解壓後即可使用,不需要安裝,卸載的話也只用刪除程序文件即可(這里不涉及 pkg 格式安裝包)。

『捌』 android iterable怎麼用

通過實現Iterable介面,可以給你的類增加foreach能力:
public class StringChain implements Iterable<String>{

private List<String> strList = new ArrayList<String>();

public void add(String str){

strList.add(str);

}

public Iterator iterator() {

return strList.iterator();

}

}

測試:

public class TestStringChain {

public static void main(String[] args) {

StringChain d = new StringChain();

d.add("whl1");

d.add("whl2");

for(String c:d){

System.out.println(c);

}

}
}

『玖』 安卓(android)手機里的CA證書如何備份出來還原到其它手機上。

Android中Ca證書的PrivateKey獲取正常數據

在4.1版本裡面獲取的值為空,在4.0裡面可以正常獲取,與用keystore獲取的value是一樣的,在4.2+版本裡面獲取的value只有部分值,如下所示,在4.2以上的版本android裡面只有molus值:

1. android系統中先安裝證書,然後通過KeyChain.gePrivateKey(..)獲取到的,無法通過privateKey進行文件解密操作,非正常的privateKey.

molus=
參考網址:(http://)stackoverflow點com/questions斜杠12507697斜杠keychain-getprivatekeycontext-string-on-android-4-1

,

publicExponent=10001,

2. 通過證書文件流方式 ,使用keyStore的方法獲取到的,為所需要的PrivateKey.

molus:public exponent: 10001

private exponent:


primeP:


primeQ:


primeExponentP:


primeExponentQ:


crtCoefficient:
327d611df42341f5d5

閱讀全文

與androidchain相關的資料

熱點內容
怎麼顯示android的APP 瀏覽:121
c編譯器怎麼刪除空格 瀏覽:695
php自動釋放內存 瀏覽:219
golang編譯庫 瀏覽:794
oracle數據字元串加密 瀏覽:603
研究生去上海當程序員 瀏覽:90
u8電腦伺服器連接失敗怎麼解決 瀏覽:569
bat腳本創建日期命名文件夾 瀏覽:104
將圖片轉換為pdf格式 瀏覽:980
java中形參 瀏覽:83
枚舉類型編譯器 瀏覽:519
oraclejava包 瀏覽:568
手機定位手機怎麼定位安卓 瀏覽:523
在哪個app買歐萊雅最便宜 瀏覽:495
程序員吃零食好嗎 瀏覽:261
php工程師主要做什麼 瀏覽:356
tvp保存到哪個文件夾 瀏覽:197
怎麼把空調裡面的壓縮機拆卸掉 瀏覽:943
linux4k對齊 瀏覽:968
單片機與開關電源 瀏覽:276