文章目录
- 1.新建项目文件夹
- 2.创建 java 代码所在文件夹
- 3.创建 java 文件
- 4.创建 AndroidManifest.xml 文件
- 5.创建资源文件目录
- 6.编译资源文件
- 7.将 java 文件编译成 .class 字节码文件
- 8.将字节码文件转换成 dex 格式
- 9.将所有资源文件打包到一个地方
- 10.使用 ApkBuilder 工具将 dex 和资源文件打包成 apk 文件
- 11.使用 zipalign 优化 apk
- 12.使用 debug 密钥给 apk 签名
- 13.启动 Android 模拟器
- 14.安装 apk
- 15.启动 app
- 参考文章
1.新建项目文件夹
mkdir Hello
进入该文件夹:
cd Hello\
2.创建 java 代码所在文件夹
mkdir src\dom\domain
3.创建 java 文件
vim src\dom\domain\SayingHello.java
进入 vim 编辑模式,点击 i
开始插入代码,输入:
package dom.domain;
import android.widget.TextView;
public final class SayingHello extends android.app.Activity
{
public void onCreate( final android.os.Bundle activityState )
{
super.onCreate( activityState );
final TextView textV = new TextView( SayingHello.this );
textV.setText( "Hello world" );
setContentView( textV );
}
}
点击 Esc 退出 vim 编辑模式,输入 :wq
保存。
4.创建 AndroidManifest.xml 文件
vim AndroidManifest.xml
进入 vim 编辑模式,点击 i
开始插入代码,输入:
<?xml version='1.0'?>
<manifest xmlns:a='http://schemas.android.com/apk/res/android'
package='dom.domain' a:versionCode='0' a:versionName='0'>
<application a:label='Saying hello'>
<activity a:name='dom.domain.SayingHello'>
<intent-filter>
<category a:name='android.intent.category.LAUNCHER'/>
<action a:name='android.intent.action.MAIN'/>
</intent-filter>
</activity>
</application>
</manifest>
点击 Esc 退出 vim 编辑模式,输入 :wq
保存。
5.创建资源文件目录
mkdir res
6.编译资源文件
aapt package -f -I E:\ware\Android\sdk\platforms\android-27\android.jar -J src -m -M AndroidManifest.xml -S res -v
其中,E:\ware\Android\sdk\
是 SDK 安装目录,使用时务必替换为自己的 SDK 路径
由于本例中没有资源文件,所以这一行命令执行后什么也不会生成。
7.将 java 文件编译成 .class 字节码文件
javac -bootclasspath E:\ware\Android\sdk\platforms\android-27\android.jar -classpath src -source 1.7 -target 1.7 src\dom\domain\*.java
这一步执行完成后,src\dom\domain\
文件夹下会编译出 SayingHello.class
文件
8.将字节码文件转换成 dex 格式
首先使用 jill 将 .class 文件转换为 .jayce
java -jar E:\ware\Android\sdk\build-tools\27.0.3\jill.jar --output classes.jayce src
这一步完成后,当前目录下会生成 classes.jayce
文件
然后使用 jack 将 .jayce 文件转换为 .dex
java -jar E:\ware\Android\sdk\build-tools\27.0.3\jack.jar --import classes.jayce --output-dex .
这一步完成后,当前目录下会生成 classes.dex
文件
9.将所有资源文件打包到一个地方
aapt package -f -F app.apkPart -I E:\ware\Android\sdk\platforms\android-27\android.jar -M AndroidManifest.xml -S res -v
这一步完成后,当前目录下会生成 app.apkPart
文件
10.使用 ApkBuilder 工具将 dex 和资源文件打包成 apk 文件
java -classpath E:\ware\Android\sdk\tools\lib\sdklib-26.0.0-dev.jar com.android.sdklib.build.ApkBuilderMain app.apkUnalign -f classes.dex -u -z app.apkPart
这里会产生一个警告:THIS TOOL IS DEPRECATED. See --help for more information.
,这个工具过时了,但暂时没有什么影响,可以继续使用。这一步完成后,当前目录下会生成 app.apkUnalign
文件
11.使用 zipalign 优化 apk
zipalign -f -v 4 app.apkUnalign app_aligned.apk
这一步完成后,当前目录下会生成 app_aligned.apk
文件
12.使用 debug 密钥给 apk 签名
jarsigner -verbose -keystore "C:\Users\Kevin Wang\.android\debug.keystore" -signedjar app.apk app_aligned.apk androiddebugkey
其中,C:\Users\Kevin Wang
是你的用户地址,可在命令行输入 %USERPROFILE%
查看自己的地址,这里使用的 Android debug 密钥库,接下来会让你输入密码,默认密码是 android
这一步完成后,当前目录下会生成 app.apk
文件。这一个 apk 文件就是最终的 apk 了,可以直接安装到真机上运行,或者使用 Android 模拟器安装运行。
13.启动 Android 模拟器
先查看已有的 Android 模拟器:
emulator -avd -list-avds
启动 Android 模拟器
emulator -avd Pixel_2_API_28
其中,Pixel_2_API_28
是模拟器名字,从上一步列出的已有模拟器中选择一个即可。
14.安装 apk
新开一个命令行窗口,安装 apk
adb install app.apk
15.启动 app
adb shell am start -n dom.domain/.SayingHello
大功告成,运行结果:
参考文章
彻底理解Android编译过程 - 脱离IDE开发Android-APP
注1:aapt
,adb
,emulator
等命令想要直接使用,需要设置环境变量,要不就要用 sdk 中的全路径。
注2:这破玩意花了我两天时间调试,整个过程花里胡哨,结果又比较 low,纯属个人爱好,但调通了还挺爽的。