最近看一個(gè)NDK項(xiàng)目,因?yàn)樵创a使用Eclipse IDE寫(xiě)的,想把代碼導(dǎo)入Android Studio使用,畢竟好用很多,使用AS導(dǎo)入后,第一個(gè)問(wèn)題就是編碼問(wèn)題,項(xiàng)目之前竟然使用的是GBK編碼。首先就是改變編碼問(wèn)題。我先在設(shè)置中將項(xiàng)目編碼改為UTF-8,build結(jié)果顯示一堆錯(cuò)誤的亂碼,在網(wǎng)上逛了一圈,找到解決方案。
編碼
NDK支持
將項(xiàng)目導(dǎo)入之后,build有提示錯(cuò)誤:
Error: Flag android.useDeprecatedNdk is no longer supported and will be removed in the next version of Android Studio. Please switch to a supported build system.
Consider using CMake or ndk-build integration. For more information
我們把gradle.properties中android.useDeprecatedNdk=true去掉。然后直接在AS右鍵Linked C++ Project.選擇cmake或者ndk build的方式鏈接。
或者你也可以在你的module中加入
externalNativeBuild { ndkBuild { path 'src/main/jni/Android.mk' } }無(wú)法導(dǎo)入
ndk支持后,現(xiàn)在運(yùn)行項(xiàng)目,項(xiàng)目可以啟動(dòng)了,可是運(yùn)行直接崩潰,崩潰日志為:
java.lang.UnsatisfiedLinkError: Couldn't load xxx from loader dalvik.system.PathClassLoader
看樣子是無(wú)法加載庫(kù),在module中加入:
sourceSets { main { jniLibs.srcDirs = ['libs'] } }然后在defaultConfig中加入:
ndk { moduleName "your ndk module name" abiFilters "armeabi", "armeabi-v7a", "x86" }找不到方法
java.lang.UnsatisfiedLinkError: No implementation found for int xxxxx
大概意思是so庫(kù)加載成功了,但是java調(diào)用對(duì)應(yīng)函數(shù)時(shí),找不到對(duì)應(yīng)的c++函數(shù).
遇到這種情況,不要懷疑,sdk提供的包一定要把包名完整拷貝到項(xiàng)目。路徑要與so函數(shù)相對(duì)應(yīng)。
text relocations
java.lang.UnsatisfiedLinkError...xxx.so has text relocations
把targetSdkVersion降級(jí)到22就可以了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注