当前位置:首页 » 安卓系统 » macandroidndk

macandroidndk

发布时间: 2022-05-01 20:59:22

A. mac android ndk bin文件如何安装

直接解压就行了。然后把bin的目录加到系统PATH里:
export PATH=$PATH:/xxx/NDK/bin

B. mac 下使用Android studio 进行ndk开发 报这个错是什么问题

1. 在Eclipse->Project->Property->C/C++ Build->Environment ,添加一个变量,名字任意,例如 ndk-build,指向的路径是NDK所在目录,例如:/Users/apple/Documents/Soft/Android-ndk-r10d2. 在Eclipse->Project->Property->C/C++ Build,在 Builder 里默认是 ndk-path,通过从 Variable 里选择上面创建的 ndk-build,即可。另外还有个问题:提示:AndroidManifest.xml file missing!这时只需要Eclipse->Project->Clean 即可!

C. 如何定位Android NDK开发中遇到的错误

利用Android NDK开发本地应用时,几乎所有的程序员都遇到过程序崩溃的问题,但它的崩溃会在logcat中打印一堆看起来类似天书的堆栈信息,让人举足无措。单靠添加一行行的打印信息来定位错误代码做在的行数,无疑是一件令人崩溃的事情。在网上搜索“Android NDK崩溃”,可以搜索到很多文章来介绍如何通过Android提供的工具来查找和定位NDK的错误,但大都晦涩难懂。下面以一个实际的例子来说明,如何通过两种不同的方法,来定位错误的函数名和代码行。

首先,来看看我们在hello-jni程序的代码中做了什么(有关如何创建或导入工程,此处略),下面代码中:在JNI_OnLoad()的函数中,即so加载时,调用willCrash()函数,而在willCrash()函数中, std::string的这种赋值方法会产生一个空指针错误。这样,在hello-jni程序加载时就会闪退。我们记一下这两个行数:在61行调用了willCrash()函数;在69行发生了崩溃。

下面我们来看看发生崩溃(闪退)时系统打印的logcat日志:

如果你看过logcat打印的NDK错误的日志就会知道,我省略了后面很多的内容,很多人看到这么多密密麻麻的日志就已经头晕脑胀了,即使是很多资深的Android开发者,在面对NDK日志时也大都默默地选择了无视。

其实,只要你细心的查看,再配合Google 提供的工具,完全可以快速地准确定位出错的代码位置,这个工作我们称之为“符号化”。需要注意的是,如果要对NDK错误进行符号化的工作,需要保留编译过程中产生的包含符号表的so文件,这些文件一般保存在$PROJECT_PATH/obj/local/目录下。

第一种方法:ndk-stack

这个命令行工具包含在NDK工具的安装目录,和ndk-build及其他常用的一些NDK命令放在一起,比如在我的电脑上,其位置是/android-ndk-r9d/ndk-stack。根据Google官方文档,NDK从r6版本开始提供ndk-stack命令,如果你用的之前的版本,建议还是尽快升级至最新的版本。使用ndk –stack命令也有两种方式

实时分析日志

在运行程序的同时,使用adb获取logcat日志,并通过管道符输出给ndk-stack,同时需要指定包含符号表的so文件位置;如果你的程序包含了多种CPU架构,在这里需求根据错误发生时的手机CPU类型,选择不同的CPU架构目录,如:

当崩溃发生时,会得到如下的信息:

我们重点看一下#03和#04,这两行都是在我们自己生成的libhello-jni.so中的报错信息,因此会发现如下关键信息:

回想一下我们的代码,在JNI_OnLoad()函数中(第61行),我们调用了willCrash()函数;在willCrash()函数中(第69行),我们制造了一个错误。这些信息都被准确无误的提取了出来!是不是非常简单?

先获取日志再分析

这种方法其实和上面的方法没有什么大的区别,仅仅是logcat日志获取的方式不同。可以在程序运行的过程中将logcat日志保存到一个文件,甚至可以在崩溃发生时,快速的将logcat日志保存起来,然后再进行分析,比上面的方法稍微灵活一点,而且日志可以留待以后继续分析。

第二种方法:使用addr2line和objmp命令

这个方法适用于那些不满足于上述ndk-stack的简单用法,而喜欢刨根问底的程序员们,这两个方法可以揭示ndk-stack命令的工作原理是什么,尽管用起来稍微麻烦一点,但可以稍稍满足一下程序员的好奇心。

先简单说一下这两个命令,在绝大部分的linux发行版本中都能找到他们,如果你的操作系统是Linux,而你测试手机使用的是Intel x86系列,那么你使用系统中自带的命令就可以了。然而,如果仅仅是这样,那么绝大多数人要绝望了,因为恰恰大部分开发者使用的是Windows,而手机很有可能是armeabi系列。

在NDK中自带了适用于各个操作系统和CPU架构的工具链,其中就包含了这两个命令,只不过名字稍有变化,你可以在NDK目录的toolchains目录下找到他们。以我的Mac电脑为例,如果我要找的是适用于armeabi架构的工具,那么他们分别为arm-linux-androideabi-addr2line和arm-linux-androideabi-objmp;位置在下面目录中,后续介绍中将省略此位置:

假设你的电脑是Windows系统,CPU架构为mips,那么你要的工具可能包含在一下目录中:

接下来就让我们来看看如何使用这两个工具,下面具体介绍。

找到日志中的关键函数指针

其实很简单,就是找到backtrace信息中,属于我们自己的so文件报错的行。

首先要找到backtrace信息,有的手机会明确打印一行backtrace(比如我们这次使用的手机),那么这一行下面的一系列以“#两位数字 pc”开头的行就是backtrace信息了。有时可能有的手机并不会打印一行backtrace,那么只要找到一段以“#两位数字 pc ”开头的行,就可以了。

其次要找到属于自己的so文件报错的行,这就比较简单了。找到这些行之后,记下这些行中的函数地址。

使用addr2line查找代码位置

执行如下的命令,多个指针地址可以在一个命令中带入,以空格隔开即可

结果如下:

从addr2line的结果就能看到,我们拿到了我们自己的错误代码的调用关系和行数,在hello-jni.cpp的69行和61行(另外两行因为使用的是标准函数,可以忽略掉),结果和ndk-stack是一致的,说明ndk-stack也是通过addr2line来获取代码位置的。

使用objmp获取函数信息

通过addr2line命令,其实我们已经找到了我们代码中出错的位置,已经可以帮助程序员定位问题所在了。但是,这个方法只能获取代码行数,并没有显示函数信息,显得不那么“完美”,对于追求极致的程序员来说,这当然是不够的。下面我们就演示一下怎么来定位函数信息。

首先使用如下命令导出函数表:

在生成的asm文件中查找刚刚我们定位的两个关键指针00004fb4和00004f58:

从这两张图可以清楚的看到(要注意的是,在不同的NDK版本和不同的操作系统中,asm文件的格式不是完全相同,但都大同小异,请大家仔细比对),这两个指针分别属于willCrash()和JNI_OnLoad()函数,再结合刚才addr2line的结果,那么这两个地址分别对应的信息就是:

相当完美,和ndk-stack得到的信息完全一致!

Testin崩溃分析如何帮开发者发现NDK错误

以上提到的方法,只适合在开发测试期间,如果你的应用或游戏已经上线,而用户经常反馈说崩溃、闪退,指望用户帮你收集信息定位问题几乎是不可能的。这个时候,我们就需要用其他的手段来捕获崩溃信息。

目前业界已经有一些公司推出了崩溃信息收集的服务,通过嵌入SDK,在程序发生崩溃时收集堆栈信息,发送到云服务平台,从而帮助开发者定位错误信息。在这方面,国内的Testin和国外的crittercism都可以提供类似服务。

Testin从1.4版本开始支持NDK的崩溃分析,其最新版本已升级到1.7。当程序发生NDK错误时,其内嵌的SDK会收集程序在用户手机上发生崩溃时的堆栈信息(主要就是上面我们通过logcat日志获取到的函数指针)、设备信息、线程信息等,SDK将这些信息上报至Testin云服务平台,在平台进行唯一性的处理、并可以自定义时段进行详尽的统计分析,从多维度展示程序崩溃的信息和严重程度;最新版本还支持用户自定义场景,方便开发者定位问题所在。

从用户手机上报的堆栈信息,Testin为NDK崩溃提供了符号化的功能,只要将我们编译过程中产生的包含符号表的so文件上传,就可以自动将函数指针地址定位到函数名称和代码行数。符号化之后,看起来就和我们前面在本地测试的结果是一样的了,一目了然。而且使用这个功能还有一个好处:这些包含符号表的so文件,在每次开发者编译之后都会改变,很有可能我们发布之后就已经变了,因为开发者会修改程序。在这样的情况下,即使我们拿到了崩溃时的堆栈信息,那也无法再进行符号化了。我们可以将这些文件上传到Testin进行符号化的工作,Testin会为我们保存和管理不同版本的so文件,确保信息不会丢失。

D. 如何通过C的方式在android NDK下面查找本机的mac地址

boolGetMac(char*pBuffer)
{
structifreq*ifr;
structifconfifc;
ints,i;
intnumif;

//findnumberofinterfaces.
memset(&ifc,0,sizeof(ifc));
ifc.ifc_ifcu.ifcu_req=NULL;
ifc.ifc_len=0;

if((s=::socket(PF_INET,SOCK_STREAM,0))<0)
{
CCLog("SgProfile::GetMac111111");
returnfalse;
}

if(ioctl(s,SIOCGIFCONF,&ifc)<0)
{
CCLog("SgProfile::GetMac222222");
returnfalse;
}

if((ifr=(ifreq*)malloc(ifc.ifc_len))==NULL)
{
CCLog("SgProfile::GetMac333333");
returnfalse;
}

ifc.ifc_ifcu.ifcu_req=ifr;

if(ioctl(s,SIOCGIFCONF,&ifc)<0)
{
CCLog("SgProfile::!");
returnfalse;
}

numif=ifc.ifc_len/sizeof(structifreq);

for(i=0;i<numif;i++)
{
structifreq*r=&ifr[i];
structsockaddr_in*sin=(structsockaddr_in*)&r->ifr_addr;
if(!strcmp(r->ifr_name,"lo"))
continue;//skiploopbackinterface

//getMACaddress
if(ioctl(s,SIOCGIFHWADDR,r)<0)
{
CCLog("SgProfile::GetMac333333ioctl(SIOCGIFHWADDR)error!");
continue;
}

memcpy(pBuffer,r->ifr_hwaddr.sa_data,6);
close(s);
free(ifr);

returntrue;
}

returnfalse;
}

E. mac cocos2dx 安卓环境 ndk怎么装

一、下载cocos2d-x最新安装包
在终端中cd到本地将要存放目录,执行git命令
二、如果开发ios程序,需要配置xcode模板
下好后,cd到cocos2d-x目录,执行里面的sh脚本,安装cocos2d-x模板
sudo ./install-templates-xcode.sh -f
中间要输入管理员密码
之后就可以在xcode中看到新增加模板
三、如果是开发android程序
1.搭建好一个可以开发android开发环境,包括eclipse,android sdk,ADT等(最好是最新版本),确保可运行调试
2.为eclipse安装c/c++插件
打开eclipse,选择菜单Help/Install New Software
在Work With下拉框中选择自己eclipse的版本名,然后在插件里选中Programming Languages,打开下拉列表
选择C/C++ Development Tools安装,重启eclipse
3.在developer.android.com/tools/sdk/ndk/index.html下载最新的NDK,比如android-ndk-r8d-darwin-x86.tar.bz2,注意是mac版的,并解压缩
4.配置全局环境变量
终端中执行命令
vim ~/.bash_profile
输入i进行编辑,加入如下配置
export COCOS2DX_ROOT=/Users/cocos2dx/cocos2d-x
export NDK_ROOT=/Users/android/android-ndk-r8d
export ANDROID_NDK_ROOT=/Users/android/android-ndk-r8d
export ANDROID_SDK_ROOT=/Users/android/android-sdk-macosx
export PATH=$ANDROID_NDK_ROOT:$PATH
export PATH=$ANDROID_SDK_ROOT:$PATH
按esc,再命令
:wq
保存配置,上面配置中相应的路径自己做替换
COCOS2DX_ROOT对应cocos2d-x本地存放目录
NDK_ROOT和ANDROID_NDK_ROOT对应NDK本地存放目录
ANDROID_SDK_ROOT对应安卓sdk本地目录
5.创建一个android测试项目
cd到cocos2d-x本地目录,执行命令
./create-android-project.sh
再输入包,回车
com.test.testdemo
再输入提示的sdk的id,(比如3,对应sdk4.0.3),回车
再输入应用的目录名,比如TestDemo,回车
此时cocos2d-x目录下就有了一个TestDemo目录
cd到TestDemo目录下的proj.android中,然后执行以下命令,编译项目
./build_native.sh
6.创建AVD

F. mac版androidstudio怎么配置ndk

这个网址有详细的过程:Windows32:android-ndk-r10d-windows-x86.exeWindows64:android-ndk-r10d-windows-x86_64.exeMacOSX32-bit:android-ndk-r10d-darwin-x86.binMacOSX64-bit:android-ndk-r10d-darwin-x86_64.binLinux32-bit(x86):android-ndk-r10d-linux-x86.binLinux64-bit(x86):android-ndk-r10d-linux-x86_64.bin都是可执行文件,下载后点击即可解压到当前文件夹;当然你可以使用命令行来进行跨文件夹解压的。

热点内容
笔记本电脑台式服务器 发布:2025-05-15 06:40:41 浏览:108
4k无压缩 发布:2025-05-15 06:02:54 浏览:74
hp存储6350 发布:2025-05-15 05:40:41 浏览:233
怎么更改电脑默认缓存位置 发布:2025-05-15 05:39:01 浏览:877
安卓qq公孙离在哪个战区战力最低 发布:2025-05-15 05:38:58 浏览:493
androidffmpeg压缩 发布:2025-05-15 05:37:02 浏览:288
ftp简称是 发布:2025-05-15 05:37:02 浏览:121
光遇发光耳机怎么设置安卓 发布:2025-05-15 05:32:03 浏览:113
台电安卓平板系统太低怎么办 发布:2025-05-15 05:20:00 浏览:510
安装了zlib编译报错 发布:2025-05-15 05:19:56 浏览:168