2019-05-12 00:25:49 dreamer2333 阅读数 793
  • Android底层技术:Java层系统服务(Android Service)

    为什么我们需要学习撰写系统服务呢? 底层系统服务是Android 框架裡接近Linux/Driver 的部分。为了充分发挥硬件设备的差異化特性,系统服务是让上层Java 应用程序來使用Driver/HW Device 特色的重要管道。于此,先仔细解析Java层系统服务的架构,然后阐述这系统服务的代码开发要点,以及其API设计方法。

    32490 人正在学习 去看看 高煥堂

新版本的AS在无法通过Tools->Android->device monitor打开Android Device Monitor

方法1:找到sdk文件下的tools文件找到monitor.bat点击运行,等待几秒

方法2:win+R打开打开电脑命令窗口,输入cmd进入命令提示符,输入monitor.bat所在路径

可能遇到的问题:

1.

原因:JDK版本是1.8以下

解决方案:建议先下载jdk1.8再安装AS,如果之前有jdk并已经下载了AS可以重新下载jdk1.8再将名字改为与之前版本的文件同名并删除之前的jdk(记住配置环境变量JAVA_HOME、PATH、CLASSPATH) 

2.

原因:JDK的位数与自己电脑的位数不一致(可以通过java -version查看,如果是64位会显示64-Bit)

解决方案:重新下载与1的解决方案一致

2017-09-30 17:22:59 dzkdxyx 阅读数 723
  • Android底层技术:Java层系统服务(Android Service)

    为什么我们需要学习撰写系统服务呢? 底层系统服务是Android 框架裡接近Linux/Driver 的部分。为了充分发挥硬件设备的差異化特性,系统服务是让上层Java 应用程序來使用Driver/HW Device 特色的重要管道。于此,先仔细解析Java层系统服务的架构,然后阐述这系统服务的代码开发要点,以及其API设计方法。

    32490 人正在学习 去看看 高煥堂

前提:因为工作电脑卡的不行,所以系统硬盘就切换为固态硬盘,就重装系统了,升级完了之后,觉得焕然一新,轻松+愉快;前几天准备用Android Device Monitor,却发现打不开直接报错了(囧哭)
正好国庆前一天,工作不是很紧张,就把先这个问题解决了,避免影响之后的工作

报错log(在目录sdk/tools/lib/monitor-x86_64/×××.log)

!ENTRY org.eclipse.osgi 4 0 2017-09-30 16:23:09.769
!MESSAGE Application error
!STACK 1
org.eclipse.core.runtime.CoreException: Plug-in com.android.ide.eclipse.monitor was unable to load class com.android.ide.eclipse.monitor.MonitorApplication.
    at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.throwException(RegistryStrategyOSGI.java:194)
    at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:176)
    at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905)
    at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
    at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:191)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:353)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1438)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1414)
Caused by: org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter$TerminatingClassNotFoundException: An error occurred while automatically activating bundle com.android.ide.eclipse.monitor (5).
    at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:122)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:469)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
    at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:464)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at org.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:340)
    at org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:229)
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass(AbstractBundle.java:1212)
    at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:174)
    ... 16 more
Caused by: org.osgi.framework.BundleException: The activator com.android.ide.eclipse.monitor.MonitorPlugin for bundle com.android.ide.eclipse.monitor is invalid
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator(AbstractBundle.java:172)
    at org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:679)
    at org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.start(AbstractBundle.java:300)
    at org.eclipse.osgi.framework.util.SecureAction.start(SecureAction.java:440)
    at org.eclipse.osgi.internal.loader.BundleLoader.setLazyTrigger(BundleLoader.java:263)
    at org.eclipse.core.runtime.internal.adaptor.EclipseLazyStarter.postFindLocalClass(EclipseLazyStarter.java:107)
    ... 28 more
Caused by: java.lang.UnsupportedClassVersionError: com/android/prefs/AndroidLocation$AndroidLocationException : Unsupported major.minor version 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:803)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.defineClass(DefaultClassLoader.java:188)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClassHoldingLock(ClasspathManager.java:632)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:607)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:568)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:492)
    at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:465)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
    at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:395)
    at org.eclipse.osgi.internal.loader.SingleSourcePackage.loadClass(SingleSourcePackage.java:35)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:461)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:421)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:412)
    at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    at com.android.ide.eclipse.monitor.MonitorPlugin.<clinit>(MonitorPlugin.java:28)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at java.lang.Class.newInstance(Class.java:383)
    at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadBundleActivator(AbstractBundle.java:167)
    ... 34 more

根据log google搜索解决方案

先根据下面log关键字搜索

Caused by: java.lang.UnsupportedClassVersionError: com/android/prefs/AndroidLocation$AndroidLocationException : Unsupported major.minor version 52.0

https://stackoverflow.com/questions/42661578/android-device-monitor-will-not-launch-either-from-android-studio-or-from-termi
给出的解决方式是:安装java8
于是将本地的java7,切换为java8,但是依旧无效;

切换关键字搜索:

org.eclipse.core.runtime.CoreException: Plug-in com.android.ide.eclipse.monitor was unable to load class com.android.ide.eclipse.monitor.MonitorApplication.、

https://issuetracker.google.com/issues/36970884
给出的解决方案是下载SDK之前老的版本,文档里有给出可以老的sdk版本
Currently the only workaround is to download the previous version of SDK separately, and replace the contents of tools/lib/monitor folder with the one from the previous version. You can get the previous version here:

https://dl.google.com/android/android-sdk_r21.1-windows.zip
https://dl.google.com/android/android-sdk_r21.1-macosx.zip
https://dl.google.com/android/android-sdk_r21.1-linux.tgz

亲证,替换sdk/tools文件夹即可成功打开Android Device Monitor

后记

将java8 切换至java7之后,依旧有效,看来这个问题跟java版本没有问题

作为Android新进菜鸟一枚,多谢大神们给出的解决方案,虽只是搬运别人的想法,但整理到自己的博客是为了方便遇到此类问题能够快速找到解决方案

2017-07-22 16:49:27 qq_27035123 阅读数 19246
  • Android底层技术:Java层系统服务(Android Service)

    为什么我们需要学习撰写系统服务呢? 底层系统服务是Android 框架裡接近Linux/Driver 的部分。为了充分发挥硬件设备的差異化特性,系统服务是让上层Java 应用程序來使用Driver/HW Device 特色的重要管道。于此,先仔细解析Java层系统服务的架构,然后阐述这系统服务的代码开发要点,以及其API设计方法。

    32490 人正在学习 去看看 高煥堂

问题1:解决打开Android Device Monitor之后一片空白

问题描述

将手机升级到Android 7.0后,打开android Device Monitor(DDMS)后,File Explorer中显示一片空白。如下:

无法显示目录树

Android Device Monitor (DDMS)的版本如下:

Android Device Monitor的版本 25.1.7

不管用monitor.bat(注ddms.bat已弃用)还是通过Android Studio中的图标启动(如下图),都是一样的问题。

点击蓝色框中的button,启动Android Device Monitor。
这里写图片描述

解决方法

情况一:通过monitor.bat或者Android Studio中图标启动时**

  • 第一步:下载ddmlib.jar

    ddmlib.jar的下载位置
    文件大小:282KB。

    或者,百度云:http://pan.baidu.com/s/1sl4KaOP 提取密码:sygc

  • 第二步:在Android SDK的tools目录中搜索ddmlib.jar

    当前目录为Android SDK的tools目录。

    $ find . -iname *ddmlib*
    ./lib/ddmlib.jar   (不用替换它)
    ./lib/monitor-x86_64/configuration/org.eclipse.osgi/bundles/2/1/.cp/libs/ddmlib.jar123123

    可能会搜出多个,我们要替换的是tools/lib/monitor-x86_64/configuration/org.eclipse.osgi/bundles/2/1/.cp/libs/ddmlib.jar

    有可能你的目录与这个不同,请以实际目录位置为准。

  • 第三步:用刚才下载到的ddmlib.jar替换刚搜到的ddmlib.jar

    需要注意的是,替换的时候,先将Android Device Monitor关掉。

  • 第四步:再次打开Android Device Monitor,就可以看到目录树了(如下)

    这里写图片描述

情况二:在eclipse中显示File Explorer**

前提是下载了ddmlib.jar。

  • 第一步:搜索eclipse 中的 ddmlib.jar

例如,在我的eclipse中,ddmlib.jar在eclipse/configuration/org.eclipse.osgi/8/0/.cp/libs目录下。

$ find . -iname ddmlib.jar
./configuration/org.eclipse.osgi/8/0/.cp/libs/ddmlib.jar1212

你的ddmlib.jar所在的位置可能与我的不同,请以实际目录位置为准。

  • 第二步:用刚才下载到的ddmlib.jar替换刚搜到的ddmlib.jar

  • 第三步:重新打开eclipse,File Explorer就可以显示正常了

    这里写图片描述

问题2:关于操作db文件导出Failed to pull selection: open failed: Permission denied问题的处理方法

问题描述

在遇到这个问题之前,你可能连data这个目录都打不开。。

这里写图片描述

解决办法

对此,解决办法是去到安卓的adb目录/Android/sdk/platform-tools下按住Shift右键“在此处打开命令行窗口”,进入命令行窗口后:需要操作的命令有:
1、adb shell进入shell模式

adb shell

2、获得所有root权限

su

3、先把文件夹权限全部打开

chmod  -R 777 /data/  

4、给里边的db文件权限设置成可读可写可操作

chmod  777 /data/data/(项目全包名)/databases/xxx.db

5、cd命令进入db文件所在目录:

cat my_datbase_name.db > /sdcard/my_database_name_temp.db

复制内容到一个temp文件中去,这一步很关键,目的是为了绕过有时候对文件直接pull的话,会找不到文件目录这一后面会出现的情况。

6、运行两次exit直接返回到正常的终端提示符

7、将temp文件拉出来,拉到你adb.exe存放的目录下,避免直接与数据库文件做操作,或者你也可以新建一个目录(事先新建好哟)
adb pull /sdcard/my_database_name_temp.db (其他目录如 F:/db)


补充上面提到的会出现的问题:
你如果用命令 adb pull /data/data/全包名/databases/xxx.db将数据库db文件拉出来的话,会找不到目录的
error
提取到的数据库文件可以用SQLite打开,直接拖拽到里面就可以显示
下面是我成功提取数据库文件sims.db的截图:
这里写图片描述

问题3:利用ddms查看应用的sharedprefence文件

问题描述:

当我使用DDMS查看file系统的时候,发现我明明有这个应用,为什么找不到这个应用呢?好神奇!

解决办法

没办法,既然GUI不给力,我们只能进入命令行来看了

D:>adb shell
zsl865:/ $ su
zsl865:/ # chmod -R 777 data/data/

后边基本就是linux的操作了,然后打开了data/data居然找到了之前的应用,然后进去之后发现了对应的sp文件

2018-05-04 20:25:57 weixin_40046203 阅读数 18539
  • Android底层技术:Java层系统服务(Android Service)

    为什么我们需要学习撰写系统服务呢? 底层系统服务是Android 框架裡接近Linux/Driver 的部分。为了充分发挥硬件设备的差異化特性,系统服务是让上层Java 应用程序來使用Driver/HW Device 特色的重要管道。于此,先仔细解析Java层系统服务的架构,然后阐述这系统服务的代码开发要点,以及其API设计方法。

    32490 人正在学习 去看看 高煥堂

相信很多更新了AndroidStudio3.0的小伙伴会发现无法在工具栏的的Tools->Android->device monitor,打开DeviceMonitor。

今天偶然看到

Google的官方文档:

However, most components of the Android Device Monitor are deprecated in favor of updated tools available in Android Studio 3.0 and higher.

大概意思就是:Android设备监视器的大多数组件都不支持在Android Studio 3.0和更高版本中使用更新的工具。

但是如果我们还是需要使用Android Device Monitor 该怎么办呢?

仍然可以到Android的SDK目录下寻找 Tools->lib->monitor-x86_64(monitor-x86)中找到monitor.exe

进行手动启动。

我的目录是:

C:\Users\wangpeijiang\AppData\Local\Android\Sdk\tools\lib\monitor-x86_64


2019-07-22 11:07:08 CodeFarmer__ 阅读数 851
  • Android底层技术:Java层系统服务(Android Service)

    为什么我们需要学习撰写系统服务呢? 底层系统服务是Android 框架裡接近Linux/Driver 的部分。为了充分发挥硬件设备的差異化特性,系统服务是让上层Java 应用程序來使用Driver/HW Device 特色的重要管道。于此,先仔细解析Java层系统服务的架构,然后阐述这系统服务的代码开发要点,以及其API设计方法。

    32490 人正在学习 去看看 高煥堂

原因就不多说了
Android Studio 3.0开始弃用Android Device Monitor
刚开始网上搜了一大堆,基本上没用,最后在YouTube上找到解决方案
AndroidStudio3.0以上打开Android Device Monitor
解决报错 an error has occurred.see the log file
总结如下
打开到SDK的目录,进入tools
在这里插入图片描述
双击monitor.bat
如果打开Android Device Monitor那就没事了
如果没打开或报如下错an error has occurred.see the log file···
在这里插入图片描述
尝试右键使用管理员身份打开
若未解决进行如下操作
找到AndroidStudio安装目录
在这里插入图片描述
复制 jre
进入SDK的/tools/lib 目录
再根据电脑机型进入monitor-x86_64 或 monitor-x86
在这里插入图片描述

粘贴复制的jre
在这里插入图片描述

然后打开模拟器,再次双击monitor.bat就可以看到Android Device Monitor打开了。
如果还没打开,再尝试右键以管理员身份打开,一般到上一步就可以打开了。
在这里插入图片描述

没有更多推荐了,返回首页