标签: dalvik

我如何执行Dalvik操作码

我想在Android上的应用程序中直接针对正在运行的Dalvik VM实例执行操作码.我正在寻找类似于C asm功能的东西.我有dalvik的操作码列表,但是我不熟悉如何直接执行它们,或者将它们写出到.class文件,并在运行的应用程序中针对dalvikvm等某种VM CLI命令执行它们.

assembly android dalvik opcodes

5
推荐指数
1
解决办法
1265
查看次数

如何分析Dalvik GC的行为?

我正在Android上开发一个应用程序.它是一个长期运行的应用程序,可持续处理传感器数据 在运行应用程序时,我在logcat中看到了很多GC消息; 大约一秒钟.

这很可能是因为正在创建对象并在循环中立即取消引用.

如何找到立即创建和发布的对象?

我尝试过的所有java堆分析工具(*)都对堆上对象的数量和大小感到困扰.虽然它们很有用,但我更感兴趣的是找到创建临时短寿命对象的网站.

(*)我想jcatEclipse MAT.我无法开始hat使用Android堆转储; 它抱怨不支持的转储文件版本.

java android memory-management dalvik heap-dump

5
推荐指数
1
解决办法
1165
查看次数

dalvikvm中的Android异常

当我在手机上启动应用程序时,我从日志中收到以下错误:

E/dalvikvm( 2052): No free temp registers
E/dalvikvm( 2052): Jit: aborting trace compilation, reverting to interpreter
E/dalvikvm( 2052): No free temp registers
E/dalvikvm( 2052): Jit: aborting trace compilation, reverting to interpreter
Run Code Online (Sandbox Code Playgroud)

发生了什么 ?

android exception dalvik

5
推荐指数
1
解决办法
8016
查看次数

java编译器会优化对最终静态变量的方法调用吗?当它成为dalvik代码时会发生什么?

我有以下代码

 float square(float val) { return val*val;}
 boolean isInCircle(final float x,final float y) {

        float squareDistance = square(cx - x) + square(cy - y);
        return squareDistance < square(RADIUS);
    }
Run Code Online (Sandbox Code Playgroud)

这里RADIUS是一个static final float.

java编译器会优化调用square(RADIUS)吗?

转换为dalvik代码时会发生什么android?它会保持优化吗?

java android javac dalvik compiler-optimization

5
推荐指数
1
解决办法
769
查看次数

应用程序启动时加载程序dalvik.system.PathClassLoader中的java.lang.ClassNotFoundException

我有一个由另一家公司制作的pp,以便对它进行一些更新,但我无法理解.我已经在这个问题上挣扎了将近10个小时并且已经经历了很多线程,建议不同的解决方案来解决这个错误,但没有运气.

我试图以不同的方式清理,重建和更改我的清单文件,但没有成功.但我仍然认为问题可能在清单文件中,但不确定.

12-11 09:47:47.687: E/AndroidRuntime(9756): FATAL EXCEPTION: main    
12-11 09:47:47.687: E/AndroidRuntime(9756): java.lang.RuntimeException: Unable to instantiate application com.visma.falck.android.assistance.FalckAssistanceApplication: java.lang.ClassNotFoundException: com.visma.falck.android.assistance.FalckAssistanceApplication in loader dalvik.system.PathClassLoader[/data/app/com.visma.falck.android.assistance-1.apk]    
12-11 09:47:47.687: E/AndroidRuntime(9756):     at android.app.LoadedApk.makeApplication(LoadedApk.java:490)    
12-11 09:47:47.687: E/AndroidRuntime(9756):     at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3901)    
12-11 09:47:47.687: E/AndroidRuntime(9756):     at android.app.ActivityThread.access$2200(ActivityThread.java:135)    
12-11 09:47:47.687: E/AndroidRuntime(9756):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1098)    
12-11 09:47:47.687: E/AndroidRuntime(9756):     at android.os.Handler.dispatchMessage(Handler.java:99)    
12-11 09:47:47.687: E/AndroidRuntime(9756):     at android.os.Looper.loop(Looper.java:150)    
12-11 09:47:47.687: E/AndroidRuntime(9756):     at android.app.ActivityThread.main(ActivityThread.java:4385)    
12-11 09:47:47.687: E/AndroidRuntime(9756):     at java.lang.reflect.Method.invokeNative(Native Method)    
12-11 09:47:47.687: E/AndroidRuntime(9756):     at java.lang.reflect.Method.invoke(Method.java:507)    
12-11 09:47:47.687: E/AndroidRuntime(9756):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849)    
12-11 09:47:47.687: E/AndroidRuntime(9756):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607)    
12-11 09:47:47.687: …
Run Code Online (Sandbox Code Playgroud)

java android dalvik android-manifest classnotfoundexception

5
推荐指数
1
解决办法
5529
查看次数

了解Android紧密循环/旋转暂停错误

我正在开发一款关于android的游戏,"Space RPG" - 目前只在大多数Galaxy S4和HTC Ones上看到这个错误.这都是Java.

游戏将停止,当我尝试调试进程并暂停有问题的线程时,它将不会挂起,并且会发生旋转挂起错误.线程转储让我看到它在一个特定的while循环中,它正在采取所需的"结束位置"并在不断增加的距离步骤向后迭代以找到"起始位置".

这是事情变得烦人的地方.我可以验证循环无法无限运行,即使条件是while(true),在我的break被调用之前它不可能运行超过200次迭代(这个断言由正在运行的代码备份)我试过的每一部电话).

为了帮助我缓解这个问题,我在循环中添加了一个简单的递增变量,如果它超过1000,它会记录一些东西,所以我可以看到DID运行太多次,以防万一设置了一些变量严重或某事. 当此计数器代码存在时,不会发生崩溃/挂起.我也没有看到任何日志表明它跑了1000多次.

如果我删除此计数器,则每次播放5-10秒后都会发生挂起[其中while循环可能会运行10次,尽管有所不同].

因此,我的问题是,到底发生了什么?:P为什么这些较新的手机(但似乎没有旧款手机)在执行有效工作的循环中存在问题,并且在没有增量变量的情况下不会持续很长时间.线程如何可能在该循环中停止,以及如何使用额外的计数器变量来解决问题?这项工作是在opengl渲染线程上完成的,如果这很重要的话.

我有关于大多数S4发生这种情况的报告,但至少有一个S4在那里没有发生.我今天使用的那个正在发生.这让我想知道它是否可能与特定的android,java,dalvik或手机上的其他东西有关,但遗憾的是我没有从S4工作的任何细节.

非常感谢任何有关此类内容的帮助,指导,想法或进一步阅读.

float vel = 1.0f; // final velocity is 1. We are working backwards to find out what the starting velocity will need to be.
int i = 0;
double xmath = Math.sin(rot* (Math.PI/180.0f)); // component of velocity for x,y direction based on rotation
double ymath =  Math.cos(rot* (Math.PI/180.0f));
while (true) {
        /* with this section uncommented, the stall never happens...
         ++i;
        if (i>1000) {
            // Something …
Run Code Online (Sandbox Code Playgroud)

java android loops dalvik

5
推荐指数
1
解决办法
1813
查看次数

转换为Dalvik格式失败:无法执行dex:超出GC开销限制

我在最近3个小时内遇到了这个错误.当我从SVN检查出最新的代码之后,它突然停止工作了.

注意:

我的新项目大小约为135 MB,我使用的是eclipse kepler.

myApp/res/libs中还有3个jars,名为sqlite.jar,ksoap2.jar,rt.jar

所以我用Google搜索并找到了这个答案.还有Blog 1Blog 2我编辑了eclipse.ini

从:

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20140116-2212
-product
org.eclipse.epp.package.standard.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
256M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xms40m
-Xmx512m
Run Code Online (Sandbox Code Playgroud)

-startup
plugins/org.eclipse.equinox.launcher_1.3.0.v20130327-1440.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_64_1.1.200.v20140116-2212
-product
org.eclipse.epp.package.standard.product
--launcher.defaultAction
openFile
--launcher.XXMaxPermSize
1024M
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
1024m
--launcher.defaultAction
openFile
--launcher.appendVmargs
-vmargs
-Dosgi.requiredJavaVersion=1.6
-Xms512m
-Xmx1024m 
Run Code Online (Sandbox Code Playgroud)

但它仍然没有工作,并在日食中得到相同的错误.任何帮助,将不胜感激.

eclipse android dalvik dex

5
推荐指数
1
解决办法
7095
查看次数

基于 Android-Java 的应用程序本机崩溃?

背景

我的应用程序有 100% 用 Ja​​va 编写的代码,它不需要进行任何繁重的操作。

应用程序本身仅使用下一个库,但它们都没有 JNI 代码:

  • 动作条夏洛克
  • 谷歌播放服务_lib

问题

今天我收到一个奇怪的崩溃报告,它没有显示任何正常的异常信息。

该报告是通过装有 Android 4.4 的“Galaxy S5 (klte)”设备发送的。

这是崩溃报告的标题:

Native crash at /dev/ashmem/dalvik-jit-code-cache in
/dev/ashmem/dalvik-jit-code-cache (deleted)
Run Code Online (Sandbox Code Playgroud)

这是崩溃内容:

*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 
Build fingerprint: 'samsung/kltexx/klte:4.4.2/KOT49H/G900FXXU1ANE2:user/release-keys' 
Revision: '14' 
pid: 11904, tid: 11904, name: .lb.app_manager >>> com.lb.app_manager <<< 
signal 7 (SIGBUS), code 2 (BUS_ADRERR), fault addr 6d7b97cc SOME_NUMBERS

backtrace:
#00 pc 00026a56 /dev/ashmem/dalvik-jit-code-cache (deleted)
#01 pc 00026a55 /dev/ashmem/dalvik-jit-code-cache (deleted) …
Run Code Online (Sandbox Code Playgroud)

java java-native-interface android crash-reports dalvik

5
推荐指数
0
解决办法
1414
查看次数

在Android <4.4上运行时,Mockito + Dexmaker测试崩溃

我有一些android测试,当在4.4/Kitkat下的Android版本上运行时会崩溃.

这些是我在build.gradle中的库

androidTestCompile 'org.mockito:mockito-core:1.9.5'
androidTestCompile 'com.google.dexmaker:dexmaker:1.1'
androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.1'
Run Code Online (Sandbox Code Playgroud)

虽然我需要添加一些提示来告诉Dexmaker将缓存放在哪里,但测试运行与Android 4.4版本一样正常.

System.setProperty("dexmaker.dexcache", getInstrumentation().getContext().getCacheDir().getPath());
Run Code Online (Sandbox Code Playgroud)

以下是设备的logcat输出:

D/dalvikvm( 1712): GC_FOR_ALLOC freed 479K, 19% free 2532K/3124K, paused 3ms, total 3ms
D/dalvikvm( 1712): GC_CONCURRENT freed 427K, 18% free 2595K/3136K, paused 1ms+0ms, total 3ms
D/dalvikvm( 1712): GC_CONCURRENT freed 311K, 16% free 2686K/3188K, paused 3ms+0ms, total 4ms
D/dalvikvm( 1712): GC_FOR_ALLOC freed 127K, 11% free 2852K/3188K, paused 1ms, total 1ms
D/dalvikvm( 1712): GC_FOR_ALLOC freed 123K, 7% free 3239K/3476K, paused 4ms, total 4ms
D/dalvikvm( 1712): GC_CONCURRENT freed 53K, 6% free …

android dalvik mockito dexmaker

5
推荐指数
1
解决办法
369
查看次数

处理 Volley 中的错误(使用期货)?

实现我的LoginActivity.java,我设置了另一个class名为的文件+ AuthClient,它大量使用了 Volley。UserLoginTask需要Boolean从它返回 adoInBackground以便远程调用登录成功/失败。

那么下面我可以用 volley 做一个同步请求吗?,我设置:

void login(final HashMap<String, String> data,
           Response.Listener<JSONObject> listener,
           Response.ErrorListener errorListener) {
    JsonObjectRequest req = new JsonObjectRequest(
            api_prefix + "/auth", new JSONObject(data), listener, errorListener
    );
    queue.add(req); // RequestQueue
}

boolean loginResponseHandler(RequestFuture<VolleyError> err_future,
                             RequestFuture<JSONObject> future) {
    try {
        VolleyError err_response = err_future.get();
        JSONObject response = future.get();
        System.out.println("response.toString() = " + response.toString());
        return true;
    } catch (InterruptedException | ExecutionException e) {
        System.err.println("e = " …
Run Code Online (Sandbox Code Playgroud)

java error-handling android dalvik android-volley

5
推荐指数
1
解决办法
1199
查看次数