andorid - NDK 编译mips-platform代码

Android CPU架构之ARM和X86 中央处理器(Central Processing Unit,简称CPU)作为计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元。——百度百科将晶体管作为开关,将一个开关的输出端与另一个的输入端相连,就能构成各种逻辑电路和功能块,这些功能块采用的形式包括加法器、锁存器、触发器、寄存器、计数器等等,我们可以使用这些功能块构建自定义执行单元来执行特定计算。归根结底,CPU就是构建多个专用处理元件,并用多种方式将它们连接起来,从而实现复杂的计算的芯片。 阅读详情
上一篇文章大概讲了android-NDK的使用手册,网地址如下:
http://blog.youkuaiyun.com/andyhuabing/article/details/7492755

这一篇引自于如下的问题而生.

如何使用NDK编译工程代码,既包含java也包含native(c++)代码
有如下几个问题:
1、编译mips体系结构代码?默认的android是在ARM上开发
2、需要引用平台的头文件及android系统头文件如何做?
3、如何加入平台库,保证代码link成功?



下面就上面提到的三个问题一一进行解决

问题解决:

1、编译mips体系结构代码?默认的android是在ARM上开发

对于mips平台,首先需要下载ndk,其版本:android-ndk-r8

下载路径: http://developer.android.com/sdk/ndk/index.html   点击 android-ndk-r8-windows.zip 下载即可



搭建NDK编译环境:
a. 为NDK工程添加Builder 

选择相应的 Project ,点击右键 选择 Properties ,在窗口里选择Builders ,点"New..."按钮,新增一个“Android NDK Builder”编译配置:



b. 配置相应的参数:



在Main tab页面里 
Location 栏 选择 你安装Cygewin时配置的bin目录下的 bash.exe 所在路径,以下是我的安装路径:
c:\cygwin\bin\bash.exe

在Working Directory 里配置路径为 bin目录的路径
c:\cygwin\bin\

Arguments的配置: 
--login -c "cd '${project_loc}' &&  $NDK/ndk-build "    [这里使用project_loc变量,对于不同的工程可以直接拷贝使用]

以上参数表示: 首先登陆 Cygwin , 然后进入当前这个工程下的jni 目录(该目录下存放 c或c++的文件和 Android.mk)
最后执行 “ndk-build” 命令 执行编译。

c. $NDK环境变量还没有设置,如下图进行设定:



配置Android NDK 的存放路径,这样builder才能找到相应的编译器,库等文件。
我的NDK是存在C:\NDK\android-ndk-r8-windows\android-ndk-r8

到这里,就配置完毕了。可以开始编译jni库程序或native 应用了

对于mips平台,这个需要修改一个配置文件:
进入NDK的路径,其编译工具链如下:
\android-ndk-r8\toolchains\mipsel-linux-android-4.4.3
这里修改一下config.mk 文件

#modify before 
#TOOLCHAIN_ARCH := mips
#TOOLCHAIN_ABIS := mips

#modify after
TOOLCHAIN_ARCH := mips
TOOLCHAIN_ABIS := mipso32


与ARM下面的文件对比一下:
路径: android-ndk-r8\toolchains\arm-linux-androideabi-4.4.3

其config.mk内容如下:
TOOLCHAIN_ARCH := arm
TOOLCHAIN_ABIS := armeabi armeabi-v7a


2、需要引用平台的头文件及android系统头文件如何做?
a、需要在平台上使用android系统中将所有头文件取出,按照android的目录结构完全一致
b、从平台SDK中获取到所有的平台相关头文件
这里将所有的头文件全部放在 dev-bcm7231-headers
其中目录结构如下:



那么如何引用这些头文件呢?
jni/android.mk 中引用

# 配置android头文件的根目录
ANDROID_INCLUDE_TOP := /cygdrive/d/btools/workspace/dev-bcm7231-headers

LOCAL_C_INCLUDES += \
$(LOCAL_PATH)/porting/include \
$(LOCAL_PATH)/porting/inc \
$(ANDROID_INCLUDE_TOP)/dalvik/libnativehelper/include \
$(ANDROID_INCLUDE_TOP)/frameworks/base/include \
$(ANDROID_INCLUDE_TOP)/system/core/include \
$(ANDROID_INCLUDE_TOP)/hardware/libhardware/include \
$(ANDROID_INCLUDE_TOP)/external/skia/include \
$(ANDROID_INCLUDE_TOP)/frameworks/base/native/include \
$(ANDROID_INCLUDE_TOP)/frameworks/base/opengl/include\
$(ANDROID_INCLUDE_TOP)/hardware/libdtv/libcommon \
$(ANDROID_INCLUDE_TOP)/vendor/broadcom/bcm7231/brcm_nexus/bin/include \

ok,这里将android的头文件及平台头文件都包含进去了

3、如何加入平台库或android的第三方动态库,保证代码link成功?
首先在服务器上编译得到这些相关库,然后才能将其库放置于windows的eclipse编译环境中

对于mips平台放置路径:(工程的根目录)
\obj\local\mipso32 下面,如我就放在 lib_ipanel_BCM97231.a 库

对于arm平台放置路径:(工程的根目录)
obj\local\armeabi 下面


何时会使用或link这些库呢?
jni/android.mk 文件中需要加入:
LOCAL_SHARED_LIBRARIES := ...

LOCAL_STATIC_LIBRARIES := ...


还有一种加入动态库的方式:

在 JNI 下面建立目录: android/lib 放入引用的动态库:

LOCAL_PATH_SMALL = $(shell echo $(LOCAL_PATH) | tr A-Z a-z)
CYGDRIVE_FLAG = $(shell echo $(LOCAL_PATH_SMALL) | grep -c '/cygdrive')


ifeq ($(CYGDRIVE_FLAG), 0)
LOCAL_PATH_WINDOWNS = $(LOCAL_PATH_SMALL)
else
LOCAL_PATH_DRIVE = $(shell echo $(LOCAL_PATH_SMALL) |cut -d '/' -f 3)
LOCAL_PATH_SHARE = $(shell echo $(LOCAL_PATH_SMALL) |cut -d '/' -f 4-)
LOCAL_PATH_WINDOWNS = $(shell echo $(LOCAL_PATH_DRIVE):/$(LOCAL_PATH_SHARE))
endif


LOCAL_LDLIBS    := -L"$(LOCAL_PATH_WINDOWNS)/android/lib" \
-llog -lnativehelper -lsurfaceflinger_client \
-lskia -lcutils -lui -landroid_runtime \

在这里link这些动态库文件


动态库还有一种添加方法:

直接将动态库拷到如下目录下:

ANDROID_NDK_ROOT\platforms\android-xx\arch-arm\usr\lib

这里的xx与版本相关,请参考编译apk根目录下project.properties: 

# Project target.
target=android-9

如此则加入到 android-9\arch-arm\usr\lib 下面


对于静态库的引用方法:

#static lib module
include $(CLEAR_VARS)

LOCAL_MODULE    := test
LOCAL_SRC_FILES := porting/lib/lib_test.a
include $(PREBUILT_STATIC_LIBRARY)

引用link时使用:

LOCAL_STATIC_LIBRARIES := test


Android 关于CPU类型的so文件兼容问题(ABI),hashmap扩容过程 compileSdkVersion 28 // 编译sdk版本 defaultConfig { applicationId “com.example.zhouwei.helloworld” minSdkVersion 15 targetSdkVersion 28 versionCode 1 versionName “1.0” testInstrumentationRunner “android.support.test.runner.AndroidJUnitRunner” // 适配指定CPU架构 ndk 阅读详情

相关推荐

Android Studio NDK MIPS64工具链配置指南

MIPS64是MIPS架构的64位扩展版本,采用RISC设计理念,具有指令集精简、执行效率高、硬件复杂度低等特点。它支持多级流水线、分支预测、乱序执行等高级特性,适用于高性能嵌入式系统与轻量级服务器。MIPS64架构虽然在主流Android设备中已不常见,但其RISC架构特性仍值得研究。开发者在构建支持多架构的应用时,应根据目标设备类型、性能需求和市场覆盖率做出合理选择。下一章将深入解析NDK工具链的目录结构,并详细介绍如何手动配置MIPS64工具链。

weixin_35748962的博客 1278

Android 相关七种CPU架构适配

转载来源:http://blog.youkuaiyun.com/kester_/article/details/71055901 NDK开发时会涉及到CPU架构的适配,不同的机器上可能会有不同的CPU架构,也就是说,翻译到机器上使用的规则不一样,Android上有7种CPU架构。 1.armeabi 2.armeabi-v7a 3.arm64-v8a 4.x86 5.x86_64 6.MIPS 7.MIPS6...

假装你是大灰狼的专栏 2207

mips64el-linux-android-4.9和mipsel-linux-android-4.9

android-ndk-r10-mac-x86_64包里toolchains目录下的mips64el-linux-android-4.9和mipsel-linux-android-4.9,可以解决NDK17版本以上编译出现的No toolchains found in the NDK

Android之常见CPU架构

在开发 Android 应用时,了解这些架构的位数有助于更好地优化应用的性能和兼容性。

追梦的鱼儿 2910

利用Spm12进行fMRI数据分析:从预处理到结果解读的完整指南

本文提供了利用SPM12进行fMRI数据分析的完整流程指南,涵盖从数据预处理、统计建模到结果解读的全过程。详细介绍了在MATLAB环境下使用SPM12图形界面完成头动矫正、空间标准化等关键步骤的操作方法与避坑技巧,帮助神经科学研究者和心理学研究者高效处理功能磁共振成像数据并产出可靠结果。

weixin_29079671的博客 452

钢铁雄心4存档修改全攻略:从基础设置到高级玩法(附国家代码表)

本文详细解析《钢铁雄心4》存档修改技巧,从基础设置到高级玩法全覆盖。包括存档文件位置、格式转换、国家实力调整、国际关系修改等实用内容,并附赠国家代码表。掌握存档修改技能,解锁游戏全部潜力,实现精细参数控制,超越控制台指令的局限。

weixin_29233857的博客 1433

libusb android ndk编译--编译mips

Building: --------- To build libusb for Android do the following:  1. Download the latest NDK from:     http://developer.android.com/tools/sdk/ndk/index.html  2. Extract the NDK.  3. Open a shell ...

smilestone322的专栏 1300

PADS安装教程(超详细)

声明:个人实践 一、工具准备 pads9.5完整破解版百度网盘提取码【wjx9】 链接:https://pan.baidu.com/s/1pIP6BJO435ssmF7Hjwyz8A 提取码:wjx9 安装环境:win10 64位 二、开始解压安装 关闭杀毒,exe以管理员身份运行 点击【skip】,不然又得licese 点击【agree】 点击【modify】 设置安装的工具、路径及工程路径 设置完成后,开始【install】 在之后注册。 将Crack复制到PADS安装目录

qq_42057393的博客 5万+

MIPS 平台 Android 移植过程记录1_编译环境搭建

在工作的空闲时间, 尝试着在公司的MIPS平台上移植了Android, 把之前记录的遇到的问题贴到blog上来, 做个记录. 1.设置上网代理   /etc/apt/apt.conf, 在文件中添加下面的内容, 注意最后的 ";" 也是需要添加的, 否则会提示这个文件的结束字符不对   Acquire::http:Proxy ”user:password@192.168.xx.xx:

铁匠的七寸宫 2199

STM32U575 ADC+DMA+UART数据采集实战:CubeMX配置避坑与代码实现

在嵌入式开发中,ADC采集与DMA传输是提升系统实时性的关键技术。通过DMA将ADC数据直接搬运到内存,可大幅降低CPU占用,实现高效连续采样。结合UART的DMA发送,能进一步解放CPU,适用于工业采集、信号监测等场景。本文以STM32U575为例,详解CubeMX中ADC、DMA、UART的配置要点,包括时钟树、DMAMUX映射、循环模式等,并给出代码实现与常见问题排查,帮助开发者快速构建稳定的数据采集链路。

weixin_29194255的博客 170

Unity PBR实战:从零打造丝绸材质各向异性高光效果

本文详细介绍了在Unity中实现丝绸材质各向异性高光效果的PBR实战技巧。通过改造Standard Shader、适配IBL环境光以及高级效果调优,开发者可以创建出逼真的丝绸材质,展现动态光纹变化。文章包含关键代码示例和参数配置建议,特别适合需要提升材质表现力的Unity开发者。

weixin_29015483的博客 460

Andorid NDK文件目录说明

ndk

weixin_42157909的博客 1963

第四章 汇川技术InoProShop入门之串口自由协议解读

摘要: 串口自由协议是工业自动化中针对特定需求设计的自定义通信协议,具有高度灵活性和针对性,适用于小型设备、实时控制等场景。其核心包括自定义帧结构(起始符、地址码、数据区、校验位等)和通信规则(波特率、交互机制)。相比标准协议,自由协议效率更高但兼容性弱,设计时需注重可靠性、效率和可扩展性,适用于定制化或高实时性需求,如传感器数据采集或老旧设备改造。典型应用需平衡精简帧结构与抗干扰能力,同时预留扩展空间。

zyfucking2010的博客 2215

Andorid.mk 文件手动编译

Android.mk 手动编译

幸福就冒个泡的专栏 1万+

Linkage Mapper 工具参数详解——Building Network and Map Linkages

此文档用于解析使用LinkageMapper各输入输出参数详情以及可能的影响,并介绍了如何解释模型输出结果和输出参数,适合刚入手的人。篇幅很长很啰嗦,是因为每个参数都解释的万分细致。

sumuses的博客 6114

音视频开发基础(1):模拟视频技术简介

模拟视频技术是指用模拟技术对动态影像进行捕捉、记来、处理、存储、传输、复现的技术.模拟视频技术的发明、发展与模拟电视系统的发展密不可分.下面将通过模拟电视系统来介绍模拟视频技术中的基本概念. 首先,人的视觉系统的特征为电视等視稿系铳的发明、发展提供了理论依据.光线通过角膜、腫孔、晶状体的折射光线.透过玻璃体到达视网展.视网膜上分布着光感受器,光感受器在光线的剌激下...

琅嬛福地 1493

Android NDK目录介绍

交叉编译 在一个平台上去编译另一个平台上可以执行的本地代码 cpu平台---arm x86 mips 操作系统平台---windows linux mac os 原理 模拟不同平台的特性去编译代码 jni开发工具: ndk---native develop kit NDK目录 docs--帮助文档 platforms--好多平台版本文件夹,选择时选择项目支持的最小版本号对应的文...

weixin_34137799的博客 328

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

利用JNI技术在Android中调用、调试C++代码

在Android中调用C++其实就是在Java中调用C++代码,只是在windows下编译生成DLL,在Android中会生成Linux系统下的.so文件(好吧,其实我基本没用过Linux)。  没写过JNI的可以看看我之前的博客(Windows下利用Visual Studio开发的过程):http://cherishlc.iteye.com/admin/blogs/1328136  以及

杨名天吓 1166

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ubuntu移植jsoncpp到Android平台

简书排版 http://www.jianshu.com/p/02ccd73c927e本机OS: Ubuntu 14.04 x64NDK开发模块的时候,如果涉及到网络请求,类似json数据传递的时候,有现成的第三方json库可以移植,后台C++开发中使用的比较多的是jsoncpp,今天记录一下jsoncpp移植到Android平台的过程cmake编译此方法并非标准的NDK项目 采用的是cmake交

handy周 1503

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

安卓CPU架构梳理 && 应用商店64位APP上架适配

核心点:'armeabi', 'x86', 'armeabi-v7a', 'x86_64', 'arm64-v8a','x86','x86_64'

流星雨的博客 4681

关于Android开发中Arm、X86和Mips(草稿)

一、架构 1.Arm架构   是一个32位精简指令集(RISC)处理器架构,其广泛地使用在许多嵌入式系统设计。 2.X86架构   是一个intel通用计算机系列的标准编号缩写,也标识一套通用的计算机指令集合。 3.Mips架构   是一种采取精简指令集(RISC)的处理器架构。 二、三者区别   X86架构是X86指令集,它属于CISC指令集。ARM架构是ARM指令集,属于RIS...

weixin_33962621的博客 184

Android开发中libs包下面的mips、armeabi、armeabi-v7a和x86

转载请注明出处: 简介 在Android日常的开发过程中有的项目需要引入第三方的库,有时候大家可能会在libs文件夹下看到mips、armeabi、armeabi-v7a和x86这四个文件夹。那么这三个文件夹下面的包是干什么用的?这三个包下面存放的用C编译的本地库文件(各类『.so』文件)。 mips、armeabi、armeabi-v7a和x86都表示CPU的类型。一般的手机或

Elven_Shi的专栏 1万+

ndk r17b版本后不再支持mips报错的解决方案

问题描述和原因 使用r17b版本NDK编译时可能会出现报错 {sdkroot}/ndk-bundle/toolchains/mips64el-linux-android-4.9/prebuilt/linux-x86_64/bin/mips64el-linux-android-strip 复制代码原因是r17版本中移除了对ARMv5 (armeabi), MIPS, and MIPS64 的支持 文...

weixin_33716557的博客 378

mips android 编译,编译MIPS架构的Android版WebRTC

编译环境:Ubuntu15.04_64使用ninja进行编译WebRTC默认编译的是针对ARM架构的,在MIPS架构的CPU上运行会报错。步骤如下:(前提是你已经下好了源码,我的源码是2015年7月份下载的)1、export GYP_DEFINES="OS=android target_arch=mipsel" //指定编译为MIPS架构2、python webrtc/bui...

weixin_33946174的博客 668

android 模拟mips,Android完成向MIPS架构移植

chinaunix网友2009-12-28 08:03分析文件:hardware/libhardware_legacy/gps/Android.mk===============================# Use hardware GPS implementation if available.#ifneq ($(BOARD_GPS_LIBRARIES),)LOCAL_CFLAGS ...

weixin_30099269的博客 279

Android NDK 升级R17版本之后 报错 mips64 找不到

前几天NDK版本升级,从R16升级到了R17,编译的时候报错了 Execution failed for task ':app:transformNativeLibsWithStripDebugSymbolForDebug'  找不到mips文件夹,出现这个问题的原因是因为R17版本以及不在支持mips平台了,解决方法有两种: 1.自己重新下载R16版本,然后覆盖掉ndk的目录,NDK下...

傲娇强的博客 aojiaoqiang 807
上一篇: android - IR 遥控器无效
下一篇: Android系统广电运营之我感
andyhuabing
博客等级 码龄19年 704粉丝 165原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值