[英]Android: java.lang.NoClassDefFoundError
我正在嘗試使用JTransforms庫在Android應用(使用最新的Android Studio)中計算數學函數(DoubleFFT_1D)。 我正在使用JTransforms 網站提供的.jar文件,並將其導入到項目中。 我已經嘗試了JTransforms修訂版2.4和3.1。 該代碼編譯沒有錯誤,但是當我到達實際的方法調用時,我收到以下錯誤消息:
09-07 17:30:11.369 E/JavaBinder: *** Uncaught remote exception! (Exceptions are not yet supported across processes.)
java.lang.NoClassDefFoundError: Failed resolution of: Lorg/jtransforms/fft/DoubleFFT_1D;
at com.algoint.libzante.AutoCorrelation.compute(AutoCorrelation.java:66)
at com.algoint.libzante.EstimateACF.estimateInSamplePeriods(EstimateACF.java:104)
at <snip>
com.algoint.zante.BluetoothLeService.broadcastUpdate(BluetoothLeService.java:348)
at com.algoint.zante.BluetoothLeService.access$700(BluetoothLeService.java:50)
at com.algoint.zante.BluetoothLeService$1.onCharacteristicChanged(BluetoothLeService.java:243)
at android.bluetooth.BluetoothGatt$1.onNotify(BluetoothGatt.java:438)
at android.bluetooth.IBluetoothGattCallback$Stub.onTransact(IBluetoothGattCallback.java:399)
at android.os.Binder.execTransact(Binder.java:453)
Caused by: java.lang.ClassNotFoundException: Didn't find class "org.jtransforms.fft.DoubleFFT_1D" on path: DexPathList[[dex file "/data/data/com.algoint.zante/files/instant-run/dex/slice-slice_9-classes.dex", dex file "/data/data/com.algoint.zante/files/instant-run/dex/slice-slice_8-classes.dex", dex file "/data/data/com.algoint.zante/files/instant-run/dex/slice-slice_7-classes.dex", dex file "/data/data/com.algoint.zante/files/instant-run/dex/slice-slice_6-classes.dex", dex file "/data/data/com.algoint.zante/files/instant-run/dex/slice-slice_5-classes.dex", dex file "/data/data/com.algoint.zante/files/instant-run/dex/slice-slice_4-classes.dex", dex file "/data/data/com.algoint.zante/files/instant-run/dex/slice-slice_3-classes.dex", dex file "/data/data/com.algoint.zante/files/instant-run/dex/slice-slice_2-classes.dex", dex file "/data/data/com.algoint.zante/files/instant-run/dex/slice-slice_1-classes.dex", dex file "/data/data/com.algoint.zante/files/instant-run/dex/slice-slice_0-classes.dex", dex file "/data/data/com.algoint.zante/files/instant-run/dex/slice-json_simple-1.1_9ec115b071c72fb6edf2028f7a57e4ae60bb5a65-classes.dex", dex file "/data/data/com.algoint.zante/files/instant-run/dex/slice-dropbox-android-sdk-1.5.4_74a0c4010a6328c8c6443241412fa9c5c398a9ab-classes.dex", dex file "/data/data/com.algoint.zante/files/instant-run/dex/slice-achartengine-1.1.0_0238cc7eb0f70b6065b267fb6df8a8f6b48a5319-classes.dex"],nativeLibraryDirectories=[/data/app/com.algoint.zante-2/lib/arm64, /vendor/lib64, /system/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at com.android.tools.fd.runtime.IncrementalClassLoader$DelegateClassLoader.findClass(IncrementalClassLoader.java:90)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at com.algoint.libzante.AutoCorrelation.compute(AutoCorrelation.java:66)
at com.algoint.libzante.EstimateACF.estimateInSamplePeriods(EstimateACF.java:104)
at <snip>
com.algoint.zante.BluetoothLeService.broadcastUpdate(BluetoothLeService.java:348)
at com.algoint.zante.BluetoothLeService.access$700(BluetoothLeService.java:50)
at com.algoint.zante.BluetoothLeService$1.onCharacteristicChanged(BluetoothLeService.java:243)
at android.bluetooth.BluetoothGatt$1.onNotify(BluetoothGatt.java:438)
at android.bluetooth.IBluetoothGattCallback$Stub.onTransact(IBluetoothGattCallback.java:399)
at android.os.Binder.execTransact(Binder.java:453)
Suppressed: java.lang.ClassNotFoundException: Didn't find class "org.jtransforms.fft.DoubleFFT_1D" on path: DexPathList[[zip file "/data/app/com.algoint.zante-2/base.apk"],nativeLibraryDirectories=[/data/app/com.algoint.zante-2/lib/arm64, /vendor/lib64, /system/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
... 12 more
Suppressed: java.lang.ClassNotFoundException: Didn't find class "org.jtransforms.fft.DoubleFFT_1D" on path: DexPathList[[dex file "/data/data/com.algoint.zante/files/instant-run/dex/slice-slice_9-classes.dex", dex file "/data/data/com.algoint.zante/files/instant-run/dex/slice-slice_8-classes.dex", dex file "/data/data/com.algoint.zante/files/instant-run/dex/slice-slice_7-classes.dex", dex file "/data/data/com.algoint.zante/files/instant-run/dex/slice-slice_6-classes.dex", dex file "/data/data/com.algoint.zante/files/instant-run/dex/slice-slice_5-classes.dex", dex file "/data/data/com.algoint.zante/files/instant-run/dex/slice-slice_4-classes.dex", dex file "/data/data/com.
我在源文件中按如下方式導入了jtransforms:
import org.jtransforms.fft.DoubleFFT_1D;
帶有正確的gradle條目:
apply plugin: 'java'
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile files('libs/JTransforms-3.1-with-dependencies.jar')
}
以及相應的Android Studio依賴項設置:
該項目編譯沒有錯誤,並在以下行中引發了錯誤:
int n = 2 * nextPow2(x.length);
// Twice the number of elements are required: real and imaginary parts of the FFT are stored consecutively
double[] f = new double[2 * n];
System.arraycopy(x, 0, f, 0, x.length);
// FFT
DoubleFFT_1D fft = new DoubleFFT_1D((long) n); // ERROR ON THIS LINE
// Use "full" to avoid more machinations with symmetry
fft.realForwardFull(f);
引發錯誤時,n的值為1024,x的長度為500。我發現這兩個錯誤均同時存在:“ JTransforms-2.4.jar”和“ JTransforms-3.1-with-dependencies.jar”。 我認為原始項目是在Maven中編譯的,這有區別嗎? 您能推薦任何解決方案嗎? 謝謝。
最終,我找到了解決方案。 我忽略了.jar文件,只是將源代碼直接編譯到了項目中。 過程:-提取Jtransforms的完整git存儲庫,-將其從Maven項目轉換為Gradle項目(“ gradle init”),-將其作為模塊導入到我的項目中,然后-進行編譯。
我確實在刪除所有原始.jar文件(埋在目錄中)時遇到了一些麻煩,但是一旦完成,項目就可以編譯並運行良好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.