Compilin error: fields must have a constant size: 'variable length array in structure' extension will never be supported on android 2.3.4 source code
嗨,我在尝试在Android 2.3.4源代码中进行LIBDVM时遇到以下错误, external/elfutils/libebl/eblobjnote.c:43:17: error: fields must have a constant size: 'variable length array in structure' extension will never be supported uint32_t version[descsz / 4 - 1]; 这是GCC 4.2在我的Mac OS X Mountain Lion上报告的真正C错误.我想与GCC 4.2和Android 2.3.4源代码有一些不合适性.我不得不更改几件事,以使汇编达到这一点.我不知道使用哪个GCC版本来编译代码,但是GCC 4.2经常在代码中找到错误. 谁能告诉我如何处理这些错误,或者在最坏的情况下我应该使用哪种GCC版本,以及如何降级到Mac OS X中的该特定版
22 2024-04-10
编程技术问答社区
我怎样才能在我的共享库中包含使用libdvm.so的适当的包含文件?
我想在Dalvik/vm/vm/atnation/dalvik_system_dexfile.cpp上使用以下API: static void Dalvik_dalvik_system_DexFile_defineClass(const u4* args, JValue* pResult) static void Dalvik_dalvik_system_DexFile_openDexFile_bytearray(const u4* args, JValue* pResult) 在 我尝试将整个标题包括在Android项目中,但是此编译错误消息失败了:"参数列表太长". 有人知道在libdvm.so中使用以上两个API的需要吗? 谢谢. - 添加 - 在dalvik/vm/native/dalvik_system_dexfile.cpp中,还有一些其他代码可以允许其他代码使用静态API. const DalvikNativeMethod dvm_d
10 2024-04-10
编程技术问答社区
Jellybean上缺少扩展宽度的dalvik字节码
当IC出来时,引入了几个新的扩展宽度字体.其中大多数是用于支持巨型ID的说明.这是其中一些新说明,取自我的ICS/dalvik/opcode-gen/bytecode.txt: # # Extended-width opcodes # op 00ff const-class/jumbo 41c y type-ref continue|throw op 01ff check-cast/jumbo 41c n type-ref continue|throw op 02ff instance-of/jumbo 52c y type-ref continue|throw op 03ff new-instance/jumbo 41c y type-ref continue|throw op 04ff new-array/jumbo 52c
10 2024-04-05
编程技术问答社区
有可能在一个安卓应用中注入代码吗?
我想在运行时将代码注入Android应用程序.我试图使用DX工具在SDCARD中生成dexfile,但是当我想实例化时,它会失败.是否有任何工具可以注入代码生成新的dalvik字节码?我正在为Android学习一些图书馆,Aspecjt或Guice.使用脚本语言更好吗? 谢谢人:) 解决方案 不,这是不可能的.如果可能的话,Android申请许可将无法使用. 其他解决方案 dexmaker 是新的,只是为此而设计的.这是项目网站的示例的一部分: DexMaker dexMaker = new DexMaker(); // Generate a HelloWorld class. TypeId helloWorld = TypeId.get("LHelloWorld;"); dexMaker.declare(helloWorld, "HelloWorld.generated", Modifier.PUBLIC, TypeI
10 2024-04-05
编程技术问答社区
为什么字节码在直接访问字段时调用Object->getClass()
我将Java(实际上是Dalvik)字节码进行了分配.在方法的开头,我直接访问实例成员的字段(即不是通过getter). 似乎在访问的实例成员(mOther)上tha java调用Object.getClass(),但在任何地方都不会使用结果.这是某种检查吗?为什么需要这个电话?我怀疑这是因为我直接访问一个字段(在该类中定义了一个字段),但是我看不到连接. Java代码和分解字节码如下. (请注意,最后的指令将lifeTime作为常数0x0001加载,因为在MyOtherClass中,我将lifeTime作为public final字段,目前是从代码初始初始化的.) MyOtherClass other = mOther; if (mAge >= other.lifeTime) { // lifeTime is initialized to 0x0001 end(); return; } .line 53 move-object/from16 v0,
8 2024-04-05
编程技术问答社区
Eclipse, Android: 意外 无法执行dex。定义了多个dex文件
问题: 我无法建立我的项目.当我尝试以下符号时,请在控制台中显示: [2014-09-28 23:49:30 - Dex Loader] Unable to execute dex: Multiple dex files define Landroid/support/annotation/AnimRes; [2014-09-28 23:49:30 - Shop] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Landroid/support/annotation/AnimRes; 我损失了为此问题寻找解决方案的数小时,但没有结果..我试图清洁项目,删除bin文件夹等.但是什么都没有. 请帮助,我不知道该怎么办.. 解决方案 我无法修复它,因此我最终通过在不同的工作区中创建新项目,然后将所有代码复制到新项目中.这不是最聪明的事情,而是我该怎么
8 2024-04-05
编程技术问答社区
Android Build fail-java.lang.IllegalArgumentException:已经添加:Lcom/google/api/client/escape/CharEscapers。
我只是为我的Android应用程序准备小更新,但是当我尝试构建我的应用程序(在调试模式下)时,我会得到这个奇怪的错误.如果有人能弄清楚这个问题,那将是很棒的.我正在清洁/重建/修复项目属性,但没有结果.我没有线索发生了什么:(.也许这里的任何人都发生了类似的事情? 如果这可以帮助我使用以下库:admob(4.1.1),openfeint和libgdx. 这是构建日志: UNEXPECTED TOP-LEVEL EXCEPTION: java.lang.IllegalArgumentException: already added: Lcom/google/api/client/escape/CharEscapers; [2011-12-08 21:56:42 - JellyBallsFree] Dx at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123) [2011-12-08
12 2024-04-04
编程技术问答社区
我可以安全地阻止Dalvik浏览器代理请求吗?
我注意到,当Android-OS设备上的用户访问我的网站时,每个页面上都有两个请求.第一个是普通浏览器,第二个是来自" Dalvik".示例: "GET/HTTP/1.1" 200 2126 "-" "Mozilla/5.0 (Linux; Android 5.0.2; SAMSUNG SM-G925F/G925FXXU1AOD8 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/3.0 Chrome/38.0.2125.102移动野生动物园/537.36" 1229 2802 " get/http/1.1" 200 2117" - "" dalvik/2.1.0(linux; u; android 5.0.2; sm-g925f build/lrx22g)" 546 8729 从我对此的理解中,第一个请求来自实际浏览器,另一个请求来自运行浏览器的虚拟机(dalvik).问题在于,da
12 2024-04-03
编程技术问答社区
虽然有可用的内存,但出现OutOfMemory错误
我看到一个非常奇怪的问题.本质上,有时即使有大量内存,大量的位图内存分配也会失败.似乎有许多帖子提出了类似的问题,但它们都与霍尼凯姆(honeycomb Android)有关.我的理解是,现在将图像分配在堆上,而不是外部记忆.无论如何,请在下面查看此日志: 10-14 13:43:53.020: INFO/dalvikvm-heap(31533): Grow heap (frag case) to 40.637MB for 942134-byte allocation 10-14 13:43:53.070: DEBUG/dalvikvm(31533): GC_FOR_ALLOC freed 126K, 11% free 41399K/46343K, paused 31ms 10-14 13:43:53.130: DEBUG/dalvikvm(31533): GC_FOR_ALLOC freed 920K, 13% free 40478K/46343K, pa
14 2024-03-31
编程技术问答社区
OutofMemoryError:位图大小超过了虚拟机预算(Android)。
在bitmapfactory中获得异常.不确定是什么问题. (好吧,我可以猜到这个问题,但不确定为什么会发生) ERROR/AndroidRuntime(7906): java.lang.OutOfMemoryError: bitmap size exceeds VM budget ERROR/AndroidRuntime(7906): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:295) 我的代码非常简单.我定义了带有默认图像的XML布局.我尝试在SDCARD上加载BM(如果存在 - 是).如果没有,则显示默认图像.无论如何..这是代码: public class showpicture extends Activity { public void onCreate(Bundle savedInstanceState) { /** Remove menu/
14 2024-03-31
编程技术问答社区
toArray与预设大小的数组
使用ar.toArray(new String[ar.size()]) Android Studio 3.2.1 警告预先大小的数组,并建议空数组: 有两种将集合转换为数组的样式:要么使用 预尺寸数组(例如C.ToArray(new String [C.Size()))或使用 空数组(例如C.ToArray(新字符串[0]).在较旧的Java版本中 建议使用预尺寸阵列,作为反射调用 创建适当尺寸的阵列所需的速度非常慢.然而 由于OpenJDK 6的晚期更新此通话是固有的,使得 空数阵列版本的性能相同,有时甚至 更好,与尺寸的版本相比.也通过预尺寸 阵列对于并发或同步收集是危险的 数据竞赛是可能在大小和toarray调用之间 如果收集为 手术过程中同时缩水.此检查允许 遵循统一样式:要么使用空数组(是 推荐在现代Java中)或使用尺寸的阵列(可能是 在较旧的Java版本或基于非HOTSPOT的JVM中更快). 对于Android还是仅适用于Java? 使用预尺寸的数组(在
16 2024-03-05
编程技术问答社区
在ART内安装.apk的过程。与Dalvik VM安装过程的区别
最近我回答了 a>,其中描述了.apk文件的整个安装过程.这是使用Dalvik VM的一件事.现在我想知道使用ART的安装过程是否完全相同?有什么区别? 我的意思是 packageManager , path ,转换为dex格式等. 谷歌搜索并没有提供太多信息,仅提供有关性能能力,管理内存和类似内容的信息. 如果有知识的人可以共享此信息,我将非常感谢. 解决方案 Android应用以.apk文件格式出现,Java类将转换为DEX字节. DEX字节模式格式独立于设备体系结构,需要将其转换为本机器代码以在设备上运行.对于ART和Dalvik runtimes. 都是相同的. 从Dalvik到ART的最显着变化是,Dalvik基于 Just-In-time (JIT)汇编,而ART基于 提前 (AOT)编译. 使用 dalvik jit编译器,每次运行应用程序时,它会动态地将Dalvik字节码的一部分转换为机器代码.随着执行的进行,编译和缓存更多的字节码.另一方面,Art
8 2024-03-02
编程技术问答社区
安卓和调用当前API不具备的方法
如果我想获得这样的外部路径,并且设备具有Android 2.1(API 7) File f; int sdkVersion = Integer.parseInt(Build.VERSION.SDK); if (sdkVersion >= 8) { System.out.println(">=8"); f = getApplicationContext().getExternalFilesDir(null); } else { System.out.println("
8 2024-03-02
编程技术问答社区
同步使用ActionBarSherlock和ViewPagerIndicator将无法编译
同时使用ActionBarsherlock和ViewPagerIndicator时,我会遇到以下错误;根据我的阅读 - 这是由于两者中的矛盾/重复的库造成的. 一种解决方案是让ABS依靠VPI(或相反,我尝试了两者),但是即使在清洁和重建后,这仍然给了我相同的错误.现在,我只是在两个单独的项目中工作,因此我可以完成工作 - 但是我想将它们显然结合起来.帮助您将不胜感激! [2012-04-19 00:39:20 - MashableReader] Dx UNEXPECTED TOP-LEVEL EXCEPTION: java.lang.IllegalArgumentException: already added: Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat; [2012-04-19 00:39:20 - MashableReader] Dx at com.android
12 2024-02-19
编程技术问答社区
发行版在安装应用后看不到应用类。
在调试版本中,应用程序正常工作.但是,当我生成符号APK并安装此时,在打开应用程序之后 - 由于logcat错误,它立即崩溃: Caused by: java.lang.ClassNotFoundException: Didn't find class "com.mypackage.AppClass" on path: DexPathList[[zip file "/data/app/com.mypackage-1/base.apk"],nativeLibraryDirectories=[/vendor/lib64, /system/lib64]]. 我使用AppClass扩展了多智能应用程序,并且我还在那里也有一些功能.我已经在清单中正确地宣布了此课程. 最复杂的是它在调试版本中起作用,但仅在发布版本中才会发生. 如果有人可以帮助我解决这种情况,我真的很感激. 问候 解决方案 最后,我找到了一个解决方案,帮助我解决了这个问题.我必须在gradle中
10 2024-02-19
编程技术问答社区
AndroidRunTime在模拟器API17上出现NoClassDefFoundError异常,但在API22上没有。
Android Studio:1.3.1- Gradle Build插件:1.1.2 -Gradle:1.3.0 在Android Studio上,我有一个在Android API22上运行良好的应用程序(Lollipop,在Simulator API22和Android Phone API22上都可以使用,并且在API 21上也可以使用,但是API 21以下没有什么. ). ). ). ). 在我的gradle构建文件中,我有以下内容: compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { minSdkVersion 17 targetSdkVersion 22 ... compile "commons-io:commons-io:2.4" //IO 因此,据我了解:我的应用程序与最新的API(22)一起编译,可在API 17到API 22(在兼容模式下22+)上运行.
8 2024-02-18
编程技术问答社区
达尔维克JIT工作流程
我有兴趣在Dalvik VM(Android)上工作.我正在尝试浏览JIT的代码,以找出它执行的操作以及它如何选择轨迹.我无法遵循代码.因此,我要求所有人通过建议在JIT中执行跟踪选择和翻译的相关功能来帮助我 解决方案 您可以尝试 git log --grep JIT 在Dalvik存储库中,查看更改和文件更改.这应该使您对与JIT相关的代码的位置有一个好主意.
12 2024-02-18
编程技术问答社区
什么是Android中的ODEX文件?
安装了一些android应用程序后,我发现它将更改为智能手机中的odex文件(不是apk). 它是怎么发生的?谁可以教我,我对此非常感兴趣. 解决方案 博客文章主要是对的,但不完整.要充分了解Odex文件的功能,您必须了解有关应用程序(APK)的工作方式. 应用基本上是荣耀的拉链档案. Java代码存储在一个名为class.dex的文件中.dex,并且该文件由Dalvik JVM解析,并且已处理后的类的缓存.DEX文件存储在电话的Dalvik Cache中. . odex基本上是应用程序类的预处理版本.dex,DALVIK的执行准备.当应用程序触发时,将class.dex从APK存档中删除,并且不会将任何内容写入Dalvik Cache.一个未经探测的应用程序最终带有2个class.dex文件的副本 - apk中包装的一个副本,然后在dalvik缓存中处理了一个.自达尔维克(Dalvik)必须提取和处理class.dex文件以来,第一次启动也需要更长的时间. . 如
8 2024-02-18
编程技术问答社区
Android NDK:Dalvik Heap和Native Heap--如何区分两者
我知道Android平台中有Dalvik(JVM)堆和本机堆. Dalvik GC没有在本地堆上工作. 但是我不确定这是如何工作的,我的意思是Android OS是如何将它们分开的? 可能的情况1:由单独的内存硬件组成(我不太相信) 可能的情况2:Android OS具有两个堆的固定内存 可能的情况3:Android OS必须在必要时分配一部分Dalvik内存堆以成为本地堆,因此本机堆和Dalvik堆的大小是灵活的. 我没有提到哪一个是正确的? 解决方案 本机堆由dlmalloc()管理,dlmalloc()使用mmap()和标准调用(例如sbrk())的组合来分配内存.托管(" dalvik")堆(主要是)由mmap()分配的一个大块.所有这些都在Linux内核的顶部运行,因此,如果您了解Linux内存管理,那么您已经知道低级零件的工作原理. 您可以阅读有关Dalvik如何将空页从托管堆返回到 编辑:有关Android内存管理的信息的规范帖子是这个
8 2024-02-17
编程技术问答社区
Android NDK溢出dalvik JNI本地参考表
我有以下问题,从C ++,我将巨大的字符串[]发送到Java.巨大=最多20行; 我正在做以下 jint jtype = 2; jstring emptyString = env->NewStringUTF(""); jobjectArray data = (jobjectArray)env->NewObjectArray(7, env->FindClass("java/lang/String"), emptyString); env->SetObjectArrayElement( data,0,env->NewStringUTF(item->get_id().c_str()); env->SetObjectArrayElement( data,1,env->NewStringUTF(item->get_number().c_str()); env->SetObjectArrayElement( data,2,env->NewStringUTF(item->get_fullnam
20 2024-02-17
编程技术问答社区