在本文中,介绍了0.7X版Aid Learning的安装、使用和测试。
myastrotong:把安卓手机性能发挥到极致之-Aid Learningzhuanlan.zhihu.com当前(2020年1月)Aid Learning版本号发展到了0.80,新增了很多功能,比如ssh、电脑直接登录桌面、Jupyter、Xterm等等。这一版本带来的惊喜真是不少!强烈推荐更新!
Aid Learning --build a Linux running on the Android with GUI, AI and Pythonwww.aidlearning.net官方一直把Aid Learning定位为一款AI编程平台。我眼里却把它当做星辰大海!
我一般爱用Java和C++来编程,目前也在学习Python。
所以本文基于Aid Learning来做我熟悉的事情:基于Jupyter编写Java和Python。
C++编程主要还是依靠Vim来实现吧,Vim做这个已经足够好了。网上有无数的教程,后期有空了我再趟趟道吧。当前我主要基于Jupyter来实现Java和Python编程。
写在前面:利用Jupyter进行Java开发时需要的包管理方法见本文。myastrotong:Aid learning/Termux之Jupyter的Java编程高级篇——包管理zhuanlan.zhihu.com
Jupyter简介
Jupyter官方当前推荐使用Jupyter Lab
如果在电脑端,我的确也推荐这个,如果在手机端,你非要用,也不是不行,那你就把手机打横了用吧。
安装方法如下:
pip3 install jupyterlab
使用方法为,在terminal输入:
jupyter lab
如下是正常竖着用Jupyter Lab的效果,手机屏幕太小了,右边关键部位啥都看不到了。
如下是手机横着用Jupyter Lab的效果,右边关键部位能够看到了。但是屏幕还是太小了,只能是凑活用吧!
下面是使用Jupyter Notebook的效果:
对比发现,在手机上使用notebook还是比lab效果要好一些!个人观点,大家可以自行选择。
Jupyter之Python开发
在Jupyter中使用Python非常简单:
点击Jupyter,选择New->Python3
然后在In[]对应的cell中输入如下代码:
%matplotlib inline
import matplotlib.pyplot as plt # 导入绘图包
labels = 'frog', 'hogs', 'dogs', 'logs' # 设定数据标签
sizes = 15, 20, 45, 10 # 设定数据
colors = 'yellowgreen', 'gold', 'lightskyblue', 'lightcoral' # 设定颜色
explode = 0, 0.1, 0, 0
plt.pie(sizes, explode=explode, labels=labels, colors=colors, autopct='%1.1f%%', shadow=True, startangle=50)
plt.axis('equal')
plt.show()
效果如下:
Jupyter中使用Java
首先是安装JDK。很遗憾,当前Aid Learning内核支持的JDK是JDK8,而Jupyter支持的JDK版本是9.0及以上。因此你是无法使用这一款的。我找到官方大牛,给了我JDK9和JDK10。试验发现都能正确安装。
基于官方提供的tar压缩文件进行安装(以jdk9为例,jdk10方法一样):
tar –xvf OpenJDK9_aarch64_Linux_201809071400.tar –C /usr/local
用vim修改如下文件
vim ~/.bashrc
在文件最后添加如下三行话(这里是jdk9,jdk10的方法与之类似)
export JAVA_HOME=/usr/local/jdk-9+181
export CLASSPATH=.:$JAVA_HOME/lib
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin
然后输入如下一行话,使得命令生效
source ~/.bashrc
上官网下载Jupyter的Java支持套件IJava,当前的最新版本是1.3.0
https://github.com/SpencerPark/IJava/
下载完ijava-1.3.0.zip,拷贝到手机里任意文件夹
在Aid的terminal内进入到该文件夹,然后:
unzip ijava.zip -d ijava
cd ijava
python3 install.py --sys-prefix
安装完毕后,查看jupyter内核
jupyter kernelspec list
可以看到jupyter目前支持python3和java了!
如果不想支持Java了,就输入如下指令删除
jupyter kernelspec remove java
以下选择运行Jupyter来调用JAVA,坑来了!
直接点击桌面的Jupyter图标,
选择New->Java,你会发现有个错误:Kernel error,点开以后你会发现报如下错误:
查看官网,有如下一段话:
i. Next ensure that java is in a location where the jdk was installed and not just the jre. Use the java --list-modules command to do this. The list should contain jdk.jshell.
o On *nix java --list-modules | grep "jdk.jshell"
o On windows java --list-modules | findstr "jdk.jshell"
Both should output jdk.jshell@ followed by your java version.
If the kernel cannot start with an error along the lines of
Exception in thread "main" java.lang.NoClassDefFoundError: jdk/jshell/JShellException
...
Caused by: java.lang.ClassNotFoundException: jdk.jshell.JShellException
...
then double check that java is referring to the command for the jdk and not the jre.
鬼知道是啥意思,哈哈!反正看完这段话我还是修不好这个bug。
不管他了,天下路多的是,这一条不通,就换一条呗!
方法就是,自己在后台开启Jupyter:
打开Aid的terminal,输入:
jupyter notebook
等待jupyter开启,然后在手机或者同一局域网下的电脑下的浏览器中输入:
192.168.x.x:8888或者192.168.x.x:8889
以上网址由ifconfig指令查看,也就是在terminal中输入:
ifconfig
比如我的手机是192.168.3.28
端口号根据jupyter开启后输入的提示来执行,一般是8888,如果被占用了就是8889。
在同一局域网下,输入
http://192.168.3.28:8889/
如果是手机端,还可以输入
http://localhost:8889/
成功开启的界面为:
注意:我的界面中间有Nbextensions。这个是Jupyter一个很重要的扩展插件,安装方法:
apt install libxml2
apt install libxslt1-dev
pip3 install jupyter-contrib-nbextensions
前两个不安上,扩展包是安不了的!如果你安装报错,说找不到这两个库或者安装不上,那么可能是libxml和libxslt在系统上的名字跟这个不一致,你可以输入:
apt search libxml
apt search libxslt
根据查询出来的系统对应的库名称来安装。
以上三个指令安装完毕后。
安装 javascript and css files:
jupyter contrib nbextension install --user
安装configurator:
pip3 install jupyter_nbextensions_configurator
扩展插件就安装完毕了!
然后如下所示,把一些你需要的选项选择上,比如运行时间(Execute Time)、Python提示(Hinterland)等等。
点击New,选择Java,然后在新出现的界面中,在In[]输入如下内容,点击运行,效果如下:
点击如图红圈部分,可以修改文件名,这里我改成了LearnJava。
这个例子很重要,示例了从maven中取得某个版本号的包并使用的方法。这里我使用Maven的xchart包,并画图!类似Python的Matplotlib画图,很给力的例子!
源码如下:
%maven org.knowm.xchart:xchart:3.5.2
import org.knowm.xchart.*;
int n=100;
double[]xData=new double[n];
double[]yData=new double[n];
for(int i=0;i<n;i++){
xData[i]=i*0.1;
yData[i]=Math.sin(xData[i]);
}
XYChart chart=QuickChart.getChart("Sample Chart","X","Y","y(x)",xData,yData);
BitmapEncoder.getBufferedImage(chart);
Jupyter真是一个方便的编写、学习Python、Java的利器!所见即所得!甚至是快速出图,配合手机,方便大家快速的学习编程!