Android NDK開發

##編譯問題##html

  • 一、eclipse編譯錯誤,提示「clang++.exe: error: invalid linker name in argument '-fuse-ld=bfd'」android

    解決:將Android.mk文件中的「LOCAL_LDFLAGS += -fuse-ld=bfd」修改成「LOCAL_LDFLAGS += -fuse-ld=bfd.exe」web

##平臺架構##架構

Android系統目前支持如下七種不一樣的CPU架構:ARMv5,ARMv7(從2010年起),x86(從2011年起),MIPS(從2012年起),ARMv8,MIPS64和x86_64(從2014年起),每一種都關聯着一個相應的ABI。
每個CPU架構對應一個ABI:armeabi,armeabi-v7a,x86,mips,arm64-v8a,mips64,x86_64。

##Android如何加載.so文件##app

不一樣CPU架構的Android手機加載時會在libs下找相對應的目錄,並從對應的目錄下尋找須要的.so文件;
若是沒有對應的目錄,就會去armeabi或者armeabi-v7a下去尋找,兼容運行;
若是有對應的目錄,可是沒有找到對應的.so文件,也不會去armeabi下去尋找,直接報錯。

##平臺的兼容##eclipse

armeabi架構ide

armeabi-v7a架構函數

v7a的CPU支持硬件浮點運算,目前絕大對數設備已是v7a,因此爲了性能上的更優,不要爲了兼容放到armeabi文件夾下

x86架構性能

x86能夠兼容armeabi平臺運行(不管是armeabi-v7a仍是armeabi),同時帶來的是性能上的損耗。另外須要指出,打包出的x86的so,總會比armeabi平臺的體積更小,對於性能有潔癖的童鞋們,仍是建議在打包so的時候支持x86。

全部的x86/x86_64/armeabi-v7a/arm64-v8a設備都支持armeabi架構的.so文件,所以彷佛移除其餘ABIs的.so文件是一個減小APK大小的好技巧。但事實上並非:這不僅影響到函數庫的性能和兼容性。 x86設備可以很好的運行ARM類型函數庫,但並不保證100%不發生crash,特別是對舊設備。 64位設備(arm64-v8a,x86_64,mips64)可以運行32位的函數庫,可是以32位模式運行,在64位平臺上運行32位版本的ART和Android組件,將丟失專爲64位優化過的性能(ART,webview,media等等)。gradle

##上傳指定ABI版本的APK##

以減小APK包大小爲由是一個錯誤的藉口,由於你也能夠選擇在應用市場上傳指定ABI版本的APK,生成不一樣ABI版本的APK能夠在build.gradle中以下配置。

android {
	... 
	splits {
		abi {
			enable true
			reset()
			include 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a' //select ABIs to build APKs for
			universalApk true //generate an additional APK that contains all the ABIs
		}
	}

	// map for the version code
	project.ext.versionCodes = ['armeabi': 1, 'armeabi-v7a': 2, 'arm64-v8a': 3, 'mips': 5, 'mips64': 6, 'x86': 8, 'x86_64': 9]

	android.applicationVariants.all { variant ->
		// assign different version code for each output
		variant.outputs.each { output ->
			output.versionCodeOverride =
					project.ext.versionCodes.get(output.getFilter(com.android.build.OutputFile.ABI), 0) * 1000000 + android.defaultConfig.versionCode
		}
	}
 }

##參考##

Android 關於arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容問題
http://blog.csdn.net/ouyang_peng/article/details/51168072

Android項目針對libs(armeabi,armeabi-v7a,x86)進行平臺兼容
http://blog.csdn.net/u011688880/article/details/46984547

Androidndk開發打包時咱們應該如何注意平臺的兼容(x86,arm,arm-v7a)
http://www.it165.net/embed/html/201410/2707.html
相關文章
相關標籤/搜索