当前位置: 首页 > news >正文

Android 命令行如何运行 JAR 文件


最近有位老哥问了一个问题,说如果将java的jar文件在Android中执行?这个其实很简单的一个问题,直接写个App放里面不就可以了么?但是人家说没有App,直接使用命令行去运行。说明这个需求的时候,把我给整懵了,没有很好的思路去想这个问题,所幸查了查资料,发现其实可以在Android中使用命令行来执行jar包命令的。

​ 首先,我们整理一下所需要用到的知识:

  • android虚拟机无论是dalvik还是art,都是无法直接运行java的jar文件的,需要有一个中间产物dex,这里就不多说了;
  • dex如何手动生成,需要用到dx/d8工具;
  • java的常用的编译命令,比如 javac / java cp
  • 常用的adb/linux命令,比如adb shell / adb push/ rm -rf 等等命令。

1. java项目

首先我们来看一下我们的java helloworld项目,是一个纯的java项目:

当我们写好了我们的HelloWorld之后,可以手动通过命令行将java文件编译成class文件,命令行如下:

javac -source 1.8 -target 1.8 -d bin -cp lib/commons-cli-1.5.0.jar src/com/xing/HelloWorld.java

这里多说一句,

  • -source 1.8 -target 1.8 指定编译的源代码和生成的目标class文件的Java版本都为1.8
  • -d 是生成class文件的目录;
  • -cp 后面跟的 lib/commons-cli-1.5.0.jar 是我的HelloWorld.java 所依赖的jar包

所以这里编译时需要把它带上。

如果你需要使用 java 11版本,那么编译命令为:

javac -source 11 -target 11 -d bin -cp lib/commons-cli-1.5.0.jar src/com/xing/HelloWorld.java

2. 编译成dex文件

当生成好 class文件之后,我们需要将 class文件编译成 dex文件,有两种方式:dex和d8。d8是相较于dex更新效果更好的编译方式,都是可以在android编译工具文件夹 build-tools下面找到。下面两种方式写法都注明一下:

1. dx方式:

./Android/sdk/build-tools/28.0.2/dx --output=helloworld.jar --dex ./bin lib/commons-cli-1.5.0.jar
  • --output=helloworld.jar: 指定输出的dex文件的名称为helloworld.jar
  • --dex: 指定执行dex转换操作
  • ./bin: 要转换的Java类文件所在目录(刚刚生成的)
  • lib/commons-cli-1.5.0.jar: 额外的jar库文件,包含可能需要的额外类

2. d8方式:

./Android/sdk/build-tools/33.0.1/d8 --release lib/commons-cli-1.5.0.jar bin/Helloworld.class  --output helloworld.jar
  • --release:启用release模式优化转换
  • lib/commons-cli-1.5.0.jar:额外的jar库文件
  • bin/Helloworld.class:要转换的Java类文件
  • --output helloworld.jar:输出的dex文件

3. 上传文件

由于需要在Android环境中操作,所以我们先写一个 helloworld.sh 执行命令,该命令的好处是不用一直敲很多命令,直接执行这个.sh文件即可。文件中定义了jar运行的环境,然后最重要一个命令即 “exec app_process” 在Andorid环境中执行jar命令。

base=/data/local/tmp/helloworld
export CLASSPATH=$base/helloworld.jar
export ANDROID_DATA=$base
mkdir -p $base/dalvik-cacheexec app_process $base com.xing.HelloWorld "$@"

其它命令这里就不说了,主要聊一下 app_process的用法:

  • app_process:用于启动一个Android应用进程的执行文件,位于/system/bin目录下
  • $base:Jar包的路径,需要替换为实际的Jar包文件名
  • HelloWorld:这个是Jar包内的主类,也需要修改为实际的主类名
  • "$@":表示传递给Java程序的参数,$@会扩展成所有参数形式传递进去

那么定义完成 helloworld.sh文件只,主体文件目录就应该如下了:

|-bin
|  |____com/xing/HelloWorld.class
|
|-lib
|  |____commons-cli-1.5.0.jar
|
|-src
|  |____com/xing/HelloWorld.java
|
|-helloworld.jar
|-helloworld.sh 

那么我们就需要将目标文件上传到android中了,基本命令如下:

  1. 创建临时文件夹helloworld

    adb shell mkdir -p /data/local/tmp/helloworld
    
  2. 将helloworld.jar push到临时helloworld文件夹中:

    adb push helloworld.jar /data/local/tmp/helloworld
    
  3. 将helloworld.sh push到临时helloworld文件夹中:

    adb push helloworld.sh /data/local/tmp/helloworld
    
  4. 给helloworld.sh提权,使得其有可执行权限

    adb shell chmod 777 /data/local/tmp/helloworld/helloworld.sh
    
  5. 直接执行代码:

    adb shell /data/local/tmp/helloworld/helloworld.sh -p
    

这里的 -p 是我自定义添加的,如果一切运行正常,那么就应该可以看到运行的结果了:

当然,如果你有什么疑问的话,可以与我一起探讨,可以加我v:javainstalling,备注[Jar]即可。

相关文章:

Android 命令行如何运行 JAR 文件

​ 最近有位老哥问了一个问题,说如果将java的jar文件在Android中执行?这个其实很简单的一个问题,直接写个App放里面不就可以了么?但是人家说没有App,直接使用命令行去运行。说明这个需求的时候,把我给整懵了…...

5.4 webrtc的线程

那今天呢?我们来了解一下webrtc中的threed,首先我们看一下threed的类,它里边儿都含了哪些内容?由于threed的类非常大啊,我们将它分成两部分。 那第一部分呢,是我们看threed的类中都包含了哪些数据之后呢&a…...

vscode | linux | c++ intelliense 被弃用解决方案

每日一句,vscode用的爽是爽,主要是可配置太强了。如果也很会研究,可以直接去咸鱼接单了 废话少说,直接整。 用着用着说是c intelliense被弃用,很多辅助功能无法使用,像查看定义、查看引用、函数跳转、智能提…...

HPE服务器常见报错信息以及解决方案

General controller issues 常规控制器问题 Controllers are no longer redundant 控制器不再冗余 HPE Dynamic Smart Array B140i drives are not found when RAID mode is disabled 禁用 RAID 模式时找不到 HPE 动态智能阵列 B140i 驱动器 Data located on drives accessed i…...

尚硅谷宋红康MySQL笔记 3-9

我不会记录的特别详细 大体框架 基本的Select语句运算符排序与分页多表查询单行函数聚合函数子查询 第三章 基本的SELECT语句 SQL分类 这个分类有很多种,大致了解下即可 DDL(Data Definition Languages、数据定义语言),定义了…...

Leetcode.2337 移动片段得到字符串

题目链接 Leetcode.2337 移动片段得到字符串 rating : 1693 题目描述 给你两个字符串 start 和 target ,长度均为 n n n 。每个字符串 仅 由字符 L、R 和 _ 组成,其中: 字符 L 和 R 表示片段,其中片段 L 只有在其左侧直接存在一…...

【vue】更改角色权限后,实现页面不刷新更改其可展示的导航菜单

登入的角色本身属于领导级别(集团权限),没有下级的不同权限: 切换不同身份(公司),以获得相应部门的不同导航菜单及权限 这里实现:更改角色权限后,实现页面 不刷新 更改…...

【G-LAB】网络工程师常用排错命令详细版

网络工程师在日常配置中难免出现各种配置错误,比如接口地址配错、掩码位数配错、接口忘记no shutdown。除去这些基础错误,在配置各种路由选择协议时也会因为网络类型、邻居类型、区域和路由器层级等各种问题使邻居无法建立、路由无法传递进而导致网络不通…...

Linux 桌面版关闭GUI桌面环境

持久打开和关闭 通过CtrlAltF1-F6快捷键进入命令行界面 执行以下命令,持久关闭Ubuntu桌面版的GUI环境: sudo systemctl set-default multi-user.target执行以下命令,持久开启Ubuntu桌面版的GUI环境 通过CtrlAltF7快捷键进入GUI界面 sudo s…...

ChatGPT能代替搜索引擎吗?ChatGPT和搜索引擎有什么区别?

ChatGPT和搜索引擎是两种在信息获取和交流中常用的工具,ChatGPT是一种基于人工智能技术的聊天机器人,而搜索引擎是一种在互联网上搜索信息的工具。尽管它们都是依托互联网与信息获取和交流有关,部分功能重合,但在很多方面存在着明…...

PHP海外代购管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 海外代购管理系统是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 代码下载 https://download.csdn.net/download/qq_41221322/88229435 论文 https://…...

游戏反外挂方案解析

近年来,游戏市场高速发展,随之而来的还有图谋利益的游戏黑产。在利益吸引下,游戏黑产扩张迅猛,已发展成具有庞大规模的产业链,市面上游戏受其侵扰的案例屡见不鲜。 据《FairGuard游戏安全2022年度报告》数据统计&…...

基于郊狼算法优化的BP神经网络(预测应用) - 附代码

基于郊狼算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于郊狼算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.郊狼优化BP神经网络2.1 BP神经网络参数设置2.2 郊狼算法应用 4.测试结果:5.Matlab代码 摘要…...

【腾讯云 TDSQL-C Serverless 产品测评】全面测评TDSQL-C Mysql Serverless

全面测评TDSQL-C Mysql Serverless 文章目录 全面测评TDSQL-C Mysql Serverless前言什么是TDSQL-C Mysql Serverless初始化 TDSQL-C Mysql Serverless新建数据库建立数据表开启外网访问 兼容性SQL文件 导入导出navicat 直接在线传输 构建测试环境准备Python测试脚本准备 Jmeter…...

Qt应用开发(基础篇)——纯文本编辑窗口 QPlainTextEdit

一、前言 QPlainTextEdit类继承于QAbstractScrollArea,QAbstractScrollArea继承于QFrame,是Qt用来显示和编辑纯文本的窗口。 滚屏区域基类https://blog.csdn.net/u014491932/article/details/132245486?spm1001.2014.3001.5501框架类QFramehttps://blo…...

数据结构-->栈

💕休对故人思故国,且将新火试新茶,诗酒趁年华💕 作者:Mylvzi 文章主要内容:详解链表OJ题 前言: 前面已经学习过顺序表,链表。他们都是线性表,今天要学习的栈也是一种线…...

强训第36天

C D C 193--1100 0001 194--1100 0010 196--1100 0100 198--1100 0110 能包括全部的且最小的为 1100 0xxx xxx为主机号,站三位 B MAC地址是绑定网卡的,全球唯一 D A C D IP网段 17为网络号 所以是 40.15.1aaa aaa(7位主机号).0 因为要划分2个子网 所以…...

PyTorch bug记录

1、RuntimeError: Input type (torch.FloatTensor) and weight type (torch.cuda.FloatTensor) should be the same 这个错误是因为模型的权重是在GPU上,但是输入数据在CPU上。在PyTorch中,Tensor的类型和所在的设备(CPU或GPU)需…...

js中的正则表达式(一)

目录 1.什么是正则表达式 2.正则表达式在JavaScript中的使用场景: 3.正则表达式的语法: 1.什么是正则表达式 正则表达式(Regular Expression)是用于匹配字符串中字符组合的模式。在JavaScript中,正则表达式也是对象通常用来查找、替换那些符…...

免费开源使用的几款红黑网络流量工具,自动化的多功能网络侦查工具、超级关键词URL采集工具、Burpsuite被动扫描流量转发插件

免费开源使用的几款红黑网络流量工具,自动化的多功能网络侦查工具、超级关键词URL采集工具、Burpsuite被动扫描流量转发插件。 #################### 免责声明:工具本身并无好坏,希望大家以遵守《网络安全法》相关法律为前提来使用该工具&am…...

使用Mybatis Plus进行DAO层开发

一、特性 Mybatis应该大家现在都知道,而且在项目中都在使用,因为这块ORM框架让大家能专心业务SQL的编写,数据库的连接,连接池的使用都不用关心,极大的提高了生产效率。 今天要给大家介绍的另外一款ORM框架&#xff0…...

Android中如何不编译源生模块

如果想让自己的app 替换系统的app 比如使用闪电浏览器替换系统的Browser 首先把闪电浏览器放到 vendor/rockchip/common/apps Android.mk LOCAL_PATH : $(call my-dir) include $(CLEAR_VARS)LOCAL_MODULE : Lightning LOCAL_SRC_FILES : $(LOCAL_MODULE).apk LOCAL_MODULE_C…...

安装Vue_dev_tools

Vue控制台出现Download the Vue Devtools extension for a better development experience: 下载Vue_dev_tools,这里给出网盘链接,有Vue2和Vue3的,dev_tools 以Google浏览器为例 点击设置(就是那三个点)->扩展程序->管理扩…...

【数据结构入门指南】二叉树顺序结构: 堆及实现(全程配图,非常经典)

【数据结构入门指南】二叉树顺序结构: 堆及实现(全程配图,非常经典) 一、前言:二叉树的顺序结构二、堆的概念及结构三、堆的实现(本篇博客以实现小堆为例)3.1 准备工作3.2 初始化3.3 堆的插入3.3.1 向上调…...

css实现三角形的几种方法

css实现三角形的方法:1、使用边框实现三角形,利用透明边框和实色边框的组合,可以创建不同方向和大小的三角形;2、使用伪元素实现三角形,通过使用伪元素来创建一个占据父元素一半大小的实心三角形;3、使用tr…...

❤ Vue工作常用的一些动态数据和方法处理

❤ Vue工作常用的一些动态数据和方法处理 &#xff08;1&#xff09;动态拼接相对路径结尾的svg 错误写法一 ❌ 正确写法 &#x1f646; <img :src"require(/assets//amazon/svg/homemenu${index}.svg)" style"height: 20px;display: block;margin: 0 au…...

SQLite的命令用法

学习数据库直达网站 https://www.runoob.com/sqlite/sqlite-tutorial.html&#xff08;菜鸟教程&#xff09; 这里只分享&#xff0c;基础操作&#xff0c;数据库创建打开……等等 用到查菜鸟教程即可 文章目录 学习数据库直达网站创建一个数据库方式1方式2 创建一个表格插入一…...

在jupyter notebook中使用海龟绘图

首先&#xff0c;安装ipyturtle3 ref:ipyturtle3 PyPI pip install ipyturtle3然后&#xff0c;安装ipycanvas ipycanvas是一个需要安装在与JupyterLab实例相同环境的包。此外&#xff0c;您需要安装nodejs&#xff0c;并启用JupyterLab ipycanvas小部件。 所有这些都在ipy…...

密码学学习笔记(十八):Diffie–Hellman (DH) 密钥交换

DH算法是第一个密钥交换算法&#xff0c;也是第一个得到形式化描述的公钥密码算法。 群论 DH密钥交换算法基于数学中的群论&#xff0c;群论也是当今大多数公钥密码的基础。 要使集合及其运算成为一个群&#xff0c;需要满足以下性质&#xff1a; 封闭性&#xff1a;群中两…...

Linux —— 进程间通信(管道)

目录 一&#xff0c;进程间通信 二&#xff0c;管道 匿名管道 命名管道 一&#xff0c;进程间通信 进程间通信&#xff08;IPC&#xff0c;InterProcess Communication&#xff09;&#xff0c;即在不同进程之间进行信息的传播或交换&#xff1b;由于一般进程用户地址空间是…...

python常用

环境配置 conda Conda自动补全 在终端激活conda环境的时候按tab不能自动补全activate和环境名。安装后可用tab进行补全。 安装 conda-bash-completion 插件&#xff1a;GitHub 安装方法&#xff1a; conda install -c conda-forge conda-bash-completion常用命令 #创建虚拟…...

jeecg如何创建报表并配置到菜单中

当使用jeecg创建单表之后,需要进行报表显示,并把报表配置到菜单中,该如何操作呢?下面进行详细讲解。这里以课程表这张表为例进行讲解。 一.表单创建完成,并配置好菜单栏。具体步骤略,如下图: 二.创建积木报表 1.左侧边栏展开低代码开发菜单,进入报表设计器栏目 2.进…...

Servlet+JDBC实战开发书店项目讲解第12讲:会员管理功能

ServletJDBC实战开发书店项目讲解第12讲&#xff1a;会员管理功能 实现思路&#xff1a; 显示会员列表&#xff1a; 创建一个管理页面&#xff0c;用于显示所有会员的信息。在后端&#xff0c;创建一个Servlet来处理显示会员列表的请求。在该Servlet中&#xff0c;通过JDBC从数…...

java面向对象——继承以及super关键字

继承的概念 1. 被继承的类称为父类&#xff08;超类&#xff09;&#xff0c;继承父类的类都称为子类&#xff08;派生类&#xff09; 2. 继承是指一个对象直接使用另一个对象的属性和方法&#xff0c;但是能继承非私有的属性和方法&#xff1b;(1) 构造方法不能被继承。(2) 但…...

[机缘参悟-101] :IT人 - 遵从世界本源的样子,不带个人情感、道德、认知倾向,接纳一切,你就拥有无限的力量

目录 道的本义 如来的本义 观音的本义 无为而治本质是顺势而为 儒家的本质 感悟&#xff1a; 道的本义本质&#xff1a;天地的力量和运行规律 "天地以万物为刍狗"是出自《道德经》第五十章的一句话。在这句话中&#xff0c;"天地"指的是宇宙&#x…...

C++--深度理解智能指针

PS:智能指针简单应用看这里 http://t.csdn.cn/qN7IK 1.智能指针的介绍 在C中&#xff0c;智能指针有三个版本&#xff0c;分别为&#xff1a; auto_ptr unique_ptr shared_ptr 这三个版本的智能指针中&#xff0c;shared_ptr最为完善&#xff0c;auto_ptr基本上没有太大用…...

Spring Boot使用MySQL的默认连接池

笔者在近期秋招面试的时候被问到了这个问题&#xff0c;现在简单梳理一下便于后期重新回顾&#xff0c;并加深记忆。 Spring Boot 默认使用的数据库连接池是 HikariCP(开源库地址)。 HikariCP 是目前性能最好的连接池之一&#xff0c;它具有高度的性能、可靠性和可扩展性&…...

conda使用教程

Conda介绍 conda可以理解为一个工具&#xff0c;也是一个可执行命令&#xff0c;其核心功能是包管理和环境管理。包管理与pip的使用方法类似似&#xff0c;环境管理则是允许用户方便滴安装不同版本的python环境并在不同环境之间快速地切换。 conda的设计理念 conda将几乎所有…...

什么是LLM大语言模型?

什么是LLM大语言模型&#xff1f; 大语言模型&#xff08;英文&#xff1a;Large Language Model&#xff0c;缩写LLM&#xff09;&#xff0c;也称大型语言模型&#xff0c;是一种人工智能模型&#xff0c;旨在理解和生成人类语言。它们在大量的文本数据上进行训练&#xff0…...

jenkins同一jar包部署到多台服务器

文章目录 安装插件配置ssh服务构建完成后执行 没有部署过可以跟这个下面的步骤先部署一遍&#xff0c;我这篇主要讲jenkins同一jar包部署到多台服务器 【Jenkins】部署Springboot项目https://blog.csdn.net/qq_39017153/article/details/131901613 安装插件 Publish Over SSH 这…...

(四)Doceke安装MySQL镜像+Docker启动MySQL容器

Doceke安装MySQL镜像/Docker启动MySQL容器 一、doceke安装MySQL镜像 切换到root用户&#xff0c;su root 。 1、启动Docker 启动&#xff1a;sudo systemctl start docker 停止&#xff1a;systemctl stop docker 重启&#xff1a;systemctl restart docker 查看docker运行…...

Android Studio:Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7

原项目使用jdk8&#xff0c;升级gradle后出现的该问题。 java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.groovy.vmplugin.v7.Java7at org.codehaus.groovy.vmplugin.VMPluginFactory.<clinit>(VMPluginFactory.java:43)at org.codehaus.gro…...

Spring Clould 搜索技术 - elasticsearch

视频地址&#xff1a;微服务&#xff08;SpringCloudRabbitMQDockerRedis搜索分布式&#xff09; 初识ES-什么是elasticsearch&#xff08;P77&#xff0c;P78&#xff09; 1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能…...

android核绑定cpuset配置与检测进程所在核cpuset方法

一、开机阶段 开机有如下阶段。抛开开机动画需要的audio、surfaceflinger等进程&#xff0c;大部分android程序是在/data分区加载完整以后开始加载。所以cpuset的配置可以在 post-fs-data之后。注意&#xff0c;init.rc的不同阶段脚本都可能覆盖前面配置的cpuset。配置好检查与…...

Lnton羚通关于如何使用nanoPC-T4 安装OpenCV?

nanoPC-T4 安装 OpenCV Note: OpenCV has been pre-installed in FriendlyCore/FriendlyDesktop (Version after 201905) and does not require manual installation. Please download the latest FriendlyCore/FriendlyDesktop Image file from the following URL: http://do…...

内存泄漏:前端开发者的噩梦——内存泄露的原因及排查

在前端开发中&#xff0c;内存泄漏是一个常见但令人头疼的问题。它会导致应用程序变得缓慢&#xff0c;不稳定&#xff0c;最终可能崩溃。本文将介绍内存泄漏的概念、常见泄漏原因以及如何排查和预防内存泄漏。 什么是内存泄漏&#xff1f; 内存泄漏是指应用程序中的内存被错…...

高效使用ChatGPT之ChatGPT客户端

ChatGPT客户端&#xff0c;支持Mac, Windows, and Linux 下载地址见文章结尾 软件截图 Windows: Mac&#xff1a; 说明 chatgpt桌面版&#xff0c;相比于网页版的chatgpt&#xff0c;最大的特色是支持历史聊天对话记录导出&#xff0c;且支持三种格式&#xff1a;PNG、PDF、…...

【腾讯云 TDSQL-C Serverless 产品体验】基于TDSQL-C 存储爬取的QQ音乐歌单数据

【腾讯云 TDSQL-C Serverless 产品体验】基于TDSQL-C 存储爬取的QQ音乐歌单数据 文章目录 【腾讯云 TDSQL-C Serverless 产品体验】基于TDSQL-C 存储爬取的QQ音乐歌单数据前言出现的背景一、TDSQL-C数据库是什么&#xff1f;二、TDSQL-C 的特点三、TDSQL-C的应用场景四、基于TD…...

leetcode 6450. k-avoiding 数组的最小总和

给你两个整数 n 和 k 。 对于一个由 不同 正整数组成的数组&#xff0c;如果其中不存在任何求和等于 k 的不同元素对&#xff0c;则称其为 k-avoiding 数组。 返回长度为 n 的 k-avoiding 数组的可能的最小总和。 示例 1&#xff1a; 输入&#xff1a;n 5, k 4 输出&#…...

变压器绝缘油耐压试验

试验目的 绝缘油是电气设备常用的绝缘、 灭弧和冷却介质。 为保证它在运行过程中具有良好的性能&#xff0c; 必须定期对其进行各项试验&#xff0c; 尤其是耐压试验。 绝缘油的耐压试验是在专用的击穿电压试验器中进行的&#xff0c; 试验器包括一个瓷质或玻璃油杯、 两个直径…...