ab1*_*b11 24 android dx dalvik
我正在尝试将我的应用程序与Box,Dropbox和Google Drive集成.所有这三项服务都需要一些第三方罐子.此外,我的应用程序已经需要一些第三方罐子.现在当我尝试从eclipse运行我的应用程序时,我收到以下错误:
无法执行dex:方法ID不在[0,0xffff]中:65536转换为Dalvik格式失败:无法执行dex:方法ID不在[0,0xffff]中:65536
似乎发生此错误是因为我的应用程序有太多方法.我相当肯定这些方法的大部分来自第三方罐子,所以试图通过简化我的代码来解决这个问题是不现实的.我在网上找到了这两个建议.
添加dex.force.jumbo=true到project.properties(并使用adt版本21).我这样做但仍然得到错误.
使用多个dex文件,如下所述:http://android-developers.blogspot.co.il/2011/07/custom-class-loading-in-dalvik.html.这似乎是唯一的选择,但我不明白它在我的情况下是如何适用的.问题是像Drive这样的服务有太多的依赖关系.这个解决方案是否要求我在引用其依赖项时修改Drive源以使用inflection?(这显然不是一种选择).
使用proguard缩小删除未使用的代码/方法.使用proguard导出我的应用程序确实有效,文档服务集成在> 4.0设备上按预期工作.但是,在2.3设备上进行测试时会抛出classnotfound错误.
所以,我希望就这个问题提出一些建议.选项2是我案例的解决方案吗?我应该考虑另一个解决方案吗?
Com*_*are 14
您还可以将其中一个或多个作为主插件的插件,以单独的APK形式下载.该APK会暴露主应用程序将使用的一些组件 - 因为我不知道您与这些服务集成的性质,我无法就此提出更具体的建议.您可以使用自己的signature级别自定义<permission>来保护两个应用程序之间的通信.而且,作为奖励,如果使用第三方库添加了额外权限的要求,您只需要插件APK中的那些权限,保持您的主APK更小.
自动包含多语言支持.来自文档:
Android 5.0及更高版本使用名为ART的运行时,它本身支持从应用程序APK文件加载多个dex文件.ART在应用程序安装时执行预编译,扫描类(.. N).dex文件并将它们编译成单个.oat文件以供Android设备执行.有关Android 5.0运行时的更多信息,请参阅ART简介.
只需将Android mult-dex支持工具添加到您的gradle构建中:
android {
compileSdkVersion 21
buildToolsVersion "21.1.0"
defaultConfig {
...
minSdkVersion 14
targetSdkVersion 21
...
// Enabling multidex support.
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.0'
}
Run Code Online (Sandbox Code Playgroud)
小智 5
请参阅vm/LinearAlloc.c,您可以找到以下代码:(Android 2.3.3下的5MiB,Android 4.0后的8MiB作为我的调查)
#define DEFAULT_MAX_LENGTH(5*1024*1024)
...
LinearAllocHdr*pHdr;
...
pHdr-> mapLength = DEFAULT_MAX_LENGTH;
我想'Facebook修复'是通过使用本机C指针编辑这个内存.IMHO LinearAlloc问题和这个方法ID问题是不同的事情.
| 归档时间: |
|
| 查看次数: |
23911 次 |
| 最近记录: |