溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Eclipse NDK遷移到Android Studio的方法示例

發(fā)布時間:2020-10-07 10:26:32 來源:腳本之家 閱讀:140 作者:Labradors 欄目:移動開發(fā)

最近看一個NDK項目,因為源碼使用Eclipse IDE寫的,想把代碼導(dǎo)入Android Studio使用,畢竟好用很多,使用AS導(dǎo)入后,第一個問題就是編碼問題,項目之前竟然使用的是GBK編碼。首先就是改變編碼問題。我先在設(shè)置中將項目編碼改為UTF-8,build結(jié)果顯示一堆錯誤的亂碼,在網(wǎng)上逛了一圈,找到解決方案。

編碼

  1. 將AS右下角的UTF-8換成GBK。
  2. 跳出提示選擇"reload",此時注釋之類的亂碼會顯示正確。
  3. 右下角再選擇UTF-8
  4. 跳出提示選擇"convert",此時編碼從GBK轉(zhuǎn)為UTF-8。
  5. 編譯運(yùn)行,就不會出現(xiàn)亂碼錯誤了。
  6. 別的亂碼的類也是這種方法

NDK支持

將項目導(dǎo)入之后,build有提示錯誤:

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的方式鏈接。

  1. cmake: 選擇CMakeLists.txt文件
  2. NDK build: 選擇Android.mk文件

或者你也可以在你的module中加入

externalNativeBuild {
  ndkBuild {
   path 'src/main/jni/Android.mk'
  }
 }

無法導(dǎo)入

ndk支持后,現(xiàn)在運(yùn)行項目,項目可以啟動了,可是運(yùn)行直接崩潰,崩潰日志為:

java.lang.UnsatisfiedLinkError: Couldn't load xxx from loader dalvik.system.PathClassLoader

看樣子是無法加載庫,在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庫加載成功了,但是java調(diào)用對應(yīng)函數(shù)時,找不到對應(yīng)的c++函數(shù).

遇到這種情況,不要懷疑,sdk提供的包一定要把包名完整拷貝到項目。路徑要與so函數(shù)相對應(yīng)。

text relocations

java.lang.UnsatisfiedLinkError...xxx.so has text relocations

把targetSdkVersion降級到22就可以了。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI