分类:android
Android获取Root权限和执行Shell脚本
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class ShellUtil { /** * 获取Root权限 * * @return */ public static boolean getRoot() { boolean res = false; try { Process process = Runtime.getRuntime().exec("su -c exit"); int exitValue = process.waitFor(); if (exitValue == 0) { res = true; } exitProcess(process); } catch (Exception e) { e.printStackTrace(); } return res; } /** * 执行Shell命令(必须有Root权限) * * @param cmd */ public static String execShell(String cmd) { StringBuffer sb = new StringBuffer(); try { Process process = Runtime.getRuntime().exec("su -c " + cmd); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } reader.close(); exitProcess(process); } catch (IOException e) { e.printStackTrace(); } return sb.toString(); } /** * 获取FD数量 * * @return */ public static int getFDNumber() { int res = 0; try { int pid = android.os.Process.myPid(); Process process = Runtime.getRuntime().exec("ls /proc/" + pid + "/fd"); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); while (reader.readLine() != null) { res++; } reader.close(); exitProcess(process); } catch (IOException e) { e.printStackTrace(); } return res; } /** * 退出进程 * * @param process */ private static void exitProcess(Process process) { try { if (process != null) { process.exitValue(); } } catch (IllegalThreadStateException e) { process.destroy(); } } }
Android查看密钥和APK签名
查看密钥签名:
keytool -list -v -keystore 目标文件路径(debug.keystore)
查看APK签名:
keytool -printcert -file 目标文件路径(CERT.RSA)
Android logcat 后台运行
后台运行:
adb logcat -v time -n 100 -r 10240 -f /sdcard/Logs/log &
查看进程:
ps logcat
参考链接:
Android源码在线查看
【转】Android退到后台与切到前台
转载自:Android退到后台与切到前台
最近开发了一款TV版app,主要功能是视频通话,所以要求机顶盒是一开机,就要把app打开,因为时刻有别人打过来。然后点击返回按钮,需要把app切到后台,但是app仍需要存活,需要收到消息。所以这里就设计到了app退到后台与切到前台的功能。
app退到后台
1.一般情况下,是启动Home页就可以实现这个功能,代码如下
Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); startActivity(intent);
这里需要注意的是,如果Launcher和Home不是同一个,那就不能这么用。比如说华数机顶盒Launcher,启动第三方app都是从这里打开的。然后这里如果执行了上述代码,启动了Home,那就跳转到了Android系统的Home,与退到后台的效果有所出入了。
2.执行Activity#moveTaskToBack()
moveTaskToBack(false);
使用Android AlarmManger做定时任务
第一步:配置AndroidManifest
// 接收开机启动广播权限 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> // 广播接收器 <receiver android:name=".AlarmReceiver" > <intent-filter> <action android:name="com.android.test.ALARM" /> <action android:name="com.android.test.SETTING" /> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver>
ADB常用命令
安装应用
adb install -r test.apk
删除应用
adb uninstall com.android.test
启动应用
adb shell am start
-n "com.android.test/com.android.test.MainActivity"
-a android.intent.action.MAIN
-c android.intent.category.LAUNCHER
强制关闭应用 adb shell am force-stop com.android.test 注:给关闭状态的应用发送广播需要添加 FLAG_INCLUDE_STOPPED_PACKAGES 代码:intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); 命令:adb shell am broadcast -a com.android.test --include-stopped-packages
获取Android系统开机时间(秒):
Linux下:adb shell cat /proc/stat | grep btime
Windows下:adb shell cat /proc/stat | findstr btime
获取设备网络配置信息:
adb shell netcfg
参考链接:
adb shell am broadcast 发送广播通知,在程序中使用
adb shell am broadcast 参数
[-a <ACTION>]
[-p <PKG>]
[-d <DATA_URI>]
[-t <MIME_TYPE>]
[-c <CATEGORY> [-c <CATEGORY>] ...]
[-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE> ...]
[--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...]
[--ei <EXTRA_KEY> <EXTRA_INT_VALUE> ...]
[--exclude-stopped-packages]
[--include-stopped-packages]
例如: adb shell am broadcast -a com.android.test -p com.android.test --es test_string "this is test string" --ei test_int 100 --ez test_boolean true 说明:蓝色为key,红色为alue,分别为String类型,int类型,boolean类型
Android延时执行操作
new Handler().postDelayed(new Runnable() { @Override public void run() { // 要执行的操作 } }, 1000 * 10); // 10秒后执行Runnable中的run方法