引言:三百六十行,行行出状元!

0 q- q- @6 D9 Y5 u- M, o& H3 X大家好啊,我是CeePear

# O& r0 `! a, M& k5 J* @7 l) d今天给大家介绍如何在安卓上运行aapt如果有兴趣的话,就来看看我的文章吧/笑脸

9 _1 I0 {* ]  X第一步:准备$ F/ B, z; ^2 R

$ ]) L7 A. ~; C1.可以在armeabi or x86上运行的aapt库

! ~0 z# U3 Q/ F$ y4 _6 f) s# _+ a) n如果没有aapt库,可以去拆aide包里的,里面有平板与手机的包,在assets目录下,不想拆的,可以在文章末尾的链接访问并下载。

- {6 Z& t2 H; }, p( A% t2 k# h3 r8 Y3 @2.可以编译运行/打包java/apk的工具

2 j9 f$ s% i4 _" {, v# T0 ~如:Android Studio,Ecj,Aide等

6 x+ q2 Z# ?1 C# M3.了解java的Runtime.getRuntime.exec()8 `- ~8 B. t" s  s

可能还有其他方法,这里我不做过多讨论,因为我不会6 Y% U  ]; e' i

第二步:了解aapt的命令

, [: ^6 l2 @! }( I

r0 u" E2 i& V  S# a这里我们着重讨论如何生成R.java和生成apk

4 M* o2 y$ r8 `/ k在cdm窗口中,调用aapt的指令是aapt package -x 数据 ...在Java(安卓)上,调用aapt的指令是String[] 指令 = {"/data/user/0/包名/aapt路径","-x","数据",......};1.生成R.java

' c' K; j" F. Y) `4 e) fString[] 指令=new String[]{                "/datat/user/0/com.tiangong/files/aapt.so",                "package",                "-f",                "-m",                "-J",                 "/storage/emulated/0/AppProjects/MyApp/app/build/gen/com/mycompany/myapp/",                "-S",                "/storage/emulated/0/AppProjects/MyApp/app/src/main/res",                "-I",                "/storage/emulated/0/.aide/android.jar",                "-M",                "/storage/emulated/0/AppProjects/MyApp/app/src/main/AndroidManifest.xml"                };2.生成apk! }" x$ @0 M( h+ B

//生成apk与生成R.java大同小异String[] 指令=new String[]{            "/datat/user/0/com.tiangong/files/aapt.so",                "package",                "-f",                "-m",                "-J",                    "/storage/emulated/0/AppProjects/MyApp/app/build/gen/com/mycompany/myapp/",                "-S",                "/storage/emulated/0/AppProjects/MyApp/app/src/main/res",                "-I",                "/storage/emulated/0/.aide/android.jar",                "-M",                "/storage/emulated/0/AppProjects/MyApp/app/src/main/AndroidManifest.xml",                "-F",                "/storage/emulated/0/AppProjects/MyApp/app/src/main/res.apk"                };3.指令介绍(简略版)) v$ |  R7 d, K, S

package:打包指令-f:覆盖-m:生成R.java-J:设置R.java的路径-S:载入res路径-l:android.jar路径-M:AndroidManifest.xml所在路径-F:输出apk的路径其他指令请查找官方文档/大神介绍第三步:错误回调和全代码$ f! N" U. A/ C" P1 n

- D& B. y  G/ b/ u2 y! W3 k. z. \

-1.需要注意的是,这里得先会第一步中的第三小点哟

9 s0 I$ B7 V" W  F+ R+ }7 e-2.错误回调

1 Q0 ?& v' \; ?- t) S4 L& b\\先引入包吧import java.util.*;import java.io.*;//这里我们封装一下public static String LoadAapt(String[] cmd){String 错误文本 = null;String 正确处理 = null;ProcessProcess=Runtime.getRuntime().exec(cmd);            InputStreamInputStream=Process.getInputStream();InputStreamReaderInputStreamReader=newInputStreamReader(InputStream);            BufferedReaderBufferedReader=newBufferedReader(InputStreamReader);            while((正确处理=BufferedReader.readLine())!=null)            {return"false";          }//错误时处理            InputStreamInputStreamTwo=Process.getErrorStream();            InputStreamReaderInputStreamReaderTwo=newInputStreamReader(InputStreamTwo);            BufferedReaderBufferedReaderTwo=newBufferedReader(InputStreamReaderTwo);            while((错误文本=BufferedReaderTwo.readLine())!=null)            {                return错误文本;            }            Process.waitFor();        }catch(InterruptedExceptione){}catch(IOExceptione){}        return"true";    }全代码和调用方法/ C. B, G9 f" p% \+ j

import java.util.*;import java.io.*;public class androidCompile{public static String loadAapt(String[] cmd){String 错误文本 = null;String 正确处理 = null;try{File aapt = new File("/data/user/0/包名/aapt路径");//设置该路径可执行aapt.setExecutable(true);ProcessProcess=Runtime.getRuntime().exec(cmd);            InputStreamInputStream=Process.getInputStream();InputStreamReaderInputStreamReader=newInputStreamReader(InputStream);            BufferedReaderBufferedReader=newBufferedReader(InputStreamReader);            while((正确处理=BufferedReader.readLine())!=null)            {return"false";          }//错误时处理            InputStreamInputStreamTwo=Process.getErrorStream();            InputStreamReaderInputStreamReaderTwo=newInputStreamReader(InputStreamTwo);            BufferedReaderBufferedReaderTwo=newBufferedReader(InputStreamReaderTwo);            while((错误文本=BufferedReaderTwo.readLine())!=null)            {                return错误文本;            }            Process.waitFor();        }catch(InterruptedExceptione){}catch(IOExceptione){}        return"true";    }}}//调用方法:

; V7 |& h; g$ S( w' J9 OString[] cmd =new String[] {一大串指令};String result = androidCompile.loadAapt(cmd);第四步:本文回溯:

* p2 ~% {0 q$ y2 b

8 d0 y5 o$ X6 ]-在第一步中,我们准备需要用到的工具和需要了解到的代码:Runtime.getRuntime.exec

w/ I' _: m8 y8 q-在第二步中,我们认识到了aapt生成R.java,和输出apk的指令。0 M, P" B% G2 {, x

但这里的指令并没有包括assets和放入dex包的指令,这两个指令请自行探索

" w4 W3 P2 D$ P) J( I1 P& N-在第三部中,我们得到了错误回调和整体的工具类,这里是本文最简单也是最无趣的地方,在以后的文章中,我会对这些地方加以说明7 R6 d) e) T& L( F3 X" p' g' g

-AAPT下载请点击这里下载 密码是:3kmt

" _2 E+ E2 d$ N* h' V/ D8 g6 A本文到这里就结束啦,我是CeePear,咱们下期再见!

$ e3 R6 w. R1 U2 U5 A忘记说了,觉得好的话,别忘了评论关注转发哟!

' P5 P% ~4 i6 ~" u$ w3 ?) E; i+ E) {# ?- z$ ~

Java吧 收集整理 java论坛 www.java8.com

java执行aapt_第一章:在安卓上运行aapt相关推荐

  1. 《玩不够的数学:算术与几何的妙趣》:第一章 平面上的几何艺术

    第一章 平面上的几何艺术 人们往往从悖论中获得思维的乐趣,而几何学的悖论就是不可能图形.如今我们已创造出数千种这样的二维图像,不断挑战我们的眼睛和思维.三角形.披萨饼.七巧板也蕴藏着无穷的变化和巧妙的 ...

  2. python怎么让py里面逐行运行_怎样在安卓上运行python

    "人生苦短,我用python" python丰富的开发库确实为广大使用者缩减了大量的开发时间.小ming没事用python跑个自动化脚本,枯燥乏味的工作就让电脑帮忙做. 怎样在安卓 ...

  3. 使用AndroidStudio打包OpenCV和C++代码并在安卓上运行

    使用AndroidStudio打包OpenCV和C++代码并在安卓上运行 在为服务器部署OpenCV和C++的过程中尝试了很多方法,这里记录一下在AndroidStudio上打包OpenCV和C++的 ...

  4. java项目运行在浏览器_在 Java 程序中,能在 WWW 浏览器上运行的是 程序。_学小易找答案...

    [简答题]已知:如图, AD 是△ ABC 的角平分线, DE//AC, 交 AB 于点 E , DF//AB ,交 AC 于点 F ,求证: AD ⊥ EF. [简答题]Java语言具有较好的安全性 ...

  5. Spark大数据技术与应用 第一章Spark简介与运行原理

    Spark大数据技术与应用 第一章Spark简介与运行原理 1.Spark是2009年由马泰·扎哈里亚在美国加州大学伯克利分校的AMPLab实验室开发的子项目,经过开源后捐赠给Aspache软件基金会 ...

  6. 【JAVA SE】第一章 Java语言概述、环境变量和HelloWorld

    第一章 Java语言概述.环境变量和HelloWorld 文章目录 第一章 Java语言概述.环境变量和HelloWorld 一.Java语言概述 1.Java简介 2.Java发展历史 3.Java ...

  7. Java初级笔记-第一章

    第一章 Java概览 1.1 基本简介 Java是一种理想的面向对象的网络编程语言. 1991年,出现了Oak语言,旨在解决编程语言的选择和跨平台的问题. 1994年,随着Internet的迅猛发展, ...

  8. Java核心技术·卷二·第一章笔记

    Java核心技术·卷二·笔记 第一章:Java8的流库 Java8引入的用来以"做什么而非怎么做"的方式的处理集合 1.1 从迭代到流的操作 package com.package ...

  9. After Effects CC SDK 使用指南(二)—— 第一章 介绍 (上)

    其他文章链接 序 第一章 介绍-上 第一章 介绍-下 第一章 介绍 欢迎使用Adobe®After Effects®CC软件开发工具包!这是一个全新的文档,并不断更新.SDK的最新公共版本地址:htt ...

最新文章

  1. 初入react-redux (基于webpack babel的react应用框架)
  2. JSP内置对象—session
  3. php解析QQmv直链,网易云音乐直链解析API源代码^-^
  4. DirectUI界面编程(六)实现右键弹出菜单
  5. Go语言 模糊搜索实验(一)
  6. Java中对数组的排序方法总汇分析
  7. 【操作系统学习笔记】操作系统基础
  8. StorAge存储库
  9. Fluentd: Open Source Log Management
  10. python 成语库_python实现成语找一找
  11. python把excel填充到网页_Python获取某网页数据并写入excel
  12. C语言整人小程序,慎用,谨记!
  13. 计算机unity文献综述,Unity3D密室逃脱游戏设计+文献综述.doc
  14. 深度解析Eureka的自我保护机制
  15. 【CSS3】 CSS3实现“图片阴影”效果
  16. C-Free 5 加 TDM-GCC编辑器搭建C/C++开发环境
  17. 数字图像处理 直方图均衡化 MATLAB实验
  18. c罗说什么语言,C罗会说几种语言? 揭金球奖给梅西内马尔当翻译趣事
  19. 三万五千字长文!让你懂透编译原理(六)——第六章 属性文法和语法制导翻译
  20. 操作系统 吃水果放水果问题 PV操作

热门文章

  1. java框架 初始化Bean的方法
  2. html mailto 多个,mailto HTML最佳实践
  3. Java基础--24--println和print和printf的区别
  4. 修改DNS大大提高mac Mojave下载速度
  5. Yann LeCun新作:473种模型大对比,中日韩文本分类到底要用哪种编码?
  6. matlab解决excel 导入数据精度的问题
  7. 计算机基础知识讲座听后感,一次计算机讲座的心得体会
  8. 选择保养品 有效美容
  9. JAVA遍历Map的几种方法
  10. Linux文件权限及用户权限总结