我遵循本教程从命令行构建Android应用程序。这是我的批处理脚本,用于使用USB调试在设备上构建和安装应用程序。
aapt package -f -m -J buildgen -S res -M AndroidManifest.xml -I "%ANDROID_HOME%platformsandroid-30android.jar"
javac -source 1.7 -target 1.7 -bootclasspath "%JAVA_HOME%jrelibrt.jar" -classpath "%ANDROID_HOME%platformsandroid-30android.jar" -d buildobj buildgennethanshqhelloR.java srcnethanshqhelloMainActivity.java
java -jar "%ANDROID_HOME%build-tools30.0.0libdx.jar" --dex --output=buildapkclasses.dex buildobj
aapt package -f -M AndroidManifest.xml -S res -I "%ANDROID_HOME%platformsandroid-30android.jar" -F buildHello.unsigned.apk buildapk
zipalign -f -p 4 buildHello.unsigned.apk buildHello.aligned.apk
call apksigner sign --ks debug.keystore --ks-key-alias androiddebugkey --ks-pass pass:android --key-pass pass:android --out buildHello.apk buildHello.aligned.apk
adb install -r buildHello.apk
adb shell am start -n net.hanshq.hello/.MainActivity
我使用OpenJDK-17、Android-30平台版本和Android 30.0.0构建工具版本。
这是AndroidManifest.xml文件。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.hanshq.hello"
versionCode="1"
versionName="0.1">
<uses-sdk android:minSdkVersion="30"/>
<application android:label="Hello">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
我想问的是,当我将minSdkVersion
设置为30时,它在我的设备上安装得很好。但是,当我将其设置为一个较低的值(如21(时,它仍然正确安装,但会像这样输出一个弹出的警告。
此应用程序是为旧版本的Android构建的,可能无法正常工作。请尝试检查更新,或与开发人员联系。
我想问的是,这个警告与minSdkVersion
的值有关,还是因为我使用的Android SDK平台和构建工具的版本?提前谢谢你的回答。
编辑:我的设备正在运行Android 11 OS
我设法通过消除了错误
- 指定21的最小sdk版本、targetSdkVersion和maxSdkVersion
- 在javac命令中将源jdk版本从1.7更改为11
- 在buildtoolsversion32中使用d8将类文件更改为dex文件
这是我的构建脚本供参考:
target=$1
if [ "$1" = "" ]; then
target="a.apk"
fi
aapt package -f -v
-I ~/android-sdk/platforms/android-32/android.jar
-J src -m
-M AndroidManifest.xml
-S res
-F bin/resources.ap_
javac
-classpath ~/android-sdk/platforms/android-32/android.jar
-source 11 -target 11
src/dom/domain/*.java
d8 --output bin src/*/*/*.class
--lib ~/android-sdk/platforms/android-32/android.jar
cd bin
mv resources.ap_ $target
aapt add $target classes.dex
printf 'androidn' | apksigner sign --min-sdk-version 29
--v4-signing-enabled true
-ks ~/code/android/debug.keystore $target
adb install --no-incremental -r $target