安装带本地库的应用程序出错

安装带本地库的应用程序出错 安装带本地库的应用程序时出错如下: W/PackageManager( 5691): Native ABI mismatch from package file W/PackageManager( 5691): Package couldn't be installed in /data/app/com.example.android.simplejni.apk 注意,并没有E/PackageManager( 5691)。出这个错的原因是android系统所在的架构与编译带本地方法应用程序的目标架构(TARGET_ARCH)不一致。如:该应用程序在是纯android源码下编译出来的,所以该应用程序本应该在ARM架构上运行,而此时你的设备android系统并不是ARM架构,而是MIPS的,这样,ARM的CPUabi为armeabi,而MIPS的CPUabi为mipso(好像是这样的)。这样就会出现Native ABI mismatch的错误。 解决的这个错误的方法: 在编译本地应用程序的android源码中修改3个地方: 1、/build/target/board/generic/BoardConfig.mk中 TARGET_CPU_ABI := armeabi 改成: TARGET_CPU_ABI := XXXX 这样修改后的结果是:生成的文件系统(android镜像)中的/system/中的build.prop会修改这样一项内容: ro.product.cpu.abi=XXXX 或者第1步我们不需要修改源码,直接把build.prop中的这样内容修改成:ro.product.cpu.abi=XXXX,重启系统即可。但后两步的内容还是不能少。 2、build/core/definitions.mk中 define add-jni-shared-libs-to-package $(hide) rm -rf $(dir $@)lib $(hide) mkdir -p $(dir $@)lib/armeabi $(hide) cp $(PRIVATE_JNI_SHARED_LIBRARIES) $(dir $@)lib/armeabi $(hide) (cd $(dir $@) && zip -r $(notdir $@) lib) $(hide) rm -rf $(dir $@)lib endef 改成: define add-jni-shared-libs-to-package $(hide) rm -rf $(dir $@)lib $(hide) mkdir -p $(dir $@)lib/XXXX $(hide) cp $(PRIVATE_JNI_SHARED_LIBRARIES) $(dir $@)lib/XXXX $(hide) (cd $(dir $@) && zip -r $(notdir $@) lib) $(hide) rm -rf $(dir $@)lib endef XXXX表示生成的本地库(*.so)打包在*.apk中的路径:/lib/XXXX 3、build/core/ensetup.mk中 在下面代码后增加相同功能的代码 ifeq ($(TARGET_ARCH),arm) ABP:=$(ABP):$(PWD)/prebuilt/$(HOST_PREBUILT_TAG)/toolchain/arm-eabi-4.4.0/bin endif 增加的代码为: ifeq ($(TARGET_ARCH),ARCH_NAME) ABP:=$(ABP):$(PWD)/prebuilt/$(HOST_PREBUILT_TAG)/toolchain/COMP/bin endif ARCH_NAME为你准备运行设备基于的CPU架构。 COMP为该CPU架构所对应的编译器

你可能感兴趣的:(android,jni,编译器)