文档章节

用命令行来构建Android项目

朱方圆
 朱方圆
发布于 2016/10/22 14:50
字数 898
阅读 48
收藏 0

1.Android的工程结构和准备

android的工程结构只是一种约定俗成的结构并没有严格的规范,特定的ide有特定的结构,从而符合ide的工具链,下面是一个典型的Android Studio工程结构

new-structure
├─ library-foobar
├─ app
│  ├─ libs
│  ├─ src
│  │  ├─ androidTest
│  │  │  └─ java
│  │  │     └─ com/futurice/project
│  │  └─ main
│  │     ├─ java
│  │     │  └─ com/futurice/project
│  │     ├─ res
│  │     └─ AndroidManifest.xml
│  ├─ build.gradle
│  └─ proguard-rules.pro
├─ build.gradle
└─ settings.gradle

在我的实践中,只会保留必不可少的结构,忽略掉那些脚本等等。

Android项目里面的必不可少的文件解构:

源码文件夹:这里的源码文件夹下面必须有符合android规范的包,这篇文章把这个文件夹称作src,下面的包定义为com/mycompany/package1

库文件夹:java代码所引用的库文件,这里定义为lib

资源文件夹:资源文件夹下面得文件结构必须符合android规范,要包含value等文件夹

AndroidManifest.xml:这个文件用来描述android app的特性,比如入口activity,sdk版本信息等等

其他的准备:

    需要下载sdk,注意sdk里面应该包括platform,platform-tools,build-tools,在构建的时候,platform和build-tools的版本要一致

    需要准备jdk,jdk需要和sdk的版本保持一致,jdk和sdk的版本关系如下:

总结一下准备工作:

开发环境mac,android sdk:android-24,jdk:jdk7

一些变量(下面得脚本都是用这些变量)

ANDROID_HOME : sdk的目录

JDK_HOME :jdk的目录

DEV_HOME : 工程根目录

项目结构:

DEV_HOME/src/com/mycompany/package1/HelloAndroid.java

                 res/layout

                      values

                      drawable

                 lib

                 obj  //保存编译后的产物

                 AndroidManifest.xml

 

2.操作步骤

2.1创建相关文件文件夹,创建ANDROID_HOME等变量

2.2编写HelloAndroid.java代码,一份示例代码如下

package com.mycompany.package1;

import android.app.Activity;
import android.content.res.Resources;
import android.os.Bundle;
import android.widget.TextView;

public class HelloAndroid extends Activity {

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    TextView textView = new TextView(this);

    String text = getResources().getString(R.string.helloText);
    textView.setText(text);

    setContentView(textView);
  }
}

2.3生成R文件

    R文件保存了所有资源的索引(实际上是给每个资源文件一个id)

$ANDROID_HOME/build-tools/24.0.0/aapt package -v -f -m -S $DEV_HOME/res -J   $DEV_HOME/src -M $DEV_HOME/AndroidManifest.xml -I $ANDROID_HOME/platforms/android-24/android.jar

可以看出这里用的是aapt这个工具

2.4编译java代码

$JDK_HOME/javac -verbose -d $DEV_HOME/obj -classpath $ANDROID_HOME/platforms/android-23/android.jar:$DEV_HOME/obj -sourcepath $DEV_HOME/src $DEV_HOME/src/com/mycompany/package1/*.java

2.5生成dex文件

$ANDROID_HOME/build-tools/24.0.0/dx --dex --verbose --output=$DEV_HOME/bin/classes.dex $DEV_HOME/obj $DEV_HOME/lib

2.6生成apk文件

$ANDROID_HOME/build-tools/24.0.0/aapt package -v -f -M $DEV_HOME/AndroidManifest.xml -S $DEV_HOME/res -I $ANDROID_HOME/platforms/android-24/android.jar -F $DEV_HOME/bin/work.unsigned.apk $DEV_HOME/bin

2.7给apk文件签名

这里要分为两步,先生成证书,然后用证书给apk文件签名

    生成证书:JAVA_HOME/bin/keytool  -genkeypair -validity 10000 -dname "CN=company name,OU=organisational unit,O=organisation, L=location,S=state,C=country code" -keystore DEV_HOME/work.keystore -storepass password -keypass password -alias work -keyalg RSA -v

    签名:$JDK_HOME/jarsigner -verbose -keystore $DEV_HOME/work.keystore -storepass password -keypass password -signedjar $DEV_HOME/bin/work.signed.apk $DEV_HOME/bin/work.unsigned.apk work

2.8压缩apk文件

$ANDROID_HOME/build-tools/24.0.0/zipalign -v -f 4 $DEV_HOME/bin/work.signed.apk $DEV_HOME/bin/work.apk

2.9向模拟器上安装apk文件

这里使用adb工具向模拟器安装文件,模拟器可以是用android的工具生成的,也可以是android手机连到电脑上开启usb调试,这里推荐第二种,因为第一种很慢,容易出错

$ANDROID_HOME/platform-tools/adb -d install $DEV_HOME/bin/work.apk

执行上面那一行代码的时候务必保证电脑上有android设备连着

 

 

然后就能看到app运行了

 

© 著作权归作者所有

上一篇: php迭代器举例
下一篇: 在mac上实践jni
朱方圆
粉丝 2
博文 24
码字总数 20023
作品 0
南京
私信 提问
打造一个全命令行的Android构建系统

IDE都是给小白程序员的,大牛级别的程序员一定是命令行控,终端控,你看大牛都是使用vim,emacs 就一切搞定” 这话说的虽然有些绝对,但是也不无道理,做开发这行要想效率高,自动化还真是缺少...

拉偶有所依
2015/06/29
1K
10
使用 Swift 语言编写 Android 应用入门

Swift标准库可以编译安卓armv7的内核,这使得可以在安卓移动设备上执行Swift语句代码。本文解释了如何在你的安卓手机上运行一个简单的“hello,world”程序。 如果你遇到了任何问题,请参考下...

oschina
2016/04/19
12.9K
27
加速Android Studio/Gradle构建

已经使用Android Studio进行开发超过一年,随着项目的增大,依赖库的增多,构建速度越来越慢,现在最慢要6分钟才能build一个release的安装包,在网上查找资料,发现可以通过一些配置可以加快...

码农明明
2015/03/19
20.7K
15
使用 Cocos2d-x 3.0 或者更新版本构建多平台游戏

在这个教程中,你将学到如何在 Windows 开发环境中使用 Cocos2d-x 3.0 或更高版本来创建一个简单的游戏,和如何在 Windows 和 Android 平台上运行它。 Cocos2d-x 是什么? Cocos2d-x 是一个跨...

oschina
2015/04/08
4.9K
10
给 Android 开发者的 Gradle 入门指南

本文的目的是为您提供关于 Gradle 的高级概述,以及在开发 Android 应用程序时如何适应整个构建系统。 我将通过 Gradle 和 Gradle 的 Android 插件的基础知识,以及新的 Android 项目附带的默...

oschina
2017/11/22
3.6K
2

没有更多内容

加载失败,请刷新页面

加载更多

Kafka再平衡机制详解

所谓的再平衡,指的是在kafka consumer所订阅的topic发生变化时发生的一种分区重分配机制。一般有三种情况会触发再平衡: consumer group中的新增或删除某个consumer,导致其所消费的分区需要...

爱宝贝丶
15分钟前
9
0
element 验证 请输入大于0的整数

data() { var validatePass = (rule, value, callback) => { // if (value <= 0) { // callback(new Error('请输入大于0的整数')); // } else { // c......

沉迷代码我爱学习
26分钟前
4
0
报表工具花钱or开源?我对比了这6个工具

近一年都在处理报表问题,调研了不少报表工具,也开发了适合公司业务的报表应用。分享一些关于如何选择报表工具的个人观点,希望对你有参考作用。 对于大部分企业来说,能花时间和人力去开发...

帆软
26分钟前
3
0
自建redis笔记--Redis cluster搭建

Redis cluster搭建 2018年十月 Redis 发布了稳定版本的 5.0 版本,推出了各种新特性,其中一点是放弃 Ruby的集群方式,改为 使用 C语言编写的 redis-cli的方式,是集群的构建方式复杂度大大降...

北极之北
26分钟前
3
0
分享一个在caffe中实现的yolo层

这是别人实现的,是我移植到cc的cpu实现,可以实现caffe中使用yolo3,但是我感觉实际效果不如darknet 好点 template <typename Dtype>inline Dtype sigmoid(Dtype x){return 1. / (1. ...

开飞色
28分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部