我正在开发一个应用程序,它具有记录音频和同时进行FFT的活动。还在屏幕上显示类似声纳的动画。为了同时进行FFT,app应该快速处理。 在我的测试中,应用程序在20毫秒内完成ffts,这在android填充下一个缓冲区之前非常好。但是我在依赖项/ build.gradle中添加了一些库后,尽管记录活动与该库无关,但它的fft持续时间会急剧增加到400ms,并且无法在下一个缓冲区之前完成fft进程。它会引起问题 我的问题是;我可以为某些活动禁用某些库吗?
有问题的库是'com.goseamless:seamless:2.4.0',它是广告网络库。 为了让它运行,我需要启用multidex。 添加并启用multidex后,会出现上述问题
android {
compileSdkVersion 21
buildToolsVersion ANDROID_BUILD_TOOLS_VERSION
//compileOptions.encoding = 'windows-1254'
defaultConfig {
minSdkVersion ANDROID_BUILD_MIN_SDK_VERSION
targetSdkVersion ANDROID_BUILD_TARGET_SDK_VERSION
multiDexEnabled true
}
dexOptions {
//incremental true
javaMaxHeapSize "2048M"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
}
repositories {
maven {
url "http://maven.seamlessapi.com:8081/nexus/content/repositories/releases/"
}
}
dependencies {
compile files('libs/picasso-2.5.2.jar')
compile project(':Libraries:CropImageLib')
compile project(':Libraries:facebook-android')
compile project(':Libraries:NineOldLibs')
compile project(':Libraries:SlidingMenu')
compile files('libs/JTransforms-3.0.jar')
compile files('libs/JLargeArrays-1.2.jar')
compile files('libs/gdata-core-1.0.jar')
compile 'com.android.support:recyclerview-v7:+'
compile 'com.android.support:support-v4:18.0.+'
compile 'com.android.support:appcompat-v7:18.0.+'
compile 'com.goseamless:seamless:2.4.0'
compile 'com.android.support:multidex:1.0.1'
}
任何想法???
答案 0 :(得分:0)
我的问题是;我可以为某些活动禁用某些库吗?
不是从Gradle的角度来看。
尽管记录活动与该库无关,但它的fft持续时间会急剧增加到400ms,并且无法在下一个缓冲区之前完成fft过程。它会引起问题
使用Traceview和systrace等工具确定花费的时间。然后,弄清楚你需要做些什么来改进它。例如,广告视图中可能有一些方法需要从活动的onPause()
调用,以使它们消耗更少的CPU时间。
答案 1 :(得分:0)
我找到了问题和解决方案。由于广告网络api包括arount 40k方法,问题是65k dex问题。所以我开始通过获取类并将它们作为java文件添加到应用程序中来缩小我使用的库。所以我可以删除库。然后当它回到65k时,它又开始工作了。如果您需要更多信息,请告诉我。此外,我使用这个伟大的工具来了解哪个库有详细的方法。 https://github.com/mihaip/dex-method-counts