android 64位兼容32位


        猴子在调用高德地图的时候,遇到一个操作系统兼容问题,异常堆栈说是找不到so库文件,猴子就不懂了,明明有他说的那个文件。

        后来和同行交流,他们的jniLibs中有一个arm64-v8a的文件夹用来存放64位操作系统的so库文件,于是猴子自己建了一个arm64-v8a文件夹,因为高德并没有把64位的so库文件公布出来,所以,猴子直接把他们唯一的so库考到了arm64-v8a文件夹下。自以为这下就该好了,于是等待见证奇迹。奇迹果然发生了,爆出了那个so库是32位而非64位的异常。猴子果断蒙圈了。下载了高德的demo,看到她们的demo里面也只有armeabi这一个库文件夹。这让猴子感觉到,64位的操作系统可以兼容32位的库文件。于是多方查找资料。终于在一家英文网站上找到了答案。

       解决方案也很简单,在build.gradle中加上,这句话的意思大概就是,告诉程序加载如下的so文件


defaultConfig {
  ......

    ndk {
        abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
    }


}

这时会报错,因为gradle的配置中,并不知道是否要做操作系统的兼容,这时只要在gradle.properties文件中加上

android.useDeprecatedNdk=true

就可以了。

运行,终于能奇迹般地运行起来了。

        猴子在调用高德地图的时候,遇到一个操作系统兼容问题,异常堆栈说是找不到so库文件,猴子就不懂了,明明有他说的那个文件。

        后来和同行交流,他们的jniLibs中有一个arm64-v8a的文件夹用来存放64位操作系统的so库文件,于是猴子自己建了一个arm64-v8a文件夹,因为高德并没有把64位的so库文件公布出来,所以,猴子直接把他们唯一的so库考到了arm64-v8a文件夹下。自以为这下就该好了,于是等待见证奇迹。奇迹果然发生了,爆出了那个so库是32位而非64位的异常。猴子果断蒙圈了。下载了高德的demo,看到她们的demo里面也只有armeabi这一个库文件夹。这让猴子感觉到,64位的操作系统可以兼容32位的库文件。于是多方查找资料。终于在一家英文网站上找到了答案。

       解决方案也很简单,在build.gradle中加上,这句话的意思大概就是,告诉程序加载如下的so文件


defaultConfig {
  ......

    ndk {
        abiFilters "armeabi", "armeabi-v7a", "x86", "mips"
    }


}

这时会报错,因为gradle的配置中,并不知道是否要做操作系统的兼容,这时只要在gradle.properties文件中加上

android.useDeprecatedNdk=true

就可以了。

运行,终于能奇迹般地运行起来了。

猜你喜欢

转载自blog.csdn.net/twtje0304_01/article/details/71534292