这是我在windows环境下,试验过的最简单Android项目,只用记事本和命令行即可完成。

环境准备

开发环境需要Java SDK(官网下载),Android SDK(官网下载)。

首先安装Java SDK,然后将Android SDK解压到任意目录(建议解压到某个盘根目录,方便后续命令输入)。

接着需要下载Android SDK。打开刚才解压目录下的SDK Manager,勾选需要安装版本的SDK Platform点击Install package下载安装。

项目建立及代码编写

在任意地方新建一个目录,保存这个项目,然后新建一个src目录,用于存放源文件。因为Java有包的概念,所以进入src目录后,根据包名的层次,依次建立相应目录,然后新建Java源程序文件,比如:

 package test.android;

 import android.app.Activity;
import android.os.Bundle;
import android.app.AlertDialog; public class Mini extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new AlertDialog.Builder(this).setMessage("It works.").show();
}
}

将文件保存为Mini.java

回到项目根目录,新建另一个文件,保存为AndroidManifest.xml,内容如下:

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="test.android">
<application>
<activity android:name=".Mini">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

还可以从这里下载演示项目。

好了,项目至此已经完成了,下面进入编译打包环节。

编译打包

先打开命令行,输入javac -version,如果没有显示出java版本号,请将Java SDK的bin目录添加到path环境变量。

把当前目录切换到项目的根目录,然后新建两个目录

 mkdir bin
mkdir bin\classes

因为没有用到资源文件,所以第一步,直接编译Java源文件。

 javac -encoding utf-8 -source 1.7 -target 1.7 -bootclasspath \Android\android-sdk-windows\platforms\android-23\android.jar -d bin\classes src\test\android\Mini.java

将编译好的文件打包成dex格式

 D:\Android\android-sdk-windows\build-tools\23.0.3\dx.bat --dex --output=bin\classes.dex bin\classes

将资源文件打包

1 D:\Android\android-sdk-windows\build-tools\23.0.3\aapt.exe package -f -M AndroidManifest.xml -I \Android\sdk\platforms\android-19\android.jar -F bin\mini

用apkbuilder将所有文件打包成apk

1 D:\Android\android-sdk-windows\tools\apkbuilder.bat \workspace\test\android\minimum\mini.apk -v -u -z D:\workspace\test\android\minimum\bin\mini -f D:\workspace\test\android\minimum\bin\classes.dex

高版本的Java SDK里已经不提供apkbuilder.bat了,这里将文件内容贴一下,可以自己创建一个:

 @echo off
rem Copyright (C) The Android Open Source Project
rem
rem Licensed under the Apache License, Version 2.0 (the "License");
rem you may not use this file except in compliance with the License.
rem You may obtain a copy of the License at
rem
rem http://www.apache.org/licenses/LICENSE-2.0
rem
rem Unless required by applicable law or agreed to in writing, software
rem distributed under the License is distributed on an "AS IS" BASIS,
rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rem See the License for the specific language governing permissions and
rem limitations under the License. rem don't modify the caller's environment
setlocal rem Set up prog to be the path of this script, including following symlinks,
rem and set up progdir to be the fully-qualified pathname of its directory.
set prog=%~f0 rem Change current directory and drive to where the script is, to avoid
rem issues with directories containing whitespaces.
cd /d %~dp0 rem Check we have a valid Java.exe in the path.
set java_exe=
call lib\find_java.bat
if not defined java_exe goto :EOF set jarfile=sdklib.jar
set frameworkdir= if exist %frameworkdir%%jarfile% goto JarFileOk
set frameworkdir=lib\ if exist %frameworkdir%%jarfile% goto JarFileOk
set frameworkdir=..\framework\ :JarFileOk set jarpath=%frameworkdir%%jarfile% call %java_exe% -classpath %jarpath% com.android.sdklib.build.ApkBuilderMain %*

生成签名文件

1 keytool -genkey -alias my.keystore -keyalg RSA -validity 20000 -keypass 123456 -storepass 123456 -keystore my.keystore

生成签名文件时,提示输入姓名单位之类都可以直接回车忽略,最后输入y确认即可

对apk文件签名

1 jarsigner -verbose -keystore my.keystore -keypass 123456 -storepass 123456 -signedjar mini_signed.apk mini.apk my.keystore

这时就生成了最终的apk文件,可以安装到手机上了。

最新文章

  1. qq
  2. Mac 安装 Gradle
  3. react - web + webpack4 从0构建
  4. 短信利用weixin://connectToFreeWifi/?apKey=协议跳转到微信打开落地页h5
  5. 1283: 骨牌铺方格(zzuli)
  6. ArrayList vs LinkedList 空间占用
  7. hosts文件配置不生效的解决办法
  8. Nacos整合Spring Cloud Gateway实践
  9. pytorch使用tensorboardX进行loss可视化
  10. zookeeper 知识点汇总
  11. [Python] Python 之 function, unbound method 和 bound method
  12. maven用变量的方法统一管理jar包版本
  13. StreamSets sdc rpc 测试
  14. WebKit由三个模块组成-Webkit模块介绍
  15. 细说websocket - php篇(未完)
  16. nagios监控3306端口
  17. ES6之 =&gt;箭头函数
  18. C++ Primer(第五版)读书笔记 &amp; 习题解答 --- Chapter 2
  19. Integer类的parseInt和valueOf的区别
  20. 实现实体类和Xml相互转化

热门文章

  1. Android ConstraintLayout 约束布局属性
  2. Selenium-WebDriverApi接口
  3. VirtualBox上Centos7磁盘扩容
  4. python unittest中setUp()和setUpClass()、tearDown()和tearDownClass()之间的区别
  5. java:Mybatis框架3(二级缓存,延时和积极加载,SSI(Ibatis)集成,SSM集成)
  6. java:多线程(代理模式,Thread中的方法,Timer,生产者和消费者)
  7. 微服务简历V1.0
  8. 简述Js中,判断对象为空对象的几种方式
  9. centos7成功部署OpenLDAP
  10. “laravel.log” could not be opened: failed to open stream