Android非APK程序开发流程
2015-01-16 15:45
239 查看
本文所说的非APK程序,是区别于一般的Android应用程序。这里说的非APK程序是指一个Android库项目,生成的Jar包包含一个有main入口的Java类,能够独立运行。许多Android平台上用Java语言实现的命令即是属于此种类型。
1. 创建一个Android库项目
执行如下命令,创建一个工程:
create lib-project -n demo_test -t 1 -k com.fyj.test -p ./demo
2. 编写程序
作为一个简单的例子,下面是一个简单的带main函数的Java类:
3. 编译代码
在工程根目录下,执行antdebug(或release)
4. 将生成的jar包转换成dex字节码
在bin目录下产生了classes.jar文件,这个还不能直接放到Android平台上去执行,需要转换为Dalvik能够识别的字节码,进入bin目录下依次执行如下命令:
4.1 通过dx工具将jar包中所有的类打包编译为一个名为classes.dex的文件
dx --dex --output=classes.dexclasses.jar
4.2 通过aapt工具将classes.dex文件重新添加到jar包中
aapt add classes.jar classes.dex
5. 运行程序
要想上述编译生成的jar文件,能够运行,需要启动dalvik虚拟机,加载主类,并调用入口函数main,可以借助如下脚本:
将上述的Jar包重命名为demo.jar,然后push到测试平台上的/system/framework/目录下,将上述脚本保存为demo文件,然后push到测试平台的/system/bin/目录下,并加上可执行权限。这样就可以在Android平台上运行上述脚本了,最终会调用到我们定义的主类。
输出结果如下:
$ adb shell demo
This is a Demo
附录:
android相关命令:
查看机器上已经安装的AVD:
android list avd
查看机器上已经安装的Android版本:
android list target
创建AVD设备
android create avd -n <avd名称> -t <Android
版本> -b <CPU架构> -p <AVD
设备保存位置> -s <选择AVD皮肤>
Sample: androidcreate avd -n test_avd -t 4
升级AVD设置
android update avd -n <AVD 名称>
Sample:androidupdate avd -n test_avd
创建一个新的Android项目
android create project<options>
Options:
-n--name : 项目名字<Projectname>,当你去build该项目的时候,这个选项将会用来做你的apk的文件名<即是:name.apk>
-t--target : 项目针对的Android版本,同时在编译的时候也会使用该Android版本.这个可以使用android list target查询到. [required]
-p--path : 项目将要建立的路径.[required]
-k--package : 项目应用的包名. [required]
-a--activity: 默认的Activity的名字. [required]
Sample:androidcreate project -n xiaoxuetu -t 4 -p ./xiaoxuetu -k com.xiaoxuetu -a MainActivity
更新一个Android项目
android update project<options>
Options:
-l--library : Directory of an Androidlibrary to add, relative to this project's directory.
-p--path : The project's directory.[required]
-n--name : Project name.
-t--target : Target ID to set for theproject.
-s--subprojects: Also updates any projects in sub-folders, such as test projects.
Sample:androidupdate project -p ./xiaoxuetu -n xiaoxuetu -t 4
创建Android库项目
android create lib-project<options>
Options:
-n--name : Project name.
-t--target : Target ID of the new project.[required]
-k--package : Android package name for the library. [required]
-p--path : The new project's directory.[required]
Sample:androidcreate lib-project -n xiaoxuetu_lib -t 4 -k com.xiaoxuetu.lib -p./xiaoxuetu_lib
更新Android库项目
android update lib-project<options>
Options:
-p--path : The project's directory.[required]
-t--target : Target ID to set for theproject.
库项目的引入
android update project \
--target <target_ID> \
--path path/to/your/project
--library path/to/library_projectA
当引入成功后,我们就会发现在project.properties文件中多了这么一行:
android.library.reference.1=path/to/library_projectA
如果你引入的是多个库项目,那么将会使用.n来决定各个库项目的优先权(数字代码优先级,1为最高):
android.library.reference.1=path/to/library_projectA
android.library.reference.2=path/to/library_projectB
android.library.reference.3=path/to/library_projectC
当然我们也可以给library_projectC较高的优先权:
android.library.reference.2=path/to/library_projectA
android.library.reference.3=path/to/library_projectB
android.library.reference.1=path/to/library_projectC
创建测试项目
android create test-project<options>
Options:
-p--path : The new project's directory.[required]
-n--name : Project name.
-m--main : Path to directory of the appunder test, relative to the test project directory. [required]
Sample: androidcreate test-project -p ./xiaoxuetu_test -n xiaoxuetu_test -m ../xiaoxuetu
更新测试项目
android update test-project <options>
Options:
-m--main : Directory of the app undertest, relative to the test project directory. [required]
-p--path : The project's directory.[required]
1. 创建一个Android库项目
执行如下命令,创建一个工程:
create lib-project -n demo_test -t 1 -k com.fyj.test -p ./demo
2. 编写程序
作为一个简单的例子,下面是一个简单的带main函数的Java类:
package com.fyj.test; public class Demo { public static void main(String args[]) { System.out.println("This is a Demo"); } } |
在工程根目录下,执行antdebug(或release)
4. 将生成的jar包转换成dex字节码
在bin目录下产生了classes.jar文件,这个还不能直接放到Android平台上去执行,需要转换为Dalvik能够识别的字节码,进入bin目录下依次执行如下命令:
4.1 通过dx工具将jar包中所有的类打包编译为一个名为classes.dex的文件
dx --dex --output=classes.dexclasses.jar
4.2 通过aapt工具将classes.dex文件重新添加到jar包中
aapt add classes.jar classes.dex
5. 运行程序
要想上述编译生成的jar文件,能够运行,需要启动dalvik虚拟机,加载主类,并调用入口函数main,可以借助如下脚本:
# Script to start "demo" on the device, which has a very rudimentary # shell. # base=/system export CLASSPATH=$base/framework/demo.jar exec app_process $base/bin com.fyj.test.Demo "$@" |
输出结果如下:
$ adb shell demo
This is a Demo
附录:
android相关命令:
查看机器上已经安装的AVD:
android list avd
查看机器上已经安装的Android版本:
android list target
创建AVD设备
android create avd -n <avd名称> -t <Android
版本> -b <CPU架构> -p <AVD
设备保存位置> -s <选择AVD皮肤>
Sample: androidcreate avd -n test_avd -t 4
升级AVD设置
android update avd -n <AVD 名称>
Sample:androidupdate avd -n test_avd
创建一个新的Android项目
android create project<options>
Options:
-n--name : 项目名字<Projectname>,当你去build该项目的时候,这个选项将会用来做你的apk的文件名<即是:name.apk>
-t--target : 项目针对的Android版本,同时在编译的时候也会使用该Android版本.这个可以使用android list target查询到. [required]
-p--path : 项目将要建立的路径.[required]
-k--package : 项目应用的包名. [required]
-a--activity: 默认的Activity的名字. [required]
Sample:androidcreate project -n xiaoxuetu -t 4 -p ./xiaoxuetu -k com.xiaoxuetu -a MainActivity
更新一个Android项目
android update project<options>
Options:
-l--library : Directory of an Androidlibrary to add, relative to this project's directory.
-p--path : The project's directory.[required]
-n--name : Project name.
-t--target : Target ID to set for theproject.
-s--subprojects: Also updates any projects in sub-folders, such as test projects.
Sample:androidupdate project -p ./xiaoxuetu -n xiaoxuetu -t 4
创建Android库项目
android create lib-project<options>
Options:
-n--name : Project name.
-t--target : Target ID of the new project.[required]
-k--package : Android package name for the library. [required]
-p--path : The new project's directory.[required]
Sample:androidcreate lib-project -n xiaoxuetu_lib -t 4 -k com.xiaoxuetu.lib -p./xiaoxuetu_lib
更新Android库项目
android update lib-project<options>
Options:
-p--path : The project's directory.[required]
-t--target : Target ID to set for theproject.
库项目的引入
android update project \
--target <target_ID> \
--path path/to/your/project
--library path/to/library_projectA
当引入成功后,我们就会发现在project.properties文件中多了这么一行:
android.library.reference.1=path/to/library_projectA
如果你引入的是多个库项目,那么将会使用.n来决定各个库项目的优先权(数字代码优先级,1为最高):
android.library.reference.1=path/to/library_projectA
android.library.reference.2=path/to/library_projectB
android.library.reference.3=path/to/library_projectC
当然我们也可以给library_projectC较高的优先权:
android.library.reference.2=path/to/library_projectA
android.library.reference.3=path/to/library_projectB
android.library.reference.1=path/to/library_projectC
创建测试项目
android create test-project<options>
Options:
-p--path : The new project's directory.[required]
-n--name : Project name.
-m--main : Path to directory of the appunder test, relative to the test project directory. [required]
Sample: androidcreate test-project -p ./xiaoxuetu_test -n xiaoxuetu_test -m ../xiaoxuetu
更新测试项目
android update test-project <options>
Options:
-m--main : Directory of the app undertest, relative to the test project directory. [required]
-p--path : The project's directory.[required]
相关文章推荐
- 一个Android位置监管程序的开发全流程
- Android 开发中,如何将多个程序打包成一个apk文件,但是安装完成后显示多个程序?
- 用eclipse开发的android程序如何打包成apk文件
- Android程序开发记录:发布APK,权限等
- android高级程序开发-app启动流程
- android java开发 第二天 之熟悉 程序开发流程
- Android开发中内置apk程序
- Android开发中内置apk程序
- Android开发中内置apk程序
- Android开发 之 逆向apk程序
- Android开发中内置apk程序
- Android.mk——开发中内置apk程序配置
- Android开发 —— apk打包流程
- Android开发第一讲之目录结构和程序的执行流程
- android 开发之 使用Android系统隐藏api 读取*.apk 程序安装包信息
- 【转】Android开发中内置apk程序
- Android应用之个人应用软件开发【全套程序展示及APK下载】
- android 开发 程序中下载安装APK文件 问题汇总 解析程序包时出现问题
- Android APK文件在电脑上面运行方法(Android开发,程序部署)
- Android程序开发 初级教程1