2013-03-20 78 views
3

我正在使用一個相當大的預編譯庫(15 MiB),並且在arm5和arm7版本之間有顯着的加速。我的應用程序不是NDK應用程序,所以我不能在Application.mk AFAIK中聲明APP_ABI。我的目標SDK至少是android 2.3,儘管我個人還沒有看到2.3+的設備不支持armeabi-v7a,但根據http://androidhardwares.com/android-hardware-development/android-hardware-requirements/,我應該只假設armeabi。針對不同ABI庫的多個APK

是否有某些功能或GL我可以假設所有arm-v7處理器都可用,但不能在arm-v6或arm-v5上使用?有沒有辦法將我的應用程序轉換爲Application.mk中的那一個選項的NDK JUST?如果我只是使用不同的版本名稱(IE 1.0-arm5,1.0-arm7),並且lib中只有armeabi和armeabi-v7a目錄的不同apks才能起作用?根據http://developer.android.com/google/play/publishing/multiple-apks.html,我必須在Android清單中有其他不同的東西才能工作。

+2

我想通了。只需在Android Manifest中添加5或7的versionCode即可表示手臂級別就像魅力一樣。因此,如果版本代碼爲1000之前,請將其更改爲10005或10007,以獲取arm 5和arm 7版本。如果用戶的設備兼容或arm5版本,這將顯示arm7版本(更高的版本號)。 – Erroneous 2013-03-20 15:10:17

+0

這是一個很酷的解決方法!感謝分享!! – 2013-03-20 17:52:42

+0

請將您的解決方案作爲下面的答案發布。謝謝。 – 2013-03-28 01:12:49

回答

1

解決的辦法是將versionCode設置爲AndroidManifest.xml中較高級別系統的較高號碼。如果您的版本爲1.0.0,版本代碼爲100,則將其更改爲手臂5的1005和手臂7的1007.這樣,當用戶在Play商店中看到它時,如果設備支持,則會下載arm 7的版本因爲它有更高版本的代碼。上傳到開發者控制檯時,請確保首先上傳較低版本的代碼。

1

「我正在使用庫」 - 這是一個本地庫(C/C++)嗎?如果是,那麼你的應用程序就是一個NDK應用程序,即使你不用ndk-build構建這個庫作爲你的常規構建過程的一部分;即使它是由一些不同的本地工具鏈構建的,與NDK完全無關;即使它是一個你根本沒有建立的第三方圖書館。

因此,在Apllication.mk中設置APP_ABI沒有問題。我相信這會解決你的問題。

+0

太好了,謝謝!因此,我可以有一個空白Application.mk只有2條線?: APP_ABI:= armeabi-V7A APP_PLATFORM:= Android的9 我還要補充一點,這是一個預編譯庫(.so文件),所以我」 m沒有運行GCC。 – Erroneous 2013-03-20 13:42:25

0

您應該訂購版本代碼,以便在每臺設備上運行性能最佳的APK。例如,請訂購版本代碼,以便x86 APK具有最高的版本代碼,然後是ARMv7,然後是ARMv5TE。因此x86 APK首選x86設備,ARMv7 APK首選ARMv7設備。

相關問題