android硬編碼
① android如何過濾http請求
Android客戶端捕獲http請求包的方法
對於Web測試,我們可以很容易的抓取到相關的http請求包,不用什麼專業軟體,甚至瀏覽器都能幫我們完成這個功能,拿到需要的http請求連接 。
http連接對於測試同學來說, 不論做功能、性能或是安全,都是非常重要的, 他過濾了前台的因素,讓測試同學直接能對後台進行交互。
以上是http連接的重要性,基本等於廢話,下面是正題。
客戶端安全測試,同樣需要拿到http的請求包,由於客戶端的前段限制繞過比較麻煩,那麼在做安全測試的過程中,直接拿到http的請求包顯得更外重要。
有如下方法可以拿到請求的http包:
1、在不配置代理的情況下,對Android客戶端(模擬器)的數據我們可以使用wireshark或者etherpeek等網路層抓包軟體抓取,模擬器本身的數據交互是通過電腦主機的網卡進行的,所以我們通過抓包軟體抓取主機網卡的數據包,經過過濾,便可得到模擬器客戶端中的數據包,類似這樣:
訪問之後,通過wireshark過濾http請求,便可找到我們剛剛發送的請求。
當然,這是種比較麻煩的方法,不過可以更確切的看到網路包發送的內容。
另一種辦法是對模擬器配置代理,讓所有請求包可以通過外部主機的七層抓包軟體,例如fiddler ,burpsuite等所捕獲到,配置代理需要先做一次設置:類似這樣:
進 入「設置」選項之後,按照圖示設置
這里proxy 設置為10.0.2.2是android模擬器對外部主機地址的硬編碼,埠設為8888是外部主機fiddler 的監聽地址,當然,如果是burpsuite 可以設置為8080。
② 安卓開發Layout XML 下出現這種警告怎麼解決
滑鼠點到黃色敬告上就會彈出提示了嘛,類似於這種「
Buttons in button bars should be borderless; use style="?
adt的版本越來越高了,所以也要求規范了,一些屬性官方要求是要寫上的,比如style等,早期android1.5、1.6的時候就沒這么多要求,可能隨後發展這些屬性不寫就不是黃色警告了,就變紅色錯誤了。
解決的方式是給每一個button或者其他控制項加上style樣式。
③ 安卓開發怎麼將和h264文件解碼播放
如題所示,我想將攝像頭採集的數據進行h.264硬編碼,我想知道Android是如何對視頻數據進行硬體編碼的
目前已經知道的方案有:
1、用Android4.1 API MediaCodec來對視頻數據進行編碼
http://stackoverflow.com/q/17232477/2293921
此種方式我測試了,並未成功,目前一直卡在這里,如果你等幫助我,我將非常感激
2、通過MediaRecorder方式對數據進行編碼
具體可參考 http://blog.csdn.net/zblue78/article/details/6083374
3、通過移植ffmpeg
這種方式沒接觸過,也不了解
可能還有一些其他的方式來對視頻硬編碼,如果你了解一下,感謝分享!
綜上,我更傾向於1的方式去做
我來回答
Android , MediaCodec , 硬編碼
post_newreply
//$(\'note_\').focus();
function succeedhandle_vfastpost(url, message, param) {
$(\'vmessage\').value = \'\';
succeedhandle_fastpost(url, message, param);
showCreditPrompt();
}
var vf_tips = \'#在這里快速回復#\';
$(\'vmessage\').value = vf_tips;
$(\'vmessage\').style.color = \'#CDCDCD\';
$(\'vmessage\').onclick = function() {
if($(\'vmessage\').value==vf_tips) {
$(\'vmessage\').value=\'\';
$(\'vmessage\').style.color=\"#000\";
}
}
$(\'vmessage\').onblur = function() {
if(!$(\'vmessage\').value) {
$(\'vmessage\').value=vf_tips;
$(\'vmessage\').style.color=\"#CDCDCD\";
}
}
$(\'vreplysubmit\').onclick = function() {
if($(\'vmessage\').value == vf_tips) {
return false;
}
}
④ Android 怎麼簡單實現預編譯
可以巧妙地利用常量來實現類似的功能。編譯的時候,一般會把常量進行硬編碼,並把不能抵達的代碼進行刪減。因此,我們有了下面類似的代碼:
[java]
public final static boolean IsDebug= false;
if(IsDebug){
Log.i(tag,msg);
}
可以對編譯後的文件,進行反編譯
⑤ 如何修改android模擬器上的IMEI,IMSI,SIM card serial number
手機使用IMEI和IMSI登錄到GSM網路的,由GSM網路側負責將IMSI和映射成手機號(MSISDN),以及執行相反方向的映射。
(一)、SIM card 號的修改:
SIM card號就是印製在SIM上的一串數字。
讀SIM card號的AT命令為:AT+CRSM=176,12258,0,0,10
因此在andorid模擬其源碼中找到該AT命令——在sim_card.c中:
const char*
asimcard_io( ASimCard sim, const char* cmd )
{
int nn;
#if ENABLE_DYNAMIC_RECORDS
int command, id, p1, p2, p3;
#endif
static const struct { const char* cmd; const char* answer; } answers[] =
{
{ "+CRSM=192,28436,0,0,15", "+CRSM: 144,0," },
{ "+CRSM=176,28436,0,0,20", "+CRSM: 144,0," },
{ "+CRSM=192,28433,0,0,15", "+CRSM: 144,0," },
{ "+CRSM=176,28433,0,0,1", "+CRSM: 144,0,55" },
{ "+CRSM=192,12258,0,0,15", "+CRSM: 144,0," },
{ "+CRSM=176,12258,0,0,10", "+CRSM: 144,0,98101430121181157002" },
...
...
因此用UE二進制方式打開emulator-arm.exe 或 emulator-x86.exe,並搜索字元串「98101430121181157002」,然後將其修改成需要的SIM card號。
比如:
00209a00h: 31 30 00 00 2B 43 52 53 4D 3A 20 31 34 34 2C 30 ; 10..+CRSM: 144,0
00209a10h: 2C 39 38 31 30 31 34 33 30 31 32 31 31 38 31 31 ; ,981014301211811
00209a20h: 35 37 30 30 32 00 2B 43 52 53 4D 3D 31 39 32 2C ; 57002.+CRSM=192,
(二)、IMEI、IMSI號的修改:
Java代碼中獲取手機的IMEI號與ISMI號途徑為:
TelephonyManager manager = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String imei = manager.getDeviceId();
String imsi = manager.getSubscriberId();
在android的源碼樹中找到類TelephonyManager的實現:
成員函數getDeviceId:
/**
* Returns the unique device ID, for example, the IMEI for GSM and the MEID
* or ESN for CDMA phones. Return null if device ID is not available.
*
* <p>Requires Permission:
* {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
*/
public String getDeviceId() {
try {
return getSubscriberInfo().getDeviceId();
} catch (RemoteException ex) {
return null;
} catch (NullPointerException ex) {
return null;
}
}
成員函數getSubscriberId:
/**
* Returns the unique subscriber ID, for example, the IMSI for a GSM phone.
* Return null if it is unavailable.
* <p>
* Requires Permission:
* {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE}
*/
public String getSubscriberId() {
try {
return getSubscriberInfo().getSubscriberId();
} catch (RemoteException ex) {
return null;
} catch (NullPointerException ex) {
// This could happen before phone restarts e to crashing
return null;
}
}
上面兩個成員函數最終調用共同的一個私有成員函數getSubscriberInfo():
private IPhoneSubInfo getSubscriberInfo() {
// get it each time because that process crashes a lot
return IPhoneSubInfo.Stub.asInterface(ServiceManager.getService("iphonesubinfo"));
}
而上面私有函數getSubscriberInfo獲取的手機IMSI和IMEI號被硬編碼在文件android_modem.c中:
/* the Android GSM stack checks that the operator's name has changed
* when roaming is on. If not, it will not update the Roaming status icon
*
* this means that we need to emulate two distinct operators:
* - the first one for the 'home' registration state, must also correspond
* to the emulated user's IMEI
*
* - the second one for the 'roaming' registration state, must have a
* different name and MCC/MNC
*/
#define OPERATOR_HOME_INDEX 0
#define OPERATOR_HOME_MCC 310
#define OPERATOR_HOME_MNC 260
#define OPERATOR_HOME_NAME "Android"
#define OPERATOR_HOME_MCCMNC STRINGIFY(OPERATOR_HOME_MCC) \
STRINGIFY(OPERATOR_HOME_MNC)
#define OPERATOR_ROAMING_INDEX 1
#define OPERATOR_ROAMING_MCC 310
#define OPERATOR_ROAMING_MNC 295
#define OPERATOR_ROAMING_NAME "TelKila"
#define OPERATOR_ROAMING_MCCMNC STRINGIFY(OPERATOR_ROAMING_MCC) \
STRINGIFY(OPERATOR_ROAMING_MNC)
/* a function used to deal with a non-trivial request */
typedef const char* (*ResponseHandler)(const char* cmd, AModem modem);
static const struct {
const char* cmd; /* command coming from libreference-ril.so, if first
character is '!', then the rest is a prefix only */
const char* answer; /* default answer, NULL if needs specific handling or
if OK is good enough */
ResponseHandler handler; /* specific handler, ignored if 'answer' is not NULL,
NULL if OK is good enough */
} sDefaultResponses[] =
{
/* see onRadioPowerOn() */
{ "%CPHS=1", NULL, NULL },
{ "%CTZV=1", NULL, NULL },
...
{ "!+VTS=", NULL, handleSetDialTone },
{ "+CIMI", OPERATOR_HOME_MCCMNC "000000000", NULL }, /* request internation subscriber identification number */
{ "+CGSN", "000000000000000", NULL }, /* request model version */
{ "+CUSD=2",NULL, NULL }, /* Cancel USSD */
...
/* end of list */
{NULL, NULL, NULL}
};
因此用UE二進制方式打開emulator-arm.exe 或 emulator-x86.exe,並搜索字元串"+CGSN"修改為需要的IMEI號;搜索"+CIMI"修改為需要的IMSI號。需要注意的是 IMSI 號的頭六個數字"310260"不能修改,否則模擬器無法與網路連接。
例如:
001fc700h: 33 00 41 00 48 00 21 2B 56 54 53 3D 00 2B 43 49 ; 3.A.H.!+VTS=.+CI
001fc710h: 4D 49 00 33 31 30 32 36 30 30 30 30 30 30 30 30 ; MI.3102600000000
001fc720h: 30 30 00 2B 43 47 53 4E 00 30 30 30 30 30 30 30 ; 00.+CGSN.0000000
001fc730h: 30 30 30 30 30 30 30 30 00 2B 43 55 53 44 3D 32 ; 00000000.+CUSD=2
⑥ 如何將javacv軟編碼改為android硬編碼
我們都知道,圖像對象可以編碼成指定圖像格式文件保存在硬碟上,需要時再對其進行解碼讀入內存。但是除了這樣還有別的辦法可以將圖像對象保存在硬碟上嗎? 熟悉Java I/O 的人也許可以想到採用對象序列化(Object serialization)試一試,很好,但是如果你研究了 BufferedImage 類的結構後就會大失所望(至少當時我是這樣)。 BufferedImage 提供一般圖像管理。BufferedImage 對象包括另外兩個對象:Raster 和 ColorModel。Raster 對象包含另外兩個對象:DataBuffer 和 SampleModel。不幸的是,他們都沒有實現序列化所必需的 Serializable 介面,所以無法直接對他們進行對象序列化。 我在學習 JAI 的時候發現了 javax.media.jai.remote 包里有一個類 SerializableRenderedImage,這個類實現了RenderedImage, Serializable 介面,可以將 RanderedImage 對象作為構造函數的參數實例化一個可以序列化的圖像對象。 查看JDK的文檔可以知道無論 Java 2D 中的 BufferedImage 還是 JAI 中的 PlanarImage 都實現了 RenderedImage 介面,也就是說所有實現自 RenderedImage 介面的對象均可作為參數包裝出一個 SerializableRenderedImage 類型對象,將其序列化。 下面是一個簡單的例子說明了這個類的使用方法: import java.io.*; import javax.media.jai.remote.*; import java.awt.image.*; public class SomeSerializableClass implements Serializable { protected transient RenderedImage image; public SomeSerializableClass(RenderedImage image) { this.image = image; } // Serialization method. private void writeObject(ObjectOutputStream out) throws IOException { out.defaultWriteObject(); out.writeObject(new SerializableRenderedImage(image, true)); } // Deserialization method. private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); image = (RenderedImage) in.readObject(); } }
⑦ android h264硬編碼,得到流寫入文件後不能播放是怎麼回事
自己寫解碼264文件,如果用view顯示,就需要轉成bitmap顯示,或者使用opengl可以顯示yuv數據
如果已經保存成MP4格式的文件,就不需要解碼了,通過mediaplayer就能播