我在一家小型Android游戏开发公司工作,目前我遇到了一个问题.我正在使用Eclipse和Android SDK运行一个非常标准的Windows 7 x64机器.
我正在阅读我的程序的LogCat输出,想知道为什么我的游戏甚至都不会出现.我很快看到所有的堆都在增长,并且认为我可能有太多的纹理/太大的纹理等等.我确定了纹理加载的问题,然后我开始使用DDMS并注意到我的堆不会超过19MB.我剪了几个纹理,试图再次构建和运行.令我震惊的是,堆不会一直超过6.6MB.有没有人有什么建议?
tl; dr:我的堆增长到19MB然后失败了,所以我拿出了内存更昂贵的纹理,使其在堆中保持在19MB以下,现在我的堆不会超过6.6MB.
编辑:当取出更大的纹理时logcat输出:
08-19 19:19:53.744: DEBUG/dalvikvm(4699): GC_FOR_MALLOC freed 91 objects / 514016 bytes in 49ms
08-19 19:19:54.184: DEBUG/dalvikvm(4699): GC_FOR_MALLOC freed 104 objects / 494088 bytes in 48ms
08-19 19:19:54.404: WARN/ActivityManager(59): Launch timeout has expired, giving up wake lock!
08-19 19:19:54.764: DEBUG/dalvikvm(4699): GC_FOR_MALLOC freed 85 objects / 384664 bytes in 49ms
08-19 19:19:54.935: WARN/ActivityManager(59): Activity idle timeout for HistoryRecord{4612eec8 com.wickeyware.zombiearcher.android/.AndroidGame}
08-19 19:19:55.234: DEBUG/dalvikvm(4699): GC_FOR_MALLOC freed 104 objects / 504648 bytes in 47ms
08-19 19:19:55.875: DEBUG/dalvikvm(4699): GC_FOR_MALLOC … 我想转换/仪器Dex文件.转型的目标包括测量代码覆盖率.请注意,源文件不可用.所以检测Dex是唯一的选择.
我想知道是否有任何现有的代码库,我可以看作为编写工具来实现我的目标的示例.
我了解Smali项目以及以Smali为基础的许多其他项目.但是,这些项目都不是我的目的的好例子.
我正在寻找自动转换smali代码或dexlib表示的代码,从中生成smali.后面的选项对我来说是首选,因为可以避免生成smali的开销.
我需要在Android上运行java应用程序的命令行版本(是的,我知道这不是微不足道的).
我正在尝试使用Dalvikvm启动它,它实际上启动但稍后我的代码失败,因为它开始使用android.util.log并抛出此异常.
java.lang.UnsatisfiedLinkError: println_native
at android.util.Log.println_native(Native Method)
at android.util.Log.i(Log.java:159)
at org.slf4j.impl.AndroidLogger.info(AndroidLogger.java:151)
at org.gihon.client.TunnelingClient.<init>(TunnelingClient.java:62)
at org.gihon.client.CLI.main(CLI.java:95)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
我尝试设置环境变量,我设置了LD_LIBRARY_PATH和BOOTCLASSPATH变量.我甚至尝试用LD_PRELOAD预加载liblog但没有修复它.似乎dalvikvm设置环境的方式有些不对劲/不同.
我正在努力学习smali,我有一些问题,我用谷歌搜索他们找不到.
1)我创建了一个简单的测试用例来更好地解释自己
const-string v1, "Start"
:try_start_0
const-string v1, "Try Block"
invoke-static {v1}, Lcom/example/test/Main;->print(Ljava/lang/String;)V
:try_end_0
.catchall {:try_start_0 .. :try_end_0} :catchall_0
Run Code Online (Sandbox Code Playgroud)
.catch语句:两个参数是否意味着从该标签到该标签并捕获它(两个标签之间的代码)或者它是否意味着开始执行try:try_start_0直到达到:try_end_0(允许goto跳转)执行不在两个标签内的代码)?
try标签总是采用try_start_%d格式,还是可以是任何标签?
2)另一个案例
packed-switch v0, :pswitch_data_0
const-string v1, "Default Case"
invoke-static {v1}, Lcom/example/test/Main;->print(Ljava/lang/String;)V
:goto_0
const-string v1, "The End"
invoke-static {v1}, Lcom/example/test/Main;->print(Ljava/lang/String;)V
return-void
:pswitch_0
const-string v1, "Case 1"
invoke-static {v1}, Lcom/example/test/Main;->print(Ljava/lang/String;)V
goto :goto_0
:pswitch_data_0
.packed-switch 0x1
:pswitch_0
.end packed-switch
Run Code Online (Sandbox Code Playgroud)
switch语句:是否要求switch语句位于交换机数据和交换机调用之间?还有标签的命名固定或只是为了方便?
3)如果标签可能不同,baksmali会不会产生带有不同标签的小码?
4)在反编译dex时,哪些可选行并不总是显示?
我知道.parameter和.line是可选的,但是那些可能不存在的是什么?
先感谢您.
我的应用程序的一些用户得到了这个例外
java.lang.NoClassDefFoundError: [generic]
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)
这不是常见的例外,因为有大量用户,只有部分用户有此异常.我不使用任何本机库,所有外部库都不使用任何本机代码
它发生的Android版本:
任何人都可以帮我解决问题吗?AndroidManifest中的接收器可以调用此问题吗?
我在android平台上问了这个,但是没有收到回复.我已经提到了这个帖子,但找不到他所指的帖子(动态生成Dalvik字节码到运行的Dalvik/Android应用程序)
此外,还提出了此问题(http://code.google.com/p/android/issues/detail?id=6322)
所以,我的问题是,
干杯.Earlence
我有一个简单的android项目,我试图在Eclipse内调试.当我在调试模式下运行并使用"Step Over"按钮时,它似乎经常想要进入Android代码(我不希望它这样做,就像C调试器不会进入libc一样).我得到一个看起来类似于的屏幕:
Class File Editor
Source not found:
The JAR file blahblah/android.jar has no source attachment.
You can attach the source by clicking attach source
Run Code Online (Sandbox Code Playgroud)
我根本不希望它进入Android或Dalvik代码(即使我可以安装源代码)我只对自己的个人代码感兴趣.
在更新到最新的开发人员工具ADT 14之后,包含库项目的我的Android项目将不再运行产生错误:
Dx UNEXPECTED TOP-LEVEL EXCEPTION: ... already added: ...
...
Conversion to Dalvik format failed with error 1
Run Code Online (Sandbox Code Playgroud)
使用包含删除和重新添加项目的解决方案描述此问题的其他线程不起作用.
是否可以选择在Android清单中声明操作系统/设备所需的最小VM堆大小,以便Android Market仅显示满足要求的设备的应用程序并过滤掉其余部分.
我可以在应用程序启动期间检测到最大VM堆大小,如果没有足够的可用内存,则会失败.然而,这对用户来说是不方便的.
具体来说,我正在和朋友一起做一个爱好游戏,其中图形需要至少16MB但不超过24MB的内存.在某种意义上,在任何给定的游戏状态下,只需要的图形被加载到内存中,内存使用量或多或少是最佳的.
我需要一些帮助,因为我无法通过自己的方式得到解决方案,我已经阅读了很多帖子并进行了大量调查,但没有解决方案.
我有一个有一些子项目的项目(动作栏,滑动,脸谱等等),当我尝试编译它时,我总是收到以下错误.
[2013-07-31 14:44:06 - Dex Loader] Unable to execute dex: Cannot merge new index 67109 into a non-jumbo instruction!
[2013-07-31 14:44:06 - ojiva] Conversion to Dalvik format failed: Unable to execute dex: Cannot merge new index 67109 into a non-jumbo instruction!
Run Code Online (Sandbox Code Playgroud)
我正在使用带有最新ADT的Eclipse和带有最新SDK(18)的最新工具(r22).我已经设置dex.force.jumbo=true了我的project.properties,而且我也试过了set dex.force.jumbo=true
但没有幸运:(,任何想法?
dalvik ×10
android ×9
dex ×2
eclipse ×2
java ×2
smali ×2
adt ×1
android-ndk ×1
bytecode ×1
debugging ×1
exception ×1
google-play ×1
heap ×1
heap-memory ×1
libgdx ×1