如何查看android浏览器内核

如何查看android浏览器内核,第1张

使用web-socket-js(采用flash实现websocket的替代方案)既然内置浏览器不支持websocket,是不是可以采用支持websocket的浏览器来实现呢?github上面就有一个chromium_webview,仔细看了一下,发现github上面只是说比原生webview多一些新特性,但是并未提及websocket,而且github的repository是安卓42的既然已经在android系统环境下,那么何不在webview下使用javascript调用java,通过java api直接创建socket与服务器相连,或者用java模拟websocket?

主要看是高通还是MTK了。不过大致相当,只是log文件名称不一样而已

手机的android log(包含 main_log、events_log、kernel_log),mainlog记录手机android上层app以及framework相关活动的log,比如你写的app打印的log,就在这里面;eventslog则主要是ActivityManager、powerManager等相关的log;Kernellog则主要是驱动相关的log。

Modem log,主要是通话相关的,比如信号强弱、连接那个网络等等

还有网络相关的netlog,看网络链接情况,抓取网络包等等

主要是以上这三个,其它还有data/anr 目录下的traces/tombstones等等,分析死机、重启还是很重要的。

看应用申请什么权限,就看mainlog就行,但是不一定有,因为一般手机log不会放开。

你可以在终端里键入命令查看其申请了什么权限: adb shell dumpsys package <包名>,或者反编译其apk,查看其AndroidManifestxml文件。

通过文档的查找,以及源码的剖析,Android的GPU信息需要通过OpenGL来获取,android framework层提供GL10来获取相应的参数,而GL10要在使用自定义的View时才可以获得,下面是获得GPU信息的例子:

1实现Render类

[java] view plaincopy

class DemoRenderer implements GLSurfaceViewRenderer {

public void onSurfaceCreated(GL10 gl, EGLConfig config)

{

Logd("SystemInfo", "GL_RENDERER = " +glglGetString(GL10GL_RENDERER));

Logd("SystemInfo", "GL_VENDOR = " + glglGetString(GL10GL_VENDOR));

Logd("SystemInfo", "GL_VERSION = " + glglGetString(GL10GL_VERSION));

Logi("SystemInfo", "GL_EXTENSIONS = " + glglGetString(GL10GL_EXTENSIONS));

}

@Override

public void onDrawFrame(GL10 arg0) {

// TODO Auto-generated method stub

}

@Override

public void onSurfaceChanged(GL10 arg0, int arg1, int arg2) {

// TODO Auto-generated method stub

}

}

2实现GLSurfaceView

[java] view plaincopy

class DemoGLSurfaceView extends GLSurfaceView {

DemoRenderer mRenderer;

public DemoGLSurfaceView(Context context) {

super(context);

setEGLConfigChooser(8, 8, 8, 8, 0, 0);

mRenderer = new DemoRenderer();

setRenderer(mRenderer);

}

}

3在Activity中 new 一个 DemoGLSurfaceView 对象

4设置这个View对象

[java] view plaincopy

public class Demo extends Activity {

@Override

public void onCreate(Bundle savedInstanceState) {

superonCreate(savedInstanceState);

GLSurfaceView glView = new DemoGLSurfaceView(this);

thissetContentView(glView);

}

}

得到config之后,直接复制到你下载来的内核文件夹kernel下,更名为config,打开终端,进入此目录(假设你放在里你的home下,即~/kernel)运行make ARCH=arm menuconfig(ARCH=arm表示编译的是arm平台的)

1获取系统的可用内存和总内存。

获取系统内存中应用的信息,需要用到ActivityManager这个类,然而当你用这个类拿数据的时候你会发现,拿到的数据不正确。用这个类的API获取系统的总内存和可用内存会出现数据不正确的情况。除了这个类,Android手机中有文件描述了这些信息——/proc/meminfo。meminfo文件中详细的记录了安卓手机的一些数据,包括可用内存和总内存。附上代码:

public static long getTotalMemSize() {

long size=0;

File file = new File("/proc/meminfo");

try {

BufferedReader buffer = new BufferedReader(new InputStreamReader(new FileInputStream(file)));

String memInfo = bufferreadLine();

int startIndex = memInfoindexOf(":");

int endIndex = memInfoindexOf("k");

memInfo = memInfosubstring(startIndex + 1, endIndex)trim();

size = LongparseLong(memInfo);

size = 1024;

bufferclose();

} catch (javaioIOException e) {

eprintStackTrace();

}

return size;

}

public static long getAviableMemSize() {

long size=0;

File file = new File("/proc/meminfo");

try {

BufferedReader buffer = new BufferedReader(new InputStreamReader(new FileInputStream(file)));

String memInfos=new String();

int i=0;

while ((memInfos=bufferreadLine())!=null){

i++;

if (i==2){

memInfo = memInfos;

}

}

int startIndex = memInfoindexOf(":");

int endIndex = memInfoindexOf("k");

memInfo = memInfosubstring(startIndex + 1, endIndex)trim();

size = LongparseLong(memInfo);

size = 1024;

bufferclose();

} catch (javaioIOException e) {

eprintStackTrace();

}

return size;

}

*** 作很简单分别是读取第一行的数据和第二行的数据,将字符串分去出,将所得值乘以1024变为byte类型。

2获取内存中运行应用的信息

首先,自然要有一个Bean文件用于存储这些信息,之后通过ActivityManager的getRunningAppProcesses()方法得到一个RunningAppProcessInfo的List。便利这个List去除我们想要的数据,存在我们的Bean文件夹中。

public static List<TaskBean> getAllTask() {

List<TaskBean>taskList=new ArrayList<>();

List<ActivityManagerRunningAppProcessInfo>runList=UIUtilsgetActManager()getRunningAppProcesses();

try {

for (ActivityManagerRunningAppProcessInfo r:runList) {

TaskBean taskBean = new TaskBean();

String processName = rprocessName;

taskBeansetPackageName(processName);

PackageInfo packageInfo = UIUtilsgetPacManager()getPackageInfo(processName, 0);

taskBeansetIcon(packageInfoapplicationInfoloadIcon(UIUtilsgetPacManager()));

taskBeansetName(packageInfoapplicationInfoloadLabel(UIUtilsgetPacManager())toString());

DebugMemoryInfo[] processInfo=UIUtilsgetActManager()getProcessMemoryInfo(new int[]{rpid});

taskBeansetMemSize(processInfo[0]getTotalPrivateDirty()1024);

if ((packageInfoapplicationInfoflags&ApplicationInfoFLAG_SYSTEM)!=0){

taskBeansetSystem(true);

}else {

taskBeansetUser(true);

}

if (taskList != null) {

taskListadd(taskBean);

for (int i=0;i<taskListsize();i++) {

if (taskListget(i)getPackageName()equals(ConstantsPACKAGE_INFO)){

taskListremove(i);

}

}

}

}

} catch (PackageManagerNameNotFoundException e) {

eprintStackTrace();

}

return taskList;

}

好了,大功告成。当你开开心心的拿到手机上调试的时候你会发现,一个数据都没有。原来,在Android50之后,谷歌处于完全考虑已经弃用了通过如上方法拿到进程中的信息。那么又应该怎么做呢?

public static List<TaskBean> getTaskInfos() {

List<AndroidAppProcess> processInfos = ProcessManagergetRunningAppProcesses();

List<TaskBean> taskinfos = new ArrayList<TaskBean>();

// 遍历运行的程序,并且获取其中的信息

for (AndroidAppProcess processInfo : processInfos) {

TaskBean taskinfo = new TaskBean();

// 应用程序的包名

String packname = processInfoname;

taskinfosetPackageName(packname);

// 湖区应用程序的内存 信息

androidosDebugMemoryInfo[] memoryInfos = UIUtilsgetActManager()

getProcessMemoryInfo(new int[] { processInfopid });

long memsize = memoryInfos[0]getTotalPrivateDirty() 1024L;

taskinfosetMemSize(memsize);

taskinfosetPackageName(processInfogetPackageName());

try {

// 获取应用程序信息

ApplicationInfo applicationInfo = UIUtilsgetPacManager()getApplicationInfo(

packname, 0);

Drawable icon = applicationInfoloadIcon(UIUtilsgetPacManager());

taskinfosetIcon(icon);

String name = applicationInfoloadLabel(UIUtilsgetPacManager())toString();

taskinfosetName(name);

if ((applicationInfoflags & ApplicationInfoFLAG_SYSTEM) == 0) {

// 用户进程

taskinfosetUser(true);

} else {

// 系统进程

taskinfosetSystem(true);

}

} catch (PackageManagerNameNotFoundException e) {

// TODO Auto-generated catch block

eprintStackTrace();

// 系统内核进程 没有名称

taskinfosetName(packname);

Drawable icon = UIUtilsgetContext()getResources()getDrawable(

Rdrawableic_launcher);

taskinfosetIcon(icon);

}

if (taskinfo != null) {

taskinfosadd(taskinfo);

for (int i=0;i<taskinfossize();i++) {

if (taskinfosget(i)getPackageName()equals(ConstantsPACKAGE_INFO)){

taskinfosremove(i);

}

}

}

}

return taskinfos;

}

好了,接下来只需要判断安装的版本就可以了:

int sysVersion = IntegerparseInt(BuildVERSIONSDK);

taskList = sysVersion > 21 TaskManagerEnginegetTaskInfos() : TaskManagerEnginegetAllTask();

好了,大功告成。数据就能正常拿到了。

进入kernel/common,这里不需要用到repo,直接用Git即可。

git clone git://androidgitkernelorg/kernel/commongit

这可能需要不少的时间,因为它会把整个Linux Kernel的代码复制下来。

如果需要某个branch的代码,用git checkout即可。比如我们刚刚拿了kernel/commongit的代码,那就先进入到common目录,然后用下面的命令:

git checkout origin/android-goldfish-2627 -b goldfish

这样我们就在本地建立了一个名为goldfish的android-goldfish-2627分支,代码则已经与android- goldgish-2627同步。我们可以通过git branch来列出本地的所有分支。

root@localhost mydroid]#git clone git://androidgitkernelorg/kernel/commongit kernel

//把服务器上的所有kernel都下载到本地kernel目录,想只下载一个版本的kernel是不可能的因为服务器上只有一个包含kernel的commongit文件,而没有单个版本kernel的git文件

[root@localhost mydroid]#cd kernel

[root@localhost kernel]# ls

arch CREDITS drivers include Kbuild MAINTAINERS net samples sound

block crypto firmware init kernel Makefile README scripts usr

COPYING Documentation fs ipc lib mm REPORTING-BUGS security virt

[root@localhost kernel]# git branch -a

android-2627

diff

remotes/origin/HEAD -> origin/android-2627

remotes/origin/archive/android-2625

remotes/origin/archive/android-2627

remotes/origin/archive/android-2629

remotes/origin/archive/android-2632

直接在系统主屏目录下点击屏幕下方,导航按键上方的Menu键,点击右下角的选项“设置”(Settings),进入设置菜单后在屏幕上用手指轻轻向下滑动至屏幕最低端,这是会出现“About Phone”的选项分类,点击进入。进入后再在屏幕上用手指轻轻向下滑动至屏幕最低端,从上往下倒数第四项就是目前的系统版本,而最后一项则是系统更为详细的版本数据。倒数第二项为Linux内核版本,倒数第三项为系统基带版本。

回答不容易,希望能帮到您,满意请帮忙采纳一下,谢谢 !

以上就是关于如何查看android浏览器内核全部的内容,包括:如何查看android浏览器内核、如何抓取kernel,mobile,modem的log-Android驱动开发、android 如何取gpu信息等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9537216.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存