Google是从移动Dalvik到ART(Android的运行系统).
我试图了解它是如何改善性能的.
我找到的最好的解释是下面的图像:

其中一个已改变的主要成分是dexopt对dex2oat.
由于我对这些没有太多了解,有谁可以解释这些差异以及这将如何改善性能?
我无法从Android工作室运行应用程序到运行android 2.3.6的samsumg手机.我正在获取应用程序安装失败的弹出窗口参见下面的截图.

当我点击OK我在日志中得到以下错误
Failure [INSTALL_FAILED_DEXOPT]
DEVICE SHELL COMMAND: pm uninstall my.package.name
Unknown failure
Run Code Online (Sandbox Code Playgroud)
在添加名为"带有Google Cloud Messaging的App Engine后端"的Google云端模块后,我遇到了麻烦.
这与此处的堆栈溢出问题中描述的问题完全相同
我尝试了接受的答案.
Ran dex-method-counts应用程序我在终端获得了"总方法计数:24474".我不明白接下来该做什么?
(注意:在kitkat上运行的其他设备上运行相同的应用程序.)
请帮助解决此问题.我过去两天都在苦苦挣扎.我知道有很多类似的问题,但没有任何帮助我.
内置 - >清洁不起作用.
这是我的build.gradle文件
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
defaultConfig {
applicationId "my.package.name"
minSdkVersion 9
targetSdkVersion 19
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile files('libs/libGoogleAnalyticsServices.jar')
compile project(path: ':gcmAppEngineBackend', configuration: 'android-endpoints')
compile 'com.android.support:support-v4:22.0.0'
compile 'com.android.support:appcompat-v7:22.0.0' …Run Code Online (Sandbox Code Playgroud) failed-installation android-2.3-gingerbread dexopt android-studio
我在其中一个应用程序的Android 2.3.X设备上遇到了一些问题(包名是com.netbiscuits.kicker).但是我无法安装我的APK.我试图直接从eclipse(debug keystore)安装它,并在LogCat中显示以下消息:
05-02 09:29:03.671: D/PackageManager(279): Scanning package com.netbiscuits.kicker
05-02 09:29:03.671: E/PackageManager(279): Package com.netbiscuits.kicker has mismatched uid: 10124 on disk, 10134 in settings
05-02 09:29:03.671: I/PackageManager(279): Linking native library dir for /data/app/com.netbiscuits.kicker-1.apk
05-02 09:29:03.681: D/installd(126): DexInv: --- BEGIN '/data/app/com.netbiscuits.kicker-1.apk' ---
05-02 09:29:06.641: D/dalvikvm(2530): creating instr width table
05-02 09:29:07.451: D/dalvikvm(2530): DexOpt: 'Lorg/apache/commons/codec/Decoder;' has an earlier definition; blocking out
05-02 09:29:07.451: D/dalvikvm(2530): DexOpt: 'Lorg/apache/commons/codec/DecoderException;' has an earlier definition; blocking out
05-02 09:29:07.451: D/dalvikvm(2530): DexOpt: 'Lorg/apache/commons/codec/Encoder;' has an earlier definition; blocking out …Run Code Online (Sandbox Code Playgroud) 我不断得到,这个错误 logcat
DexOpt: not resolving ambiguous class 'Lorg/apache/http/client/utils/URLEncodedUtils;'
12-07 05:26:01.085: ERROR/dalvikvm(4620): LinearAlloc exceeded capacity (5242880), last=1092
12-07 05:26:01.085: ERROR/dalvikvm(4620): VM aborting
12-07 05:26:01.187: INFO/DEBUG(2373): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
12-07 05:26:01.187: INFO/DEBUG(2373): Build fingerprint: 'samsung/SGH-T849/SGH-T849/SGH-T849:2.2/FROYO/UVJJB:user/release-keys'
12-07 05:26:01.187: INFO/DEBUG(2373): pid: 4620, tid: 4620 >>> /system/bin/dexopt <<<
12-07 05:26:01.187: INFO/DEBUG(2373): signal 11 (SIGSEGV), fault addr deadd00d
............etc
12-07 05:26:01.347: INFO/dalvikvm(2494): threadid=3: reacting to signal 3
12-07 05:26:01.358: INFO/dalvikvm(2494): Wrote stack traces …Run Code Online (Sandbox Code Playgroud) 似乎一些旧的Android操作系统(甚至可能是最新的操作系统)对每个应用程序可以容纳的代码量有限制.
正如我发现的那样,限制是在名为"LinearAlloc"的缓冲区上.
在2.2或2.3上,它大约是5-8 MB,我认为其他的是16或更多.
如果您的代码太大(并且应用程序可以达到此状态),您将无法在旧设备上安装应用程序,从而获得下一个错误(此处也会报告):
Installation error: INSTALL_FAILED_DEXOPT
Please check logcat output for more details.
Launch canceled!
Run Code Online (Sandbox Code Playgroud)
一种解决方案是尽可能多地删除代码和库,但在一些大型项目中,这样的事情很难做到.
我发现下一个链接谈论Facebook如何通过某种方式增加限制来解决这个问题:
此外,谷歌已经发布了如何通过动态加载代码来解决它:
http://android-developers.blogspot.co.il/2011/07/custom-class-loading-in-dalvik.html
Run Code Online (Sandbox Code Playgroud)
Facebook是如何做到的?
是否有可能以其他方式克服这个问题?
是否有任何免费库可以增加/消除此缓冲区的限制?
对于较新的Android版本有什么限制,如果有的话?
其他巨大的应用程序(和游戏)如何处理这个问题?他们把代码放到C/C++中吗?
是否会动态加载dex文件来解决这个问题?
我有一个非常大的Android项目,包含多个大型第三方jar(作为Android库).
我相信我已经达到了Dex的最大方法限制数量(通过eclipse进行编译):
[2012-11-18 02:28:45 - 在文件中查找] Dx处理classes.dex ...
[2012-11-18 02:28:48 - Dex Loader]无法执行dex:无法将新索引66774合并到一个非巨型指令!
[2012-11-18 02:28:48 - 在文件中查找]转换为Dalvik格式失败:无法执行dex:无法将新索引66774合并到非jumbo指令中!
因此,利用SDK工具21(平台工具16)编辑了我的主项目project.properties进行设置dex.force.jumbo=true.
允许我生成APK的标志.但我无法正确安装(在物理和模拟器上).似乎有一个dex优化器失败:
11-18 20:11:05.338:I/PackageManager(103):运行dexopt on:com.mypackage.myapp
11-18 20:11:08.577:E/dalvikvm(868):乱序method_idx:0x2ae0然后0x1
11-18 20:11:08.577:E/dalvikvm(868):项目1544的问题@偏移量0xf7ae24
11-18 20:11:08.577:E/dalvikvm(868):2006年部分类型的交换失败
11-18 20 :11:08.577:E/dalvikvm(868):错误:字节交换+验证失败
11-18 20:11:08.597:E/dalvikvm(868):优化失败
11-18 20:11:08.597:W/installd( 39):DexInv:--- END'
/data/app/com.mypackage.myapp-1.apk'--- status = 0xff00,进程失败11-18 20:11:08.597:E/installd(39): dexopt在'/data/dalvik-cache/data@app@com.mypackage.myapp-1.apk@classes.dex'res = 65280上失败
11-18 20:11:08.697:W/PackageManager(103):软件包无法安装在/data/app/com.mypackage.myapp-1.apk
11-18 20:11:09.018:D/dalvikvm( 103):GC_EXPLICIT释放1698K,13%免费17034K/19463K,暂停7ms + 135ms
11-18 20:11:09.068:D/AndroidRuntime(780):关闭VM
我是否试图将该dex.force.jumbo标志用于其不适合的目的,或者这个错误是不可预测的?
如果是这样,是否有更好的策略来生成包含大量类/方法的项目?
Android shell命令dexopt是什么?
我在哪里可以找到手册?
我有一个基于位置的应用程序,直到昨天工作正常,但是当我在手机上运行它现在它很奇怪.
下面是我的logcat,它显示了我以前从未见过或听过的错误
07-07 14:17:25.548: D/ActivityThread(24383): handleBindApplication:com.example.loc_update
07-07 14:17:25.553: D/ActivityThread(24383): setTargetHeapUtilization:0.75
07-07 14:17:25.553: D/ActivityThread(24383): setTargetHeapMinFree:524288
07-07 14:17:25.573: I/dalvikvm(24383): DexOpt: illegal method access (call Landroid/content/res/TypedArray;.<init> (Landroid/content/res/Resources;[I[II)V from Landroid/content/res/XResources$XTypedArray;)
07-07 14:17:25.573: I/dalvikvm(24383): Could not find method android.content.res.TypedArray.<init>, referenced from method android.content.res.XResources$XTypedArray.<init>
07-07 14:17:25.573: W/dalvikvm(24383): VFY: unable to resolve direct method 82: Landroid/content/res/TypedArray;.<init> (Landroid/content/res/Resources;[I[II)V
07-07 14:17:25.573: D/dalvikvm(24383): VFY: replacing opcode 0x70 at 0x0002
07-07 14:17:25.683: W/dalvikvm(24383): threadid=1: thread exiting with uncaught exception (group=0x4162bce0)
07-07 14:17:25.688: E/AndroidRuntime(24383): FATAL EXCEPTION: main
07-07 14:17:25.688: E/AndroidRuntime(24383): Process: com.example.loc_update, …Run Code Online (Sandbox Code Playgroud)