您的位置:首页 > 移动开发 > Android开发

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类:

package com.fyj.test;

public class Demo {

public static void main(String args[]) {

System.out.println("This is a Demo");

}

}

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,可以借助如下脚本:

# 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 "$@"

将上述的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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: