使用Android手机查看和修改Excel文件、PowerPoint文件并连接幻灯机进行演示等办公方式想必大家已经有所了解。今天介绍一下怎样使用Android进行软件开发。

Termux

使用Android进行软件开发最重要的工具是命令行终端。Termux就是其中功能最丰富、生态最好的命令行终端。

Termux可以通过F-Droid直接下载apk文件进行安装,或从Google Play Store下载。

Termux附带包管理器,能够下载常见的Linux命令行工具,如openssh, wget, curl, git, clang, ninja等。

pkg install openssh wget curl git clang ninja

Hacker's Keyboard

有了命令行,就能输入命令了,但是好像输入法没有上下左右键、没有Ctrl键,输入命令很不方便。这个时候可以安装Hacker's Keyboard输入法。这个输入法包含PC键盘上的所有按键。

如果大家使用的手机正好是和笔者的BlackBerry Key²一样拥有实体键盘,可以通过修改~/.termux/termux.properties文件,在Termux中增加缺少的符号。详细参考这里

extra-keys = [ \
['~','`','$','%','^','&','=','|','BACKSLASH'], \
['ESC','<','>', '{', '}','HOME','UP','END','PGUP'], \
['TAB','CTRL','ALT', '[', ']','LEFT','DOWN','RIGHT','PGDN']]

OpenSSH

OpenSSH是Termux中必装软件,安装之后可以启动SSH服务器,并通过SSH客户端如PuTTY远程控制手机,并能通过SCP客户端如WinSCP访问手机上的Termux内部数据和SD卡目录。还能从手机远程连接其他开启SSH服务器的设备。

安装之后,运行sshd即可。登录需要在~/.ssh/authorized_keys中和通常的Linux一样配置公钥。

Termux可以通过Termux:Widget来将一些用户自定义的命令行操作变成Android Widget放在桌面上方便点击执行。sshd应该是必备的条目。

micro

Termux中自带的文本编辑器为vi。如果你对vim和emacs不熟悉,micro是一个优良的命令行文本编辑器。安装方法如下:

pkg install micro

使用方法非常简单,手指点击即可将光标移动到指定位置,Ctrl+S保存,Ctrl+Q退出,Alt+G显示常用命令,Ctrl+G显示帮助。

需要注意的是,默认模式下是不会软换行的。另外就是输入'"([等字符会自动输入配对的符号。建议修改这些配置。修改地址为~/.config/micro/settings.json,可以修改下列对应行的内容:

"autoclose": false,
"softwrap": true,

此外,在SSH连接时micro默认无法复制粘贴,因为光标被micro占用。此时可以按住Shift键再进行复制粘贴,如在PuTTY中按住Shift键鼠标选择复制,按住Shift键鼠标右键粘贴。

nnn

nnn是Termux上的命令行文件管理器,可用于进行快速文件夹跳转。

安装方式

pkg install nnn

常见的操作包括上下箭头切换光标,左箭头进入上级文件夹,右箭头或回车进入当前光标所在文件夹或打开文件,Q退出,Ctrl+G退出并进入到当前文件夹。注意Ctrl+G的功能需要配置。需要在~/.bash_profile中加入如下函数:

n()
{
export NNN_TMPFILE=${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.lastd nnn "$@" if [ -f $NNN_TMPFILE ]; then
. $NNN_TMPFILE
rm -f $NNN_TMPFILE > /dev/null
pwd >&2
fi
}

Termux:API

Termux:API可以实现一些Android功能的自动化,但其中最重要的功能是在PC和Android设备之间进行剪贴板的同步。

安装方式:先下载apk安装之后再在Termux中运行

pkg install termux-api

通过SSH执行下面的命令可以在终端显示Android剪贴板的内容

termux-clipboard-get

通过SSH执行下面的命令可以将指定内容设置到Android剪贴板上

termux-clipboard-set <内容>

clang

clang的使用方式和正常一样。Termux不支持gcc,一般都使用clang进行编译。需要注意的是Termux中的系统libc++库不支持静态库,只支持动态库,标准C库为Bionic。虽然使用跨平台编译器和musl libc也能编译出能够在Termux上运行的程序,但是存在一些问题。Termux不支持glibc。

安装方式

pkg install clang llvm lld

Mono

mono没有包支持。但是有社区版本,如笔者编译的termux-mono以及一些在PRoot运行的Arch Linux和Ubuntu中运行的版本。以下为termux-mono最新版本,不需要PRoot即可直接运行。

Android App开发

虽然Termux中没有JDK, Android SDK和Android NDK,但是仍然可以进行Android App开发。其中JDK可以使用ecj代替,Android SDK可以使用独立的dx, aapt和apksigner代替,Android NDK可以使用clang代替。使用这些软件通过调用命令行就能生成.so文件, .dex文件和.apk文件。

安装方式

pkg install ecj dx aapt apksigner

需要注意的是,Android SDK API 28引入的d8现在还不支持,所以编译Java 8和之后版本的代码会比较困难。

Wcode

Termux内部查看和编辑代码不方便;Termux中的文件无法被外部的App所查看和编辑;SDCard模拟分区通常是FAT32格式的不支持执行权限,代码放在其中非常不方便。

于是有人想到通过在Termux中运行一个服务器,然后在外部连接服务器进行文件编辑的方法。为了实现类似于Visual Studio Code的编辑体验,他直接使用了Visual Studio Code的Monaco Editor,在Termux中通过nodejs运行一个HTTP服务器,并在浏览器中进行访问。他的代码在这里。但是效果比较差,只适合在平板上运行。

后面又有人又做了一个类似的程序,就是Wcode

安装方式

pkg install nodejs
npm install -g wcode

笔者对Wcode进行了一些修改,修正了一些bug,并使其在手机上能更好地运行。

快捷输入

很多常用命令很长,输入不变,可以通过bash alias来进行简记。

打开~/.bash_profile,即可增加alias指令。笔者的alias指令如下:

alias cg=termux-clipboard-get
alias cs=termux-clipboard-set
alias m=micro
alias i='ifconfig | grep '\''inet '\'' | sed '\''s/ *inet//g'\'' | cut -d'\'' '\'' -f2'
alias p='ping www.bing.com'
alias w=wcode

其中i为显示当前IP地址。

之后退出Termux再进入,即可通过简短命令来运行程序了。

使用Android手机进行开发的尝试的更多相关文章

  1. 搭建Android手机系统开发环境(转)

    Android作为近来表现十分强劲的手机操作系统,越来越受到开发人员的青睐,本篇文章将带领大家从零开始打造属于自己的开发环境. 一.JDK下载安装 JDK全称是Java Development Kit ...

  2. 【Android】1.0 第1章 C#之Android手机App开发

    分类:C#.Android.VS2015:创建日期:2016-01-20 目前Android在全世界市场上大约有75%的占有率,国人Android手机的持有比例更甚,甚至达到90%以上.因此搞计算机的 ...

  3. HBuilder mui 手机app开发 Android手机app开发 ios手机app开发 打开新页面 预加载页面 关闭页面

    创建子页面 在mobile app开发过程中,经常遇到卡头卡尾的页面,此时若使用局部滚动,在android手机上会出现滚动不流畅的问题: mui的解决思路是:将需要滚动的区域通过单独的webview实 ...

  4. android手机游戏开发Cocos2d-x开发分享

    我想现在应该没有人没有玩过手机游戏了吧,当然所有人都玩过,但不是所有人都知道怎么去开发手机游戏,因为许多人都感觉做开发是一件很困难的事儿,身边的朋友也对此感觉难度很大.但是,现在我可以告诉你,手机游戏 ...

  5. HBuilder mui 手机app开发 Android手机app开发 ios手机app开发

    经过一段时间的学习,做公司项目,对mui框架有了更加深入完整的了解,其实刚开始接触HBuilder中的mui框架只是简单的了解,并没有深入的研究,后来由于工作的需求,不得不深入研究,并运用的项目中去. ...

  6. 零基Android手机嵌入式开发培训课程

    亲爱的朋友,我这里有一组当然想和大家分享,假设有兴趣在这个过程中,可以加我QQ2059055336和我联系. 课程章节分布: 第一部分 嵌入式C与数据结构篇 (20讲) 第二部分ARM裸机开发篇 (4 ...

  7. opencv 手写选择题阅卷 (四)Android端 手机应用开发

    opencv 手写选择题阅卷 (四)Android 手机应用开发 在PC端把代码调通以后开始开发Android 手机应用,因为主要功能代码为C++代码,所以需要通过NDK编译,JAVA通过JNI方式调 ...

  8. C#跨平台手机应用开发工具Xamarin尝试 与Eclipse简单对比

    Xamarin 支持使用C#开发基于Android.IOS.WindowsPhone应用开发,最大特点C#+跨平台,详细说明问度娘. 安装 研究 想体验研究的点击查看页面 Xamarin For Vi ...

  9. 分享我开发的网络电话Android手机APP正式版,图文详解及下载

    分享我开发的网络电话Android手机APP正式版,图文详解及下载 分享我开发的网络电话Android手机APP正式版 实时语音通讯,可广域网实时通讯,音质清晰流畅! 安装之后的运行效果: 第一次安装 ...

随机推荐

  1. 牛客NOIP暑期七天营-提高组5

    A:deco的abs. 水题,先%,然后相邻两个数min()一下差值. #include<bits/stdc++.h> #define ll long long using namespa ...

  2. k8gege的Ladon使用笔记

    自己今天看到了这个工具,感觉挺实用的,尝试学习用法 资产扫描模块 初级用法: Ladon.exe 192.168.1.8/24 OnlinePC(扫当前机器所处C段的存活主机,其它模块同理) 总结:在 ...

  3. day005-python基础数据类型之课后作业讲解

    1.元素的分类 需求:有如下集合[11,22,33,44,55,66,77,88,99,90……],将所有大于66的值保存在字典的第一个key中,将小于66的值保存在第二个key的值中 代码实现: # ...

  4. python - 全局中间件(2.7)

    一.场景 在网站的所有页面中可能某些地方都需要相同的数据,此时可以在Django中定义全局数据并存储在session中,或使用模板语言放入页面中 注意:一定要加上 try: 进行潜在的异常捕捉,因为一 ...

  5. 洛谷 P4149 [IOI2011]Race-树分治(点分治,不容斥版)+读入挂-树上求一条路径,权值和等于 K,且边的数量最小

    P4149 [IOI2011]Race 题目描述 给一棵树,每条边有权.求一条简单路径,权值和等于 KK,且边的数量最小. 输入格式 第一行包含两个整数 n, Kn,K. 接下来 n - 1n−1 行 ...

  6. linux修改/etc/profile权限

    修改/etc/profile时提示为只读文件,不允许修改, 敲#chmod 777 /etc/profile后仍不允许修改 解决办法: 在root权限下敲 #:mount -o remount,rw ...

  7. webpack vue-cli2 配置打包测试环境

    目前vue-cli2上原配置是只有开发环境dev和线上环境prod的配置,但是我们实际场景上还有很多需要一个测试环境test,下面就是对测试环境的配置,将测试环境和线上环境的打包代码分开就不需要切来切 ...

  8. Spark2.x(六十三):(Spark2.4)Driver如何把Task(闭包等)分配给Executor

    在Spark中一个appliation可能包含多个job,每个job都是由SparkContext#runJob(...)触发的,一个Job下包含1个或多个Stage,Job的最后一个stage为Re ...

  9. IDEA 如何导出 todo 列表

    众所周知,IDEA 可以直接查看所有的 todo 列表, 快捷键是 Alt + 6 然后右键文件夹,选择[Expand All],展开所有目录 再然后,先选中最上边的文件,单击, 再选中最后一个文件, ...

  10. Systemd笔记

    Systemd管理的启动脚本位于 /usr/lib/systemd/system/ 下 Systemd启动顺序约定为: 当前服务满足启动条件, 则立即创建进程进行并行启动, 启动条件指服务的依赖关系( ...