Board logo

标题: [原创教程] ej.sh脚本 -- 在手机上运行java第三方 [打印本页]

作者: happy886rr    时间: 2017-8-6 22:57     标题: ej.sh脚本 -- 在手机上运行java第三方

本帖最后由 happy886rr 于 2017-8-6 23:06 编辑

对于java程序是不能在安卓系统下直接运行的。我们需要用dx工具将java字节码转化为安卓虚拟机字节码(命令如下):
  1. @echo off
  2. pushd "%~dp0wkpath"
  3. echo ----------------Jar2dex Script----------------
  4. ::: 2>nul java -version || echo Needs Java && pause && exit
  5. if /i "%~x1"==".jar" (
  6. 2>nul del /f /q ".\classes.dex"
  7. echo 正在生成DEX文件...
  8. java -jar dx.jar --dex --output=classes.dex "%~f1"
  9. if exist ".\classes.dex" (
  10. echo 正在添加dex文件到 "%~f1"
  11. aapt add "%~f1" classes.dex
  12. )
  13. ) else (
  14. echo 非jar包、或无输入文件.
  15. )
  16. if exist ".\classes.dex" (
  17. 2>nul del /f /q ".\classes.dex"
  18. )
  19. echo 执行完毕.
  20. echo ----------------------------------------------
  21. pause
复制代码
此时生成的jar包就具全平台运行性。但手机的模拟终端输入不便,因此 ej脚本 意在解决手机运行jar的繁琐输入。脚本内容如下:
  1. #!/system/bin/sh
  2. # ej script by happy
  3. # Set the operating system type
  4. USE_ANDROID="true"
  5. if [ $# -ne 2 ]
  6. then
  7. echo "Usage: ej.sh [class path] [class name]"
  8. exit 1
  9. else
  10. echo [===* Welcome to use ejar script *===]
  11. export CLASSPATH="${1}"
  12. jarname=${1##*/}
  13. jarname=${jarname%.*}
  14. if [ "$jarname" == "" ]
  15. then
  16. echo "You must input a jar file!"
  17. exit 1
  18. fi
  19. if [ "$USE_ANDROID" == "true" ]
  20. then
  21. 2>/dev/null app_process "${1}" ${2}
  22. if [ $? -ne 0 ]
  23. then
  24. echo "May be your input is wrong, or chmod the file's permissions."
  25. exit 1
  26. fi
  27. else
  28. 2>/dev/null java -version
  29. if [ $? -ne 0 ]
  30. then
  31. echo You needs java!.
  32. exit 1
  33. fi
  34. fi
  35. while [ true ]
  36. do
  37. echo -n "[>>> ${jarname} "
  38. read args
  39. if [ "$args" == "--quit" ] || [ "$args" == "--exit" ]
  40. then
  41. break;
  42. fi
  43. if [ "$USE_ANDROID" == "true" ]
  44. then
  45. app_process "${1%/*}" ${2} ${args}
  46. else
  47. java -classpath "${1}" ${2} ${args}
  48. fi
  49. done
  50. echo -e "[<<<]"
  51. fi
复制代码
将脚本存为ej.sh,用adb命令将其推送到手机临时目录 /data/local/tmp,并设置权限为0755,命令如下:
  1. adb kill-server
  2. adb wait-for-device
  3. adb push .\ej.sh /data/local/tmp
  4. chmod 0755 ./ej.sh
复制代码
首次运行,只需输入如下命令(./ej.sh [jar包的路径]  [要执行的类]):
  1. ./ej.sh jcalc.jar com.android.jcalc.Main
复制代码
运行图如下(图片均为外部链接):

之后每次运行,直接输入传递参数即可。演示如下:
[>>> jcalc sin3*cbrt(e)
sin3*cbrt(e)
OriginalExp: sin3*cbrt(e)
Revpolish:   3 sin e cbrt *
Result:      0.196948836677

[>>> jcalc 5*(arctan(cos(sin(ln(lg(2.71828))))))
5*(arctan(cos(sin(ln(lg(2.71828))))))
OriginalExp: 5*(arctan(cos(sin(ln(lg(2.71828))))))
Revpolish:   5 2.71828 lg ln sin cos arctan *
Result:      3.178987410777

[>>> jcalc --quit
--quit
[<<<]
备注:(linux下亦可兼容)请使用 --quit 或 --exit 退出 ej.sh脚本 .




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2