正如任何Android开发人员都应该知道的那样,你的apk有65k的方法限制(因为VM只有16位用于方法处理).它应该很难通过您自己的方式实现,但只要您开始添加一些库就很容易.
从去年开始,您可以通过在Android 5.0及更高版本上启用MultiDex来解决此问题(并为以前的Android版本添加支持库).即使这是可能的,减少方法数量并获得更小的api总是更好(性能应该更好,不应该吗?).
在某些时候,Android家伙意识到他们的Google Play服务库的大小是无法承受的(20k方法),他们决定将它拆分为不同的模块,因此您可以简单地添加您需要的部分(等级):
compile ('com.google.android.gms:play-services-analytics:8.1.0')
compile('com.google.android.gms:play-services-appindexing:8.1.0')
Run Code Online (Sandbox Code Playgroud)
你知道是否有可能用Guava库做那样的事情? 这是大约15K的方法,所以它会非常有用.我想只使用番石榴的一小部分,所以我不需要/想要包括另一个.我一直在查看文档和谷歌搜索,但没有找到.
compile group: 'com.google.guava', name: 'guava', version: '18.0'
Run Code Online (Sandbox Code Playgroud)
有些人在两年前问了类似的东西,可能是为了一个Java项目,但当时不存在较小的番石榴部分.下载番石榴库的一部分
我唯一想到的就是复制所需的Guava类而不是加载库,但我认为这是一个糟糕的解决方案.
您认为任何大型图书馆都不应该像使用Play服务一样使用模块拆分系统吗?
编辑:此外,multidex任务需要太长时间(之前的一分半钟不到15秒),所以每次我想启动应用程序时我都要等待.因此,即使使用Proguard是生产版本的一个很好的解决方案,它也不适合开发,因为它需要比多索引更长的时间.
我去年在Play商店发布了6个应用程序,所有应用程序都定位于我的国家/地区,在Developer Console的" 定价和分发"部分下发布.然而今天我正在检查contry统计数据(按国家/地区设置的当前安装),并且所有这些都在不同的国家/地区(十个或更多)安装了一堆.这怎么可能?
我知道分发过滤器正在以某种方式工作,因为有一次我向国外的朋友请求安装我的一个应用程序,直到我在定价和分发部分检查他的国家.所以我不知道为什么
到目前为止,我能想到的唯一解释是,这些部分正在检查不同的属性以获得国家.也许"发行"只关注运营商定义的国家,而统计中的信息检查现在的电话在哪里......但这并不是那么直观,并且在开发者控制台中没有明确的描述.
我发现了另一个问题相同的问题,但它没有得到妥善回答,今天已经关闭了. /sf/ask/1400564371/ 用户@jasonflaherty建议使用不会检查国家/地区的修改过的Google Play.这可能有意义......但我想要更多意见.
这是在你的应用程序上发生的吗?知道发生了什么事吗?
谢谢
我已经实现了一个横幅,每当用户失去连接时就会弹出。重新连接后,另一个横幅会显示几秒钟然后消失。
布局是一个RelativeLayout,其中一个灰色的TextView 表示警告*,一个绿色的TextView 表示重新连接消息。
如果我只是更改 Visibility.GONE 和 Visibility.VISIBLE,一切都会正常。
但我想做得更漂亮,所以我添加了一些动画。我这里遇到了一个奇怪的问题。在第一次执行中,一切都按预期进行。后续执行无法正常工作。
我想在重新连接时同时为两个文本视图设置动画。因此,灰色文本视图淡出,而绿色文本视图淡入(两者同时)。仅在第一次执行时才有效。下次它顺序执行时:首先灰色文本视图淡出,然后绿色文本视图淡入。我不希望它顺序执行。
我已将视频上传到 Youtube(30 秒),以便您可以看到效果。先是工作,然后就不行了。观看此内容比阅读我的描述更容易:https://youtu.be/rD1ZNzKen0U
交叉淡入淡出方法是所有魔法发生的地方。如您所见,view.animate() 在两个线程内调用。最初我实现了完全相同的代码,但没有线程,因为 animate() 方法应该是异步的。但我对这个问题很恼火,所以我尝试这样做。我还尝试在设置每个动画之前执行 view.clearAnimations() 。但什么也没有。
private void crossfade() {
final int animationDuration = 600;
// Set the view to 0% opacity but visible, so that it is visible (but fully transparent) during the animation.
bannerNetworkConnected.setAlpha(0f);
bannerNetworkConnected.setVisibility(View.VISIBLE);
bannerNetworkDisconnected.animate()
.alpha(0f)
.setDuration(animationDuration)
.setListener(null);
bannerNetworkConnected.animate()
.alpha(1f)
.setDuration(animationDuration)
// .setListener(null);
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
dissapearFadding();
}
});
flipper.stopFlipping();
}
Run Code Online (Sandbox Code Playgroud)
关闭重新连接的横幅的方法:
private void dissapearFadding() { …Run Code Online (Sandbox Code Playgroud)