【Android】自編譯MMKV適配armv7 32位老架構(gòu)

前言

MMKV是騰訊開發(fā)的開源存儲庫,用內(nèi)存轉(zhuǎn)儲的形式存儲鍵值對數(shù)據(jù)雾鬼,支持Android / macOS / Windows / POSIX / HarmonyOS NEXT 等平臺。特點是速度非成驯瘢快洞渤,哪怕應用閃退了都能保證數(shù)據(jù)能夠被保存下來。
但新版本的MMKV不支持armv7這樣的老架構(gòu)西轩,一些上古設(shè)備只支持32位就用不上MMKV的新版本。
本文內(nèi)容是自行編譯32位庫并添加到APP中的流程脑沿。

編譯so庫

先把源碼拉下來藕畔,目前最新版本是2.0.0

git clone https://github.com/Tencent/MMKV/blob/master

然后用Android Studio 4.2以上的版本打開/Android/MMKV這個路徑,打開以后里面有三層:
mmkv 庫本體
mmkvannotation 注解捅伤,不用管
mmkvdemo Demo源碼
打開mmkvbuild.gradle劫流,找到這段

defaultConfig {
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        externalNativeBuild {
            cmake {
                // uncomment this line to support 32-bit ABIs (armeabi-v7a & x86)
                // abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
                abiFilters 'arm64-v8a', 'x86_64'
            }
        }
        ndkVersion = '26.3.11579264'
        minSdkVersion rootProject.ext.minSdkVersion
    }

把它改成這樣

defaultConfig {
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        externalNativeBuild {
            cmake {
                 abiFilters 'armeabi-v7a'
            }
        }
        ndkVersion = '26.3.11579264'
        minSdkVersion rootProject.ext.minSdkVersion
    }

然后打開Android Studio的設(shè)置,搜SDK丛忆,檢查一下有沒有安裝26.3.11579264這個版本的NDK祠汇,沒有的話就裝一下。

編譯目標選mmkvdemo熄诡,點菜單 Build -> Build Bundle(s)/APK(s) -> Build APK(s) 或者直接點綠三角運行一下可很。

然后找這個目錄mmkv\build\intermediates\library_jni\DefaultCppDebug\jni,里面有個libmmkv.so就是我們要的凰浮。

下載官方的aar

隨便找一個APP項目我抠,在gradle里面導入和剛剛修改的源碼相同版本的mmkv

implementation 'com.tencent:mmkv-static:2.0.0'

然后在build.gradle底部加上這段,這兩個函數(shù)可以把gradle同步下來的包復制一份到指定的目錄里袜茧。

task listDependencies {
    doLast {
        configurations.each { config ->
            if (config.canBeResolved) {
                config.files.each { file ->
                    println file
                }
            }
        }
    }
}

task copyDependencies(type: Copy) {
    from {
        configurations.findAll { config ->
            config.canBeResolved
        }.collect { config ->
            config.files
        }
    }
    into "$buildDir/libs/dependencies"
}

點右上角Sync同步一下菜拓,此時會發(fā)現(xiàn)這兩個task前面多了個綠三角。先點第一個的綠三角笛厦,選第一項run纳鼎,等控制臺輸出結(jié)束,再點第二個的綠三角。
然后去app\build\libs\dependencies這個目錄就能找到aar包了贱鄙。

向aar中添加so庫

用壓縮軟件打開官方的aar包劝贸,結(jié)構(gòu)大概長這樣

Archive:  mmkv-static-2.0.0.aar
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  1980-02-01 00:00   aidl/
        0  1980-02-01 00:00   aidl/com/
        0  1980-02-01 00:00   aidl/com/tencent/
        0  1980-02-01 00:00   aidl/com/tencent/mmkv/
       67  1980-02-01 00:00   aidl/com/tencent/mmkv/ParcelableMMKV.aidl
      244  1980-02-01 00:00   AndroidManifest.xml
        0  1980-02-01 00:00   arm64-v8a/
    26165  1980-02-01 00:00   classes.jar
        0  1980-02-01 00:00   com/
        0  1980-02-01 00:00   com/tencent/
        0  1980-02-01 00:00   com/tencent/mmkv/
        0  1980-02-01 00:00   jni/
        0  1980-02-01 00:00   jni/arm64-v8a/
   584368  1980-02-01 00:00   jni/arm64-v8a/libmmkv.so
        0  1980-02-01 00:00   jni/x86_64/
   576112  1980-02-01 00:00   jni/x86_64/libmmkv.so
       44  1980-02-01 00:00   META-INF/com/android/build/gradle/aar-metadata.properties
      401  1980-02-01 00:00   proguard.txt
        0  1980-02-01 00:00   R.txt
        0  1980-02-01 00:00   x86_64/
---------                     -------

在最外層新建一個空的armeabi-v7a目錄
然后在jni這個目錄下再新建一個armeabi-v7a目錄,把上一步我們自己編譯的libmmkv.so放進去逗宁,重新壓縮即可

Archive:  mmkv-static-2.0.0-armv7.aar
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  1980-02-01 00:00   aidl/
        0  1980-02-01 00:00   aidl/com/
        0  1980-02-01 00:00   aidl/com/tencent/
        0  1980-02-01 00:00   aidl/com/tencent/mmkv/
       67  1980-02-01 00:00   aidl/com/tencent/mmkv/ParcelableMMKV.aidl
      244  1980-02-01 00:00   AndroidManifest.xml
        0  1980-02-01 00:00   arm64-v8a/
        0  2024-11-07 14:23   armeabi-v7a/    <-新建的空目錄
    26165  1980-02-01 00:00   classes.jar
        0  1980-02-01 00:00   com/
        0  1980-02-01 00:00   com/tencent/
        0  1980-02-01 00:00   com/tencent/mmkv/
        0  1980-02-01 00:00   jni/
        0  1980-02-01 00:00   jni/arm64-v8a/
   584368  1980-02-01 00:00   jni/arm64-v8a/libmmkv.so
        0  2024-11-07 14:23   jni/armeabi-v7a/    <-新建的目錄
   670260  2024-11-07 14:09   jni/armeabi-v7a/libmmkv.so    <-自己編譯的so庫
        0  1980-02-01 00:00   jni/x86_64/
   576112  1980-02-01 00:00   jni/x86_64/libmmkv.so
       44  1980-02-01 00:00   META-INF/com/android/build/gradle/aar-metadata.properties
      401  1980-02-01 00:00   proguard.txt
        0  1980-02-01 00:00   R.txt
        0  1980-02-01 00:00   x86_64/
---------                     -------
  1857661                     23 files

重新導包

回到要使用MMKV的安卓項目映九,打開build.gradle,刪掉這行

implementation 'com.tencent:mmkv-static:2.0.0'

然后新增一行

implementation fileTree(dir: 'libs', include: ['*.aar'])

把我們剛剛重新打包好的mmkv-static-2.0.0-armv7.aar放到app/libs目錄下
重新Sync一下
搞定了瞎颗,現(xiàn)在MMKV 2.0.0支持32位的armv7了

參考資料

MMKV——基于 mmap 的高性能通用 key-value 組件
android_setup_cn MMKV for Android

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末件甥,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子言缤,更是在濱河造成了極大的恐慌嚼蚀,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件管挟,死亡現(xiàn)場離奇詭異,居然都是意外死亡弄捕,警方通過查閱死者的電腦和手機僻孝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來守谓,“玉大人穿铆,你說我怎么就攤上這事≌瘢” “怎么了荞雏?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長平酿。 經(jīng)常有香客問我凤优,道長,這世上最難降的妖魔是什么蜈彼? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任筑辨,我火速辦了婚禮,結(jié)果婚禮上幸逆,老公的妹妹穿的比我還像新娘棍辕。我一直安慰自己,他們只是感情好还绘,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布楚昭。 她就那樣靜靜地躺著,像睡著了一般拍顷。 火紅的嫁衣襯著肌膚如雪抚太。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天菇怀,我揣著相機與錄音凭舶,去河邊找鬼晌块。 笑死,一個胖子當著我的面吹牛帅霜,可吹牛的內(nèi)容都是我干的匆背。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼身冀,長吁一口氣:“原來是場噩夢啊……” “哼钝尸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起搂根,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤珍促,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后剩愧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體猪叙,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年仁卷,在試婚紗的時候發(fā)現(xiàn)自己被綠了穴翩。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡锦积,死狀恐怖芒帕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情丰介,我是刑警寧澤背蟆,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站哮幢,受9級特大地震影響带膀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜家浇,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一本砰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧钢悲,春花似錦点额、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至惭等,卻和暖如春珍手,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工琳要, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留寡具,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓稚补,卻偏偏與公主長得像童叠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子课幕,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容