楼主
众所周知,我不喜欢过度工程化
所以我讨厌gradle
那我怎么构建apk呢
最原始的办法。下载adk和jbr,然后一个一个工具调用。
先把java打包成R.java,然后编译成class,然后转换成dex,然后打包其它东西到空apk,再把dex也塞进去,最后签名和优化zip结构。
如下脚本:
@echo off
setlocal
echo ========================================
echo BLEMz App 构建脚本
echo ========================================
:: 设置路径
set PROJECT_DIR=D:\BleMz
set ANDROID_HOME=C:\adk
set BUILD_TOOLS_VERSION=35.0.0
set PLATFORM_VERSION=35
set JAVA_HOME=C:\jbr
:: 设置工具路径
set AAPT=%ANDROID_HOME%\build-tools\%BUILD_TOOLS_VERSION%\aapt.exe
set JAVAC=%JAVA_HOME%\bin\javac.exe
set JAVA=%JAVA_HOME%\bin\java.exe
set Zipalign=%ANDROID_HOME%\build-tools\%BUILD_TOOLS_VERSION%\zipalign.exe
set Apksigner=%ANDROID_HOME%\build-tools\%BUILD_TOOLS_VERSION%\apksigner.bat
:: 设置 D8 路径 - 使用新的调用方式
set D8_JAR=%ANDROID_HOME%\build-tools\%BUILD_TOOLS_VERSION%\lib\d8.jar
set R8_JAR=%ANDROID_HOME%\build-tools\%BUILD_TOOLS_VERSION%\lib\r8.jar
:: 检查必要工具是否存在
if not exist "%AAPT%" (
echo 错误: 找不到 aapt.exe
echo 请确保已安装 build-tools;35.0.0
pause
exit /b 1
)
if not exist "%JAVAC%" (
echo 错误: 找不到 javac.exe
echo 请检查 JAVA_HOME 路径
pause
exit /b 1
)
:: 切换到项目目录
cd /d "%PROJECT_DIR%"
echo [1/8] 清理之前的构建...
if exist build rmdir /s /q build
if exist *.apk del *.apk
if exist *.dex del *.dex
echo [2/8] 创建必要的目录...
mkdir build 2>nul
mkdir build\gen 2>nul
mkdir build\obj 2>nul
echo [3/8] 生成 R.java 文件...
"%AAPT%" package -f -m -J build\gen -S res -M AndroidManifest.xml -I "%ANDROID_HOME%\platforms\android-%PLATFORM_VERSION%\android.jar"
if errorlevel 1 (
echo 错误: 生成 R.java 失败
pause
exit /b 1
)
echo [4/8] 编译 Java 代码...
"%JAVAC%" -cp "%ANDROID_HOME%\platforms\android-%PLATFORM_VERSION%\android.jar;build\gen" -d build\obj src\com\altzin\blemz\*.java build\gen\com\altzin\blemz\R.java
if errorlevel 1 (
echo 错误: 编译 Java 代码失败
pause
exit /b 1
)
echo [5/8] 转换为 DEX 格式...
:: 使用新的方式调用 D8,避免 -Djava.ext.dirs 参数
"%JAVA%" -cp "%D8_JAR%;%R8_JAR%" com.android.tools.r8.D8 --lib "%ANDROID_HOME%\platforms\android-%PLATFORM_VERSION%\android.jar" --min-api 21 build\obj\com\altzin\blemz\*.class --output .\
if errorlevel 1 (
echo 错误: DEX 转换失败
pause
exit /b 1
)
echo [6/8] 打包资源...
"%AAPT%" package -f -M AndroidManifest.xml -S res -I "%ANDROID_HOME%\platforms\android-%PLATFORM_VERSION%\android.jar" -F build\resources.apk
if errorlevel 1 (
echo 错误: 资源打包失败
pause
exit /b 1
)
echo [7/8] 添加 DEX 文件到 APK...
"%AAPT%" add build\resources.apk classes.dex
if errorlevel 1 (
echo 错误: 添加 DEX 失败
pause
exit /b 1
)
echo [8/8] 对齐和签名 APK...
ren build\resources.apk BleMzApp-unsigned.apk
"%Zipalign%" -f -p 4 build\BleMzApp-unsigned.apk build\BleMzApp-aligned.apk
if not exist my-release-key.keystore (
echo 生成签名密钥...
"%JAVA_HOME%\bin\keytool.exe" -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000 -storepass android -keypass android -dname "CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, S=Unknown, C=Unknown"
)
echo [8/9] 对齐和签名 APK...
"%Apksigner%" sign --ks my-release-key.keystore --ks-pass pass:android --key-pass pass:android --out build\BleMzApp.apk build\BleMzApp-aligned.apk
if errorlevel 1 (
echo 错误: APK 签名失败
pause
exit /b 1
)
echo [8/10] 对齐和签名 APK...
:: 清理临时文件
del build\BleMzApp-unsigned.apk 2>nul
del build\BleMzApp-aligned.apk 2>nul
echo ========================================
echo 构建成功!
echo 生成的 APK: D:\BleMz\build\BleMzApp.apk
echo ========================================
endlocal
pause