文章目錄
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,純屬個人愛好,但調通了還挺爽的。