V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
716438031
V2EX  ›  Linux

如果要把一个在 Linux 下的软件移植到 Android,需要怎么做呢?

  •  
  •   716438031 · 2017-03-28 03:41:51 +08:00 · 4971 次点击
    这是一个创建于 2796 天前的主题,其中的信息可能已经有所发展或是发生改变。
    第 1 条附言  ·  2017-05-13 10:42:57 +08:00
    账号已注销,该主题关闭.
    30 条回复    2017-03-29 22:31:31 +08:00
    GoBeyond
        1
    GoBeyond  
       2017-03-28 06:14:57 +08:00 via Android
    标题有点空洞吧,说详细点
    googlebot
        2
    googlebot  
       2017-03-28 06:26:47 +08:00 via Android
    算法移植容易,在加个 android 皮,
    linbiaye
        3
    linbiaye  
       2017-03-28 07:50:16 +08:00
    看什么语言的, c/c++的如果安卓支持各种 api/abi ,写 mk 就可以。
    linux40
        4
    linux40  
       2017-03-28 08:07:34 +08:00 via Android
    库要完整。。。
    shoaly
        5
    shoaly  
       2017-03-28 08:39:31 +08:00
    不知道 tmux 是否开源
    shoaly
        6
    shoaly  
       2017-03-28 08:40:11 +08:00
    上面说错了, 该死..应该是 https://github.com/termux 这货
    nicevar
        7
    nicevar  
       2017-03-28 08:53:29 +08:00 via iPhone
    配置好 Android 的 ndk 环境, Application.mkAndroid.mk 写好, lib 也准备好然后开始一步步解决问题就行了
    nicevar
        8
    nicevar  
       2017-03-28 08:54:45 +08:00 via iPhone
    界面交互的话需要写 jni 提供接口给 Java 层钓鱼
    zhchyu999
        9
    zhchyu999  
       2017-03-28 08:58:29 +08:00
    拿源码用 ndk 中的编译器,交叉编译。
    716438031
        10
    716438031  
    OP
       2017-03-28 12:55:52 +08:00
    @GoBeyond 假如我要把 Linux 下的一个程序 screenfetch 移植到 Android 运行,需要怎么做呢......
    716438031
        11
    716438031  
    OP
       2017-03-28 12:57:03 +08:00
    @shoaly 这个的确挺厉害的,然而这个程序只能运行在 Android 5.0 或以上的手机.......
    716438031
        12
    716438031  
    OP
       2017-03-28 12:59:56 +08:00
    @linux40 库...是指 *.so 文件吗?如何知道一个软件所依赖的库呢......
    debye
        13
    debye  
       2017-03-28 13:09:19 +08:00
    linux 大多是服务性质的软件吧, android 大都面向最终用户的, UI 很重要,大部分都没有移植的意义。
    hitmanx
        14
    hitmanx  
       2017-03-28 13:43:57 +08:00
    去年干过类似的事,把一个 C++底层的库和一堆依赖 library 、 test 程序移植到了 Android 上。我不是专门搞 Android 的,所以纯粹是站在一个 Linux C++ developer 上的一些经验,不知道对你有没有帮助。

    如果是 C\C++的程序,基本流程可能是这样的,先把它编成 Android 上的 native 程序(这一步没有什么 Android 特有的东西在里面,就和移植到任何平台一样),具体来说,找到对应的交叉编译器(NDK),选择你习惯的 make 工具,编译你的代码。然后就可以尝试通过 ADB 把编完的程序上传到 android 上跑,上传、运行等都可以通过 adb (有大把的教程) 。等以上 native 跑通了,再去搞 APK ,用 JNI 去封装一个 java 层,一种方法是把你的程序编成一个 shared library ,然后在 wrapper 层里去 dlopen 你的 library , dlsym 其中的 main ,然后执行等等,这一步有很多 tricky 的地方,比如 linux 下的环境变量在 Android 上怎么处理,或者窗口的 handle 怎么传递等等。
    RqPS6rhmP3Nyn3Tm
        15
    RqPS6rhmP3Nyn3Tm  
       2017-03-28 13:49:21 +08:00 via iPhone
    移植 screenfetch 有啥意义……
    lrz0lrz
        16
    lrz0lrz  
       2017-03-28 16:49:33 +08:00
    但是 termux 有 screenfetch 啊?
    ProjectSky
        18
    ProjectSky  
       2017-03-28 19:26:50 +08:00   ❤️ 1
    termux 有包构建工具,但是文档缺失严重。
    https://github.com/termux/termux-packages/blob/master/README.md
    ywgx
        19
    ywgx  
       2017-03-28 19:29:54 +08:00 via iPhone
    mv 命令可以的
    716438031
        20
    716438031  
    OP
       2017-03-28 21:37:03 +08:00
    @debye 在 Linux 有很多有意思的工具而 Android 没有,所以想尝试移植.....
    716438031
        21
    716438031  
    OP
       2017-03-28 21:38:48 +08:00
    @hitmanx 谢谢~突然发现有很多关键的知识点我还不了解呀.....我还是得先搞懂这些再说.....
    716438031
        22
    716438031  
    OP
       2017-03-28 21:39:17 +08:00
    @BXIA 只是随意举个例子而已....不要在意~
    loading
        23
    loading  
       2017-03-28 21:39:47 +08:00 via Android
    软件最难的是创新,而你这种移植。

    建议直接写一个,应该更快一些。
    716438031
        24
    716438031  
    OP
       2017-03-28 21:40:28 +08:00
    @lrz0lrz 在 Android4.4 用不了 termux......不知道里面的工具能否拿出来直接用呢.......
    716438031
        25
    716438031  
    OP
       2017-03-28 21:42:49 +08:00
    @ProjectSky 感谢分享.....(虽然不确定我能否读懂 2333)
    716438031
        26
    716438031  
    OP
       2017-03-28 21:43:16 +08:00
    @ywgx mv 命令....在 Android 也有啊
    716438031
        27
    716438031  
    OP
       2017-03-28 21:44:01 +08:00
    @loading 自己的技术还没有达到可以创新的程度.....
    flynaj
        28
    flynaj  
       2017-03-28 21:45:12 +08:00 via Android
    看原来是什么软件写的,如果是 golang,就简单了, https://github.com/xtaci/kcptun/releases
    lrz0lrz
        29
    lrz0lrz  
       2017-03-28 21:46:17 +08:00
    @716438031 #24 大多不可以
    716438031
        30
    716438031  
    OP
       2017-03-29 22:31:31 +08:00
    @flynaj
    @lrz0lrz
    谢谢回答,看起来太麻烦了,我还是换个实现方式吧~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5632 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 06:33 · PVG 14:33 · LAX 22:33 · JFK 01:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.