今天的问题是:在debug调试的时候APP没有问题,但是签名打包后生成APP安装到手机上之后,一运行就闪退了,报错日志是:
Caused by: java.lang.ClassNotFoundException: Didn't find class "我的包名.TradeClientReceiveMsg" on path: DexPathList[[zip file "/data/app/com.finance.futures.openTreasure-X6dXuXs7pacn_pX78VieWw==/base.apk"],nativeLibraryDirectories=[/data/app/com.finance.futures.openTreasure-X6dXuXs7pacn_pX78VieWw==/lib/arm64, /data/app/com.finance.futures.openTreasure-X6dXuXs7pacn_pX78VieWw==/base.apk!/lib/arm64-v8a, /system/lib64, /vendor/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:125)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at 我的包名.TradeClientSendMsg.startConnect(Native Method)
at 我的包名.view.MainActivity.f(MainActivity.java:91)
at 我的包名.view.MainActivity.a(MainActivity.java:75)
TradeClientSendMsg这个文件里都是调用的native方法,如 public static native void startConnect(String s1),初步怀疑是.so文件没有找到导致,手机CPU没有找到与之对应的.so文件,于是就在defaultConfig里面改NDK配置,如下:
defaultConfig {
applicationId "我的包名"
minSdkVersion 19
targetSdkVersion 27
versionCode 27
versionName "1.0.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
multiDexEnabled true
externalNativeBuild {
cmake {
arguments '-DANDROID_PLATFORM=android-19',
'-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=c++_shared', '-DCMAKE_BUILD_TYPE=Release ..'
cppFlags "-frtti -fexceptions -std=c++11"
}
}
ndk {
abiFilters "arm64-v8a", "armeabi-v7a", "x86_64", "x86"
}
}
重新打包,发现还是闪退。因我手机cup是arm64-v8a型号的,于是再改:
ndk {
abiFilters "arm64-v8a"
}
只保留arm64-v8a,运行,还是闪退。百般调试无果,坑爹的东西捣鼓了一整天,后来进群里问问,一哥们说有可能是混淆造成的,于是将TradeClientSendMsg这个文件不做混淆,保留了里面的所有方法,再次运行,通了!oh ye。。。
但是很奇怪的是,我上一个APP里面调用native方法的文件并没有保留混淆但是打包后也没有问题,现在却要保留混淆调用native方法的文件,不明所以,下次研究吧。
网友评论