如何运行NDK样本?

Qwe*_*tie 3 android-ndk

很抱歉问这样一个noob问题,但NDK文档是错误的(r7b):

如果您使用ADT在Eclipse中进行开发,请使用"新建项目向导"为每个示例创建一个新的Android项目,使用"从现有源导入"选项并从中导入源 <ndk>/apps/<app_name>/project/.然后,根据需要设置AVD,并在模拟器中构建/运行应用程序.

没有"apps"文件夹,示例中不包含"project"文件夹.那么......运行样本的正确方法是什么?

另外,我可以配置Eclipse自动构建代码的C++部分吗?

Qwe*_*tie 5

  1. 单击文件| 新的| 项目...
  2. 选择Android项目,下一步
  3. 项目名称:这是包资源管理器中显示的项目名称.它只是存储在.projectEclipse创建的文件中的字符串.没有使用此名称创建文件或文件夹,并且输出二进制文件似乎不包含此名称.
  4. 单击"从现有源创建项目"
  5. 位置:选择项目的根文件夹,例如.../android-ndk-r7b/samples/bitmap-plasma
  6. 单击"下一步",然后选择目标API.Eclipse似乎不允许稍后更改,至少不能从GUI更改.我不知道为什么Eclipse不是简单地从<uses-sdk>AndroidManifest.xml或default.properties中的"target"行获取此信息.我也不知道为什么两者可能不同(例如在位图等离子体样本中,target=android-9但是<uses-sdk android:minSdkVersion="8"/>.)
  7. 单击下一步并考虑更改"包名称"字段,默认为"your.package.namespace".但是,如果您不更改此字段,项目将正常运行.不选中"创建活动"和"创建测试项目".
  8. 单击完成.Eclipse将在现有代码旁边创建大量额外文件(例如.classpath,.project,project.properties)和文件夹(bin,gen,assets).这是除了由ndk-build(obj和libs)创建的输出文件夹之外.

Eclipse不会自己构建本机代码,但如果知道它,它将自动部署本机代码(例如libplasma.so).在命令行上构建本机代码后,例如:

C:\...\android-ndk-r7b\samples\bitmap-plasma>..\..\ndk-build
Gdbserver      : [arm-linux-androideabi-4.4.3] libs/armeabi/gdbserver
Gdbsetup       : libs/armeabi/gdb.setup
Gdbserver      : [arm-linux-androideabi-4.4.3] libs/armeabi-v7a/gdbserver
Gdbsetup       : libs/armeabi-v7a/gdb.setup
"Compile thumb : plasma <= plasma.c
SharedLibrary  : libplasma.so
Install        : libplasma.so => libs/armeabi/libplasma.so
"Compile thumb : plasma <= plasma.c
SharedLibrary  : libplasma.so
Install        : libplasma.so => libs/armeabi-v7a/libplasma.so
Run Code Online (Sandbox Code Playgroud)

右键单击您的项目并选择"刷新",否则Eclipse可能无法在启动模拟器时上载本机代码.

最后,要运行该示例,请右键单击该项目,然后选择Run As | Android应用程序.请参阅此处有关选择使用哪个仿真器的信息.

请参阅此处有关配置Eclipse以自动构建本机代码的信息.

我很好奇为什么NDK为每个ABI生成两个大小不同的*.so文件,例如它创建libs/armeabi-v7a/libplasma.so(15 KB)但也创建obj/local/armeabi-v7a/libplasma.so(63 KB).有人知道区别吗?