看雪里有人问到android是不是只能执行apk程序?

除了原生程序和脚本外,android是可以启动执行封装java程序的jar包的。

实现流程如下:

第一步新建java程序

public class Main {

public static void main(String[] args) {

for(int i=1;i<10;i++){

System.out.println("this is the test index"+i);

}

}

}

并将程序导出为jar命令为test.jar包。

第二步,将javajar包转为androidjar包。

1.首先,找到dx工具所在文件夹,如android-sdk/build-tools/20.0.0,并将该文件夹加入到环境变量PATH中;

2.其次,执行编译命令dx –dex –output=classes123.dex test.jar

3.再将dex文件打包成android版本的jar,aapt add testandroid.jar classes123.dex

4.将该jar包push到手机的/system/framework目录下

5.修改jar包的权限为777

2.编写一个linux shell脚本

2.1.新建一个文本,命名为run_bktools.sh

base=/system

export CLASSPATH=$base/framework/testandroid.jar

exec app_process base/bincom.jaytang.linux.Main"@”

CLASSPATH为jar包的路径,com.larack.bktools.BKMain为jar包的main函数所在的类,”$@”表示把当前参数传入到main中。

2.2.将该sh文件run_bktools.sh push到手机/system/bin目录下,并且修改权限为777

2.3.最后测试利用sh脚本启动jar包

./run_bktools.sh

实现root shell命令的android程序如下:

package com.example.androidshell;

import java.io.DataOutputStream;

import java.io.IOException;

import android.app.Activity;

import android.app.ActionBar;

import android.app.Fragment;

import android.os.Bundle;

import android.util.Log;

import android.view.LayoutInflater;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.ViewGroup;

import android.widget.Toast;

import android.os.Build;

public class MainActivity extends Activity {

private static final String TAG = "shell";

private static final String CMD = "run_bktools.sh";

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

int result = -1;

result = execRootCmdsilent(CMD);

//查看返回值 如果是-1就fail

if (result == -1) {

Toast.makeText(getApplicationContext(), "fail", 0).show();

} else {

Toast.makeText(getApplicationContext(), "sucess", 0).show();

}

}

//执行shell命令的方法

private int execRootCmdsilent(String cmd) {

int result =-1;

DataOutputStream dos=null;

try {

//申请su权限

Process p=Runtime.getRuntime().exec("su");

//拿到输出流

dos=new DataOutputStream(p.getOutputStream());

Log.i(TAG, cmd);

dos.writeBytes(cmd+"\n");

dos.flush();

dos.writeBytes("exit\n");

dos.flush();

p.waitFor();

//改变退出的命令的值

result=p.exitValue();

//将成功信息打印出来

Log.i(TAG, "Success execRootCmdSilent(" + cmd + ")=" + result);

} catch (Exception e) {

// TODO: handle exception

Log.i(TAG,"fail execRootCmdSilent("+cmd+")"+result);

}finally{

if(dos!=null)

{

try {

dos.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

return result;

}

}

最后在eclispe的控制台能看到

参考:http://www.cnblogs.com/larack/p/4139766.html

android jar包 权限,Android系统启动执行jar程序相关推荐

  1. java -jar 工作原理_可执行Jar包运行原理

    spring boot有一个很方便的功能就是可以将应用打成可执行的jar.那么大家有没想过这个jar是怎么运行起来的呢?本篇博客就来介绍下spring boot可执行jar包的运行原理. 1. 打可执 ...

  2. Java反编译Jar包和Android APK(类似.NET Reflector)

    JD-GUI 这个JD-GUI可以反编译jar包,用法就是打开jar包直接浏览. JD-Eclipse JD-Eclipse是个Eclipse插件,安装方法是打开Eclipse,菜单 Help – & ...

  3. 在Linux服务器运行jar包并一直处于后台执行

    在Linux服务器运行jar包并一直处于后台执行: 一.一般情况 jar包在linux的目录为 /jarmanager/xxx.jar 使用在/jarmanager目录下使用 java -jar xx ...

  4. 将jar包转换成可执行.exe文件

    将jar包转换成可执行.exe文件 写在前面的话 将jar转换成exe 写在前面的话 在转换之前需要先到处一个可执行的jar,确保你的程序是正确的.我们需要创建一个文件来存放我们生成的exe文件.在这 ...

  5. pom 的第三方jar报错_01_maven-将第三方jar包一起打包到项目 jar 包中

    前言:maven-将依赖的 jar包一起打包到项目 jar 包中 有时候在项目开发中,需要很多依赖的 jar 包,其中依赖的 jar 包也会依赖其他的 jar 包,导致jar 包的管理很容易不全. 如 ...

  6. Eclipse中要导出jar包中引用了第三方jar包怎么办

    Eclipse中要导出jar包中引用了第三方jar包怎么办 (2009-07-20 15:28:44) 转载▼ 标签: it 分类: Eclipse     今天做个小的java程序,想要先将其导出成 ...

  7. Maven之jar包冲突引入非第三方jar

    文章目录 1. jar包冲突问题 2. 解决办法 2.1 Maven Helper插件 2.1.1 安装 Maven Helper 插件 2.1.2 pom.xml 依赖冲突分析 2.1.2.1 打开 ...

  8. linux提取最新修改文件下载,linux 解压修改jar包内容并重新打包jar

    1.帮助文档 [root@node1 java]# jar Usage: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] ...

  9. 通过命令运行jar包(指定外部依赖jar包)

    前提条件: 1.本机已安装jdk 2.已配好jdk的环境变量 通过以下命令查询jdk是否配好 java -version 执行出现java版本信息即配好 lizhi@LiZhideMacBook-Ai ...

最新文章

  1. Java enum的用法详解
  2. 73款阿里巴巴开源软件详解
  3. BZOJ 4814 Luogu P3699 [CQOI2017]小Q的草稿 (计算几何、扫描线、set)
  4. PowerBI随笔(5)-关系模型与报表-2
  5. 【收藏】k8s: pod has unbound PersistentVolumeClaims问题解决
  6. img设置宽高不生效_便宜 好用 不掉盘 保姆级粒子云刷机攻略
  7. Mean Shift算法(3)在OpenCV上的实现——图像分割PyrMeanShiftFiltering
  8. vbs获取群聊当前内容_通过VBS脚本批量检测服务器状态 - 易本地工作室-Ebend SoftwareNetwork Studio - 群发,采集,管理类软件定制开发服务【易本地工作室】...
  9. 按键精灵执行cmd命令_如何用cmd运行按键精灵脚本
  10. 智伴机器人安卓怎么设置个人热点_智伴机器人怎么联网?看这个联网视频教程...
  11. 泊松回归模型matlab,matlab拟合泊松分布
  12. 视频录制软件进行电脑屏幕录像的使用方法
  13. lunix 下编译draco遇到的问题及解决办法
  14. python画圆形螺旋线_Python写的弹球小游戏
  15. php 2038年,php实现兼容2038年后Unix时间戳转换函数,2038unix_PHP教程
  16. pin limiting the speed
  17. 利用VPS服务器搭建一个FRP内网穿透服务和Web服务穿透
  18. c语言程序设计罗朝盛第三版,c语言程序设计罗朝盛总复习.ppt
  19. 三相三线STATCOM仿真模型。无功电流采用ipiq检测,pwm采用滞环控制。
  20. c++判断字符串是否包含指定字符串/判断字符串是否相等/保留小数点后几位

热门文章

  1. Android设置Gmail邮箱
  2. UVA10302 Summation of Polynomials【数学】
  3. UVA457 Linear Cellular Automata【模拟】
  4. HDU1875 畅通工程再续【Kruskal算法+并查集】
  5. UVA10473 Simple Base Conversion【进制转换】
  6. NUC1003 Hangover【数学计算+水题】
  7. [Math Processing Error] 问题的解决(F5刷新页面与 Ctrl/Shift + F5 刷新页面的区别)
  8. sklearn 下的 ensemble learning
  9. 词汇的积累 —— 反义词、同义词
  10. linux 下的包管理器 —— apt-get 与 dpkg