當前位置:首頁 » 凈水方式 » android反射過濾

android反射過濾

發布時間: 2021-02-27 15:32:55

① 怎麼反射android的隱藏API,例如我要反射出「IBatteryStats」類

在源碼中編譯還反射幹嘛?直接用不得了~
反射只能發射Client端的對象,但是內要知道,好多對象都是在容Server的,Client只是個代理。
所以凡是介面類,反射都不一定能解決問題。
如果是開發第三方應用,反射肯定有局限,如果是系統級開發,最好別用反射,影響效率。

② android 怎麼用反射獲取對象

通過類名獲取類。
Class serviceManager = Class.forName("Android.os.ServiceManager");

獲取方法
Method method = serviceManager.getMethod("getService", String.class);

調用方法
method.invoke(serviceManager.newInstance(), "phone");

侯捷談Java反射機制

http://blog.csdn.net/njchenyi/article/details/1620939

http://www.blogjava.net/zh-weir/archive/2011/03/26/347063.html

③ 您好!我想問下android中隱藏的介面 用反射怎麼來實現謝謝啦 幫個忙

你這有問題啊,反射只能拿到方法,是需要你自己去實現onCapture
invoke(int[] byte)方法調用的,你都不知道哪裡調了他這個方法,怎麼可能拿到具體數據值

④ android如何通過反射修改private static final的值

[mw_shl_code=java,true]import java.lang.reflect.Field; public class FieldTest { public static void main(String[] args) { try { A a = new A(); Field field = a.getClass().getDeclaredField("a"); field.setAccessible(true); field.set(a, 2); System.out.println(field.get(a)); } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } } class A { private static final int a = 1; } [/mw_shl_code] 到eoeAndroid網站查看回答詳情>>

⑤ Android中如何通過反射調用setUsbTethering()方法

Usb
setting 中tethering 設置流程

一 資源位置及入口文件

USB
tethering, usb_tethering_button_text

Xml/tether_prefs.xml------usb_tether_settings,布局文件

packages/apps/Settings/AndroidManifest.xml

<!-- Keep compatibility with old
shortcuts. -->

<activity-alias
android:name=".TetherSettings"

android:label="@string/tether_settings_title_all"

android:clearTaskOnLaunch="true"

android:exported="true"

android:targetActivity="Settings$TetherSettingsActivity">

<meta-data
android:name="com.android.settings.FRAGMENT_CLASS"

android:value="com.android.settings.TetherSettings"
/>

<meta-data
android:name="com.android.settings.TOP_LEVEL_HEADER_ID"

android:resource="@id/wireless_settings"
/>

<meta-data
android:name="com.android.settings.PARENT_FRAGMENT_TITLE"

android:resource="@string/wireless_networks_settings_title"
/>

<meta-data
android:name="com.android.settings.PARENT_FRAGMENT_CLASS"

android:value="com.android.settings.Settings$WirelessSettingsActivity"
/>

</activity-alias>

TetherSettings.java

二 觸發流程

2.1
TetherSettings.java

packages/apps/Settings/src/com/android/settings/TetherSettings.java

onPreferenceTreeClick

SXlog.d(TAG,
"onPreferenceTreeClick - setusbTethering(" + newState + ")
mUsbTethering: " + mUsbTethering);

setUsbTethering(true);

下面是設置時抓取的log日誌

D/TetherSettings( 543): onPreferenceTreeClick -
setusbTethering(true) mUsbTethering: true

D/Tethering(
271): setUsbTethering(true)

D/UsbDeviceManager( 271):
setCurrentFunction(rndis) default: false

W/UsbDeviceManager( 271): handleMessage:
2

W/UsbDeviceManager( 271): setEnabledFunctions:
functions = rndis

W/UsbDeviceManager( 271): setEnabledFunctions,
mDefaultFunctions: mtp,adb

W/UsbDeviceManager( 271): setEnabledFunctions,
mCurrentFunctions: mtp,adb

D/UsbDeviceManager( 271): setEnabledFunctions,
mSettingFunction: mtp,adb

W/UsbDeviceManager( 271): containsFunction,
functions: rndis

W/UsbDeviceManager( 271): containsFunction,
function: adb

W/UsbDeviceManager( 271): containsFunction
index: -1

W/UsbDeviceManager( 271): addFunction,
functions: rndis

W/UsbDeviceManager( 271): addFunction, function:
adb

W/UsbDeviceManager( 271): containsFunction,
functions: rndis

W/UsbDeviceManager( 271): containsFunction,
function: acm

W/UsbDeviceManager( 271): containsFunction
index: -1

W/UsbDeviceManager( 271): containsFunction,
functions: rndis,adb

W/UsbDeviceManager( 271): containsFunction,
function: acm

W/UsbDeviceManager( 271): containsFunction
index: -1

D/UsbDeviceManager( 271):
setUsbConfig(none)

W/UsbDeviceManager( 271): setUsbConfig, config:
none

public
boolean onPreferenceTreeClick(PreferenceScreen
screen, Preference preference) {

ConnectivityManager cm =

(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

if
(preference == mUsbTether) {

if
(!mUsbTethering) {

boolean
newState = mUsbTether.isChecked();

mUsbTethering = true;

mUsbTetherCheckEnable = false;

mUsbTether.setEnabled(false);

SXlog.d(TAG,
"onPreferenceTreeClick - setusbTethering(" + newState + ")
mUsbTethering: " + mUsbTethering);

if
(newState) {

startProvisioningIfNecessary(USB_TETHERING);

} else
{

setUsbTethering(newState);

}

} else
{

return
true;

}

} else if
(preference == mBluetoothTether) {

private void
setUsbTethering(boolean
enabled) {

ConnectivityManager cm =

(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

if
(cm.setUsbTethering(enabled) !=
ConnectivityManager.TETHER_ERROR_NO_ERROR) {

mUsbTether.setChecked(false);

mUsbTether.setSummary(R.string.usb_tethering_errored_subtext);

return;

}

mUsbTether.setSummary("");

}

2.2
ConnectivityManager.java

frameworks/base/core/java/android/net/ConnectivityManager.java

private
final IConnectivityManager
mService;

public int
setUsbTethering(boolean
enable) {

try
{

return
mService.setUsbTethering(enable);

} catch
(RemoteException e) {

return
TETHER_ERROR_SERVICE_UNAVAIL;

}

}

manager 和service有一個對應關系,固定的規則。 manager是為了sdk誕生的,方便app開發者調用。其實可以直接調用service,如mountservice是沒有mountmanager的。

service是在系統起來是就被android系統啟動的,而manager是後期有需要時實例化起來的。

Service的目錄在:/frameworks/base/services/java/com/android/server/

manager的目錄在:frameworks/base/core/java/android

2.3
ConnectivityService.java

frameworks/base/services/java/com/android/server

private
Tethering mTethering;

public int
setUsbTethering(boolean
enable) {

enforceTetherAccessPermission();

if
(isTetheringSupported()) {

return
mTethering.setUsbTethering(enable);

} else
{

return
ConnectivityManager.TETHER_ERROR_UNSUPPORTED;

}

}

2.4
Tethering.java

frameworks/base/services/java/com/android/server/connectivity/Tethering.java

public int
setUsbTethering(boolean
enable) {

UsbManager usbManager = (UsbManager)mContext.getSystemService(Context.USB_SERVICE);

………………

else
{

mUsbTetherRequested = true;

usbManager.setCurrentFunction(UsbManager.USB_FUNCTION_RNDIS,
false);

}

通過service,來獲取manager,進行操作。這個tethering.java的構造函數

public
Tethering(Context context,
INetworkManagementService nmService,

INetworkStatsService statsService,
IConnectivityManager connService, Looper looper)
{

Context是獲取全局信息的介面,

2.5 UsbManager.java

/frameworks/base/core/java/android/hardware/usb/UsbManager.java

public void setCurrentFunction(String
function, boolean makeDefault) {

try {

mService.setCurrentFunction(function,
makeDefault);

}
catch (RemoteException e) {

Log.e(TAG, "RemoteException in
setCurrentFunction", e);

}

}

2.6
frameworks/base/services/java/com/android/server/usb$

mengfd1@tablet-C:~/work/A2107/frameworks/base/services/java/com/android/server$
cd usb

mengfd1@tablet-C:~/work/A2107/frameworks/base/services/java/com/android/server/usb$
ls

UsbDeviceManager.java UsbHostManager.java
UsbService.java UsbSettingsManager.java

/frameworks/base/services/java/com/android/server/usb/UsbService.java

public void setCurrentFunction(String function, boolean
makeDefault) {

mContext.(android.Manifest.permission.MANAGE_USB,
null);

if
(mDeviceManager != null) {

mDeviceManager.setCurrentFunction(function,
makeDefault);

}
else {

throw new IllegalStateException("USB device
mode not supported");

}

}

/frameworks/base/services/java/com/android/server/usb/UsbDeviceManager.java

public void setCurrentFunction(String
function, boolean makeDefault) {

if
(DEBUG) Slog.d(TAG, "setCurrentFunction(" + function + ") default:
" + makeDefault);

mHandler.sendMessage(MSG_SET_CURRENT_FUNCTION,
function, makeDefault);

}

public void handleMessage(Message msg)
{

case
MSG_SET_CURRENT_FUNCTION:

String function =
(String)msg.obj;

boolean makeDefault = (msg.arg1 ==
1);

if (function != null
&&
function.equals(UsbManager.USB_FUNCTION_CHARGING_ONLY))
{

mSettingUsbCharging = true;

SXlog.d(TAG, "handleMessage -
MSG_SET_CURRENT_FUNCTION - USB_FUNCTION_CHARGING_ONLY -
makeDefault: " + makeDefault);

} else {

mSettingUsbCharging = false;

}

setEnabledFunctions(function,
makeDefault);

SXlog.d(TAG, "handleMessage -
MSG_SET_CURRENT_FUNCTION - function: " +
function);

break;

private void setEnabledFunctions(String
functions, boolean makeDefault) {

private boolean setUsbConfig(String config) {

SystemProperties.set("sys.usb.config",
config);

⑥ Android中反射調用方法需要被調用的方法有什麼前提條件嗎

可能是因為classloader沒有載入那個類,既然是class not found,第一步還沒搞定呢,和反射還搭不上關系。

⑦ android怎麼在個應用通過反射調用其它應用中的方法/修改變數值等每次都報ClassNotFo

這種問題最好把代碼跳出來,否則誰也無能為力。

⑧ android 中是否合適使用反射機制,如果可以,應該用在哪些地方使用,要注意什麼問題,如果不合適,為什麼呢

當然適合。
父類中的私有變數和方法想在子類中訪問用反射就能實現。版
比如默認dialog的確定和權取消按鍵都會讓dialog消失,如果不想讓dialog消失,那麼用反射就能實現。
當然如果能通過重寫父類方法的地方就不用反射。

⑨ android為什麼通過反射方法調用方法

Class yourClass = Class.forName("YourClass");//假設你要動態載入的類為YourClass Class[] parameterTypes = new Class[1];//這里你要調用的方法只有一個參數 parameterTypes[0] = String[].class;//參數類型為String[] Method method = yourClass.getMethod("main", parameterTypes);//這里假設你的類為YourClass,而要調用的方法是main Object[] args = new Object[1]; String[] argments = new String[2];//假設你要傳入兩個參數 argments[0] = "OK"; argments[1] = "NO"; args[0] = argments; method.invoke(yourClass.newInstance(), args);//調用方法

⑩ android 反射代碼能混淆嗎

app發布前,最復好做一下制掃描和加固,應用掃描可以通過靜態代碼分析、動態數據跟蹤,定位出風險代碼(目前好多都是只告訴APK包裡面有風險),同時監控敏感數據的異常行為。
加固可以在一定程度上保護自己核心代碼演算法,提高破解/盜版/二次打包的難度,緩解代碼注入/動態調試/內存注入攻擊等
但也對應用的兼容性有一定影響,加殼技術不行的話,還會影響程序運行效率.
目前市面上有很多第三方加固的平台, 如果新應用發布前需要掃描或者加固的話,可以先試試免費的,例如騰訊御安全,建議自己先去掃描測試下。

熱點內容
丁度巴拉斯情人電影推薦 發布:2024-08-19 09:13:07 瀏覽:886
類似深水的露點電影 發布:2024-08-19 09:10:12 瀏覽:80
《消失的眼角膜》2電影 發布:2024-08-19 08:34:43 瀏覽:878
私人影院什麼電影好看 發布:2024-08-19 08:33:32 瀏覽:593
干 B 發布:2024-08-19 08:30:21 瀏覽:910
夜晚看片網站 發布:2024-08-19 08:20:59 瀏覽:440
台灣男同電影《越界》 發布:2024-08-19 08:04:35 瀏覽:290
看電影選座位追女孩 發布:2024-08-19 07:54:42 瀏覽:975
日本a級愛情 發布:2024-08-19 07:30:38 瀏覽:832
生活中的瑪麗類似電影 發布:2024-08-19 07:26:46 瀏覽:239