自从迁移到ADK14后,我无法在Windows 7系统上构建新的apks版本.
构建失败,"转换为dalvik格式失败,错误1",而控制台充满了大量的"Dx坏类文件魔术(cafebabe)或版本(0033.0000)".
完整的例外文字:
com.android.ide.eclipse.adt.internal.build.DexException: Conversion to Dalvik format failed with error 1
at com.android.ide.eclipse.adt.internal.build.BuildHelper.executeDx(BuildHelper.java:740)
at com.android.ide.eclipse.adt.internal.project.ExportHelper.exportReleaseApk(ExportHelper.java:204)
at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard.doExport(ExportWizard.java:290)
at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard.access$0(ExportWizard.java:229)
at com.android.ide.eclipse.adt.internal.wizards.export.ExportWizard$1.run(ExportWizard.java:214)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
Run Code Online (Sandbox Code Playgroud)
我正在构建一个使用大量库的旧项目,所以可能问题与这个事实有关.已经完成了移动到ADK14时建议的所有"修复属性"/清理等(因为我自然会遇到所有这些问题),但他们没有帮助解决这个问题.
所有库都在相同的Android SDK和JDK/JRE版本上,所以这似乎不是问题.事实上,该应用程序很容易在调试中构建并安装在我的旧版本1.5 HTC Magic上 - 它只是当我需要导出已签名的应用程序包时,这会破坏.
[编辑]这是在Windows 7x64 PC上.我观察到在我的Linux笔记本电脑(Lucid Lynx)上包装apk以获得完全相同的代码绝对没有任何问题.
有任何想法吗?对此感到非常沮丧.
注意
显然,这个错误消息可以由各种不同的问题触发.我的特殊问题与Java 6/7无关,因为我从未安装过Java 7,并且编译器合规性设置为Java 6(我当时检查过,因为我已经看到其他地方建议的解决方案).
我是Android <3.0中使用的菜单按钮的粉丝,因为它对我的游戏应用程序非常有用 - 它允许我采取重要但游戏玩法无关的功能(保存游戏,参考信息链接)并将其放置在它的某个地方没有弄乱主游戏界面,但仍然很容易访问(选项菜单).
这种键的使用成为3.0的问题,因为它删除了MENU按钮并用Action Bar替换它.动作栏真的不适合喜欢全屏运行的游戏,所以这真的很痛苦.没有操作栏 - 无法访问选项菜单.但是,我可能暂时忽略它,因为我在平板电脑上没有那么多用户,并且没有时间来测试它.
然而,ICS使这成为一个严重的问题,因为MENU按钮显然没有回来.现在我不仅要在平板电脑上处理这个问题,还要在手机上处理这个问题.
我对此问题的初步解决方案是在我的GUI中放置一个软按钮来替换硬菜单按钮
this.openOptionsMenu();
Run Code Online (Sandbox Code Playgroud)
一切都恢复到ICS的完美运作.
但是,这对Honeycomb不起作用.如果您没有可见的ActionBar,则调用openOptionsMenu绝对没有任何作用.
有关如何处理这个的任何想法?
我想我总是可以回到使用TargetSDK <11(从而迫使ActionBar出现在平板电脑上),但据我所知,这只是将问题推向未来,我不愿意这样做.
完全删除选项菜单,然后转到仅使用上下文菜单?[澄清:我的意思是,不是打开选项菜单 - 我只使用上下文菜单 - 至少现在 - 这些工作在所有设备上].
有兴趣听听其他人在整个选项菜单/ ActionBar混乱中遇到类似问题的决定.
compatibility android android-3.0-honeycomb android-4.0-ice-cream-sandwich android-4.2-jelly-bean
有谁想过/发现Android库如何在Android工作室中运行?
我还没有找到任何关于这方面的文档(Android开发者网站上的文档非常简陋),我观察到,根据我创建库项目的方式,我会得到完全不同的结果.
如果我从Eclipse导入一个库(按照网站上的建议首先导出到Gradle)我最终会得到一个包含库项目的新项目+模块.这似乎不太正确(intellij project = eclipse工作空间),并且尝试在intellij中编译/生成这会导致许多错误(库项目无法找到android支持库).
如果我从头开始用库模块创建一个新项目,那么我得到一个带有build.gradle文件的android库项目.
如果我在项目中创建一个新模块(使用右键单击项目),那么我将获得一个使用Ant构建的Android库.编译很好,但似乎很奇怪.当然我们不打算在Android Studio中使用Ant for Android库吗?使用"文件">"新建模块"创建新的库模块似乎无法正常工作.它只是创建一个新的应用程序.
有没有人拿起任何信息来理解这个?我还没有找到任何可以指定哪些库应该在哪些应用程序模块中使用的位置.我知道这是一个预览版本,但我很难相信像Android库这样的核心功能支持得很差.我错过了什么?
更新2014-04-09:
所以我本周在Android Studio上进行了新一轮.虽然现在的问题与我最初写这篇文章的时候有所不同,但这非常令人难以置信 - 仍然是一个大问题.我还没有找到在AS中的多个项目中使用Android库的很好的解释(包括嵌套的库).我见过的一些建议建议将代码复制到多个位置 - 这完全违背了开始使用库的目的.
我只是不知道谷歌在Android Studio中的想法...很遗憾,因为它看起来像是一个很棒的工具,但缺乏直观的处理,如代码重用这样基本的东西对我来说是一个大问题(没关系)与不断改进的跨平台开发工具相比,专门针对Android的编码变得越来越没有吸引力.
我想知道其他人在Android上保存文件时使用什么策略来避免数据丢失.我有几个游戏应用程序,基本上,只要用户暂停(onPause),它们就可能保存游戏状态/存档游戏.
这种情况在99.99%的情况下有效,但每隔一段时间我就会收到一个存储过程出错的存档游戏示例.通常,这是一个格式错误的XML文件,通常在某个任意点被截断.基于我收到的错误报告,我认为问题主要发生在用户在游戏过程中通过电话或类似的东西中断时,Android操作系统会在应用程序完成保存之前杀死应用程序.保存文件的代码非常简单,因此我很难看到其他可能导致此问题的原因.
这是一个严重的问题,因为它通常会导致玩家的保存进度被破坏.
我想先写一个空文件,然后再复制到"真实"文件,但我怀疑这只会增加问题,因为它总会花费更多时间,但仍然有被打断的风险.
谁有安全的方法来做到这一点Android相对保证不会搞砸?
总结一下,到目前为止建议的选项(据我所知):
我不认为SharedPreferences会对这种结构化数据起作用.目前,这些方法似乎都不是理想的解决方案,所以我仍然愿意接受建议.
我还没有设法测试所有这些方法,所以我没有浪费赏金,而是将其分配给我认为最有可能解决问题的答案.不过,我计划在接受答案之前检查各种选项.感谢所有好的建议.
我使用SurfaceView在Android应用程序中显示大图像(通常比屏幕大,但并不总是如此).这实际上是简单的图形,使用OnTouchListener或GestureDetector很容易实现滚动.图形在Render循环中运行,但是对于所有真实设备来说,性能似乎已经足够了(尽管仿真器可能有点痛苦).
我正在考虑在图像上实现Pinch和Zoom,但我更愿意避免使用OpenGL,因为我对OpenGL的经验很少,并且使用OpenGL对于这么简单的事情来说似乎太过分了.
似乎android.graphics.Camera类可能允许我实现我想要的缩放功能.
有没有人知道在基本的Android SurfaceView上实现类似缩放功能的任何好例子?
此外,如果你已经实现了这样的事情,任何关于性能的想法?OpenGL是否值得额外麻烦,因为这里需要的是如此简单?
这个问题不清楚,或者我在Android开发者网站上遗漏了一些我应该找到的令人眼花缭乱的明显文档/代码?
我的Android应用程序(基于文本的游戏)大量使用背景图像,以提供更好的视觉氛围.例如,如果游戏中的动作将您带入小酒馆,那么您将获得游戏中小酒馆的背景图像.这是一个巨大的改进,图形上,在你无法获得的无聊的黑色背景.
然而,这也是一个问题,因为android:background总是延伸到屏幕的尺寸.结果是,如果播放器在纵向和横向模式之间切换,背景图像看起来非常糟糕.更糟糕的是,许多设备具有非常不同的宽高比(例如,320x480 mdpi,480x800 hdpi和480x852 hdpi),甚至会有更多变化.
别人怎么解决这个问题?拥有主要分辨率/方向的单独图像对我来说不是一个选项,因为这会导致apk变得太大.
我已经使用了Config设置了一些并搜索了文档,但未能找到任何相关信息.
Phacility自己的Phabricator实例以这种方式工作(我已经看过其他安装),所以我认为必须有一种相对简单的方法来设置它,但还没有找到它.
特别:
编辑:解决了仪表板未显示的问题 - 显然,仪表板中任何单个面板的设置都会超出仪表板设置.
澄清:如果仪表板中的一个面板设置为比仪表板本身更高的限制(例如,"所有用户"而不是"公共"),则Panel的限制将覆盖仪表板上设置的限制.
我最近切换到Android导航,但是遇到了很多情况(在代码的不同部分),我得到:
Fatal Exception: java.lang.IllegalArgumentException
navigation destination com.xxx.yyy:id/action_aFragment_to_bFragment is unknown to this NavController
Run Code Online (Sandbox Code Playgroud)
在每种情况下,代码都是简单的调用,例如:
findNavController(this, R.id.navigation_host_fragment).navigate(R.id.action_aFragment_to_bFragment)
Run Code Online (Sandbox Code Playgroud)
通常是响应按钮按下。
目前尚不清楚为什么会引发此错误。我目前的怀疑是,onClickListener在某些设备上被某种程度上调用了两次,从而导致导航被第二次调用(导致当时处于错误状态)。引起这种怀疑的原因是,这似乎最经常发生在某些情况下,即在导航调用之前可能会有“长时间”运行的操作。但是,我无法在自己的设备上重新创建它。
关于如何避免此问题的想法(或者实际上,是该问题的真正根本原因是什么)?
我不想使用全局动作;我对向堆栈引入更多意外状态持谨慎态度。而且,我真的希望不必在每次进行导航调用时都尝试测试当前状态。
我们已经开始在我的工作中尝试使用Scala和Play框架.设置我们的自动linting和测试框架作为第一件事,并已部署Scalastyle来处理前者.
这是非常有用的,除了我们得到这个特定的lint错误,我们发现很难以一个好的方式解决.一个简单的例子是这样的:
def helloWorld = Action {
req =>
Ok("Hello World!")
}
Run Code Online (Sandbox Code Playgroud)
虽然它常常会复杂得多(当然,很难弄清楚实际上是什么类型).
在任何一种情况下,这都为Scalastyle提供了"公共方法必须具有显式类型"错误.
不幸的是,在这里设置预期的显式类型似乎通常会导致语法错误.
对此有什么好的解决方案的建议?或者我们是否只需要对Play项目进行此检查?
我已经开发了六年的Android应用程序,并使用一个简单的"本土"图像缓存库.我最近开始使用依赖Picasso的组件,并决定可能是时候切换到通用库,而不是保留多年前编写的旧解决方案.
我的大多数图像都是存储在可绘制文件夹中的本地图像,尺寸适中(每边100-200像素).
但是,当我将Picasso的图像加载到我的布局的ImageViews中时,我看到了明显的性能损失.在渲染的布局和位图变得可见之间存在可见的"光点"(一旦图像被缓存,该光点就会消失).使用我的HG库,它基本上只是BitmapFactory.decodeResource,在SoftReferences的稀疏数组周围有一些缓存编码(这很老,正如我所说的),对同一视图的加载是无缝的并且似乎是即时的.
显然,我在Picasso中正常加载图像和异步加载的方式存在很大差异,但这真的是预期的行为吗?这似乎使Picasso不适合将局部绘图加载到UI中,我觉得这很令人惊讶.我用非常简单的方式加载图像:
Picasso.with(getActivity())
.load(getPixId)
.into(imageView);
Run Code Online (Sandbox Code Playgroud)
有没有办法调整这个以获得更好的性能?我可以俯瞰什么?
android ×8
2d ×1
android-4.0-ice-cream-sandwich ×1
android-architecture-navigation ×1
aspect-ratio ×1
file ×1
graphics ×1
java ×1
phabricator ×1
picasso ×1
scala ×1
scalastyle ×1
xml ×1