打算将一个大型的c++项目移植到安卓,考虑使用ndk生成.so文件,再在AndroidStudio里面调用

WWWsWWWs 2018-02-26 03:40:34
需要将开源入侵检测(C++)项目snort移植到Android中,在linux环境下搭建了ndk,已经能用ndk-build将简单.c文件生成,so,但snort项目里面包含太多的.cc,.h,.text,.cmake等文件,能用ndk直接一次性编译整个snort文件夹让他生成一个snort.so文件吗,如果不能的话需要将包里面每个.cc文件都编译一遍,然后再打包起来?想的我头发都掉光了,在网上还看到了用arm -gcc编译的,如果不用ndk的话,用arm gcc能行得通吗 急切希望大神来解答
...全文
1242 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohuh421 2018-03-01
  • 打赏
  • 举报
回复
编译过, 是指没有语法错误. 也可以说是生成so吧. daq包肯定也需要在android系统中安装的.
WWWsWWWs 2018-03-01
  • 打赏
  • 举报
回复
引用 10 楼 xiaohuh421 的回复:
这种移植本身就是需要花大量时间与精力的. 如果你原来的c++项目就是在liunx环境下的, 还好一点. 如果不是, 那么要做的工作更多. 还有就算是liunx环境, 不同系统版本, 也可能有很大不同. android更是奇葩, 各种定制,阉割rom. 所以要移植到android中. 可以把整个项目的cpp放到AS中的cpp文件夹下, 然后在MakeList中添加一下路径等配置. 然后看能否编过. 能编译过, 再考虑接口问题. 接口肯定是重写了, 如果对外的接口非常多, 比如说有几千个, 那么你悲剧了. 不能一步登天.
请问 能否编过在这里是什么意思呢 是指生成了.so文件?还是其他什么?刚接触这方面不太了解,还有庆幸的是要移植的c++项目就是在linux下的,但是项目的运行还需要再linux环境下搭建环境,比如安装daq等几个必要的包,那这几个包要如何处理呢?直接不用管他?还是也要放进AS里面进行编译?麻烦您了
xiaohuh421 2018-02-28
  • 打赏
  • 举报
回复
这种移植本身就是需要花大量时间与精力的. 如果你原来的c++项目就是在liunx环境下的, 还好一点. 如果不是, 那么要做的工作更多. 还有就算是liunx环境, 不同系统版本, 也可能有很大不同. android更是奇葩, 各种定制,阉割rom. 所以要移植到android中. 可以把整个项目的cpp放到AS中的cpp文件夹下, 然后在MakeList中添加一下路径等配置. 然后看能否编过. 能编译过, 再考虑接口问题. 接口肯定是重写了, 如果对外的接口非常多, 比如说有几千个, 那么你悲剧了. 不能一步登天.
WWWsWWWs 2018-02-27
  • 打赏
  • 举报
回复
引用 8 楼 cxz003 的回复:
[quote=引用 6 楼 WWWsWWWs 的回复:] [quote=引用 5 楼 cxz003 的回复:] 不过CMakeLists.txt里面貌似是要把文件列一下的。。 没搞过这么复杂的。。
直接在AS里面用jni调用的话 好像还要改C++代码的方法名吧,比如把showhello改成java_com_233_helloword_showhello等等这样一改就又要改好多地方。。因为不是太懂C++的知识,所以就害怕要改snort的代码。。就想能不能用.so库来解决。。[/quote]这样修改是为了给Java代码调用的 C++内部代码不用变[/quote] snort程序的运行还需要daq等其他六个包的支持,我在想能否直接用arm-linux-gcc编译成可执行程序,然后把所有的包都push到Android中去,直接在手机中运行(我是不是有点异想天开了
  • 打赏
  • 举报
回复
引用 6 楼 WWWsWWWs 的回复:
[quote=引用 5 楼 cxz003 的回复:] 不过CMakeLists.txt里面貌似是要把文件列一下的。。 没搞过这么复杂的。。
直接在AS里面用jni调用的话 好像还要改C++代码的方法名吧,比如把showhello改成java_com_233_helloword_showhello等等这样一改就又要改好多地方。。因为不是太懂C++的知识,所以就害怕要改snort的代码。。就想能不能用.so库来解决。。[/quote]这样修改是为了给Java代码调用的 C++内部代码不用变
rightorwrong 2018-02-26
  • 打赏
  • 举报
回复
看能对接口进行封装吗,使用jni方式
WWWsWWWs 2018-02-26
  • 打赏
  • 举报
回复
引用 5 楼 cxz003 的回复:
不过CMakeLists.txt里面貌似是要把文件列一下的。。 没搞过这么复杂的。。
直接在AS里面用jni调用的话 好像还要改C++代码的方法名吧,比如把showhello改成java_com_233_helloword_showhello等等这样一改就又要改好多地方。。因为不是太懂C++的知识,所以就害怕要改snort的代码。。就想能不能用.so库来解决。。
  • 打赏
  • 举报
回复
不过CMakeLists.txt里面貌似是要把文件列一下的。。 没搞过这么复杂的。。
  • 打赏
  • 举报
回复
引用 3 楼 WWWsWWWs 的回复:
[quote=引用 1 楼 cxz003 的回复:] 现在AS集成了C++的编译环境 你试试创建一个带C++的项目 然后把C++代码放里面试试 以上是基于本人少量混合编程的经验下发表的猜想型建议 仅供参考
snort包里有几百个包几万行代码。。一个一个往里放工作量是不是太大了·· [/quote] 会生成一个cpp文件夹 copy里面就行了
WWWsWWWs 2018-02-26
  • 打赏
  • 举报
回复
引用 1 楼 cxz003 的回复:
现在AS集成了C++的编译环境 你试试创建一个带C++的项目 然后把C++代码放里面试试 以上是基于本人少量混合编程的经验下发表的猜想型建议 仅供参考
snort包里有几百个包几万行代码。。一个一个往里放工作量是不是太大了··
WWWsWWWs 2018-02-26
  • 打赏
  • 举报
回复
snort包里有几百个包几万行代码。。一个一个往里放工作量是不是太大了··
  • 打赏
  • 举报
回复
现在AS集成了C++的编译环境 你试试创建一个带C++的项目 然后把C++代码放里面试试 以上是基于本人少量混合编程的经验下发表的猜想型建议 仅供参考

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧