我们开发了一个iPad应用程序,其中核心逻辑是用CPP代码编写的,因此我们可以将相同的代码文件/库用于其他平台。
现在我想使用这些文件并开发类似的Android应用程序,但无法创建.so文件并在Android.mk文件和所有文件中集成路径。我基本上是iOS开发人员,这是我第一次关注Android NDK。
如果有任何直接的步骤,任何人都可以提供帮助和指导。
我已经浏览过Android开发者网站和其他一些教程网站。但这些都不适合我。
要求在java中调用cpp方法的步骤简单明了,如果我已经有几个cpp文件和.a库了。
答案 0 :(得分:1)
在你坚持的步骤中,你并不是非常具体。
以下是关于如何从java(android)调用本机代码的快速解释:
首先创建一个由本机导出并由java调用的方法(这使用JNI,所以google JNI,JNIEXPORT)
一旦在本机代码中定义了此方法,就可以使用NDK中的编译器创建共享库(.so)文件了(因为您正在为android编译) 。您需要编译设备的正确架构(armeabiv7s是现在最常见的日子)。
您需要在app.apk中的armeabi文件夹中添加库文件(NDK教程中的更多详细信息)。
在java代码中,您需要通过System.loadLibrary(LIBRARY_NAME)加载共享库;
在您的java代码中,您需要定义与您从CPP代码导出的方法配对的静态本机方法
快速提示:
使用C函数,而不是CPP,因为CPP将在生成的共享库中被破坏。换句话说,您需要创建一个可以调用cpp代码的C包装器。
查看NDK的hello world教程,并从那里开始工作。这是指向此类教程http://trivedihardik.wordpress.com/2011/06/16/hello-world-example-using-ndk-in-android/
稍后您会遇到使用makefile的编译问题,但到那时您可能会对您的问题更加具体。
答案 1 :(得分:0)
最简单的方法是使用hello-jni Android Studio示例项目。
有很多设置和配置,您可以从作为工作单位的示例中获得这些设置和配置,从工作开始时总是最容易的。
首先运行(并修改)hello-jni,并了解Java和C部分之间的交互作用。除了环境ANSI C / C ++之外,其他所有东西都可以使用。您必须从Java获取语言,国家等信息,然后将其传输到C代码。您在美国用英语,在JNI中用“英寸和加仑”表示。
然后转到您使用android studio创建的项目,然后从hello-jni对其进行逐位复制和修改。当您拥有自己的品牌hello-JNI时,可以一点一点添加自己的代码。通常,使用C-dummies来测试与Java部件的交互性会更容易,然后将其更改为您自己的真实C / C ++代码。
阅读Android / Android Studio文档并学习和理解。使用Android模拟器要容易得多,而且效果很好。
到目前为止,项目配置是最难处理的。如果我今天要创建一个新项目,我将再次从Hello-JNI开始。