修改coross-exp下的安卓配置文件
原仓库文件下有安卓文件夹,打开他,目录下有coross文件夹内部有对应平台的的相关配置,
复制粘贴到仓库根目录下的coross-exp下的安卓配置文件,合并在一起,然后按照你的sdk,ndk,java的配置,修改该配置文件
我的修改出来如下
[constants]
andriod_ndk_toolchain_bin = '/home/lemon233/Android/Sdk/ndk/25.1.8937393/toolchains/llvm/prebuilt/linux-x86_64/bin'
android_ndk_toolchain_prefix = 'aarch64-linux-android21-'
[properties]
# only needed if you want to run the custom target powder_apk (powder.apk)
# android_ndk_toolchain_prefix comes from the correct cross-file in ./android/cross
android_ndk_toolchain_prefix = android_ndk_toolchain_prefix
android_platform = 'android-33'
android_platform_jar = '/home/lemon233/Android/Sdk/platforms/' + android_platform + '/android.jar'
java_runtime_jar = '/usr/lib/jvm/java-8-openjdk/jre/lib/rt.jar'
[binaries]
c = andriod_ndk_toolchain_bin / (android_ndk_toolchain_prefix + 'clang')
# c = [ 'ccache', andriod_ndk_toolchain_bin / (android_ndk_toolchain_prefix + 'clang') ]
cpp = andriod_ndk_toolchain_bin / (android_ndk_toolchain_prefix + 'clang++')
# cpp = [ 'ccache', andriod_ndk_toolchain_bin / (android_ndk_toolchain_prefix + 'clang++') ]
strip = andriod_ndk_toolchain_bin / 'llvm-strip'
# only needed if you want to run the custom target powder_apk (powder.apk)
javac = '/usr/lib/jvm/java-8-openjdk/bin/javac'
jar = '/usr/lib/jvm/java-8-openjdk/bin/jar'
d8 = '/home/lemon233/Android/Sdk/build-tools/33.0.1/d8'
aapt = '/home/lemon233/Android/Sdk/build-tools/33.0.1/aapt'
aapt2 = '/home/lemon233/Android/Sdk/build-tools/33.0.1/aapt2'
zipalign = '/home/lemon233/Android/Sdk/build-tools/33.0.1/zipalign'
apksigner = '/home/lemon233/Android/Sdk/build-tools/33.0.1/apksigner'
[host_machine]
system = 'android'
cpu_family = 'aarch64'
cpu = 'armv8'
endian = 'little'
修改到此完成
构建编译
返回仓库根目录,输入命令:
meson --cross-file=cross-examples/android.ini -Dbuildtype=release -Dstatic=system -Dlua=lua52 build-and
此时meson会从github拉取对应的配置文件,
拉取过程中大概率会报错ERROR: Problem encountered: tpt-libs android platform mismatch
,这是因为拉取下来的安卓sdk版本和本地版本不一致导致的
打开仓库根目录下的subprojects
文件夹,目录下应该有你刚刚拉取的配置文件夹,打开它找到meson.build
修改android_platform = 'android-30'
改成android_platform = 'android-33'
然后重新执行构建
构建应该顺利完成,然后接下来执行编译
此时的编译不能直接用ninja
那样编译出来的是动态库文件
应该用以下命令:
meson compile sign-apk #不要在意这里的自定义目标是sign apk,它会自动帮你构建对齐apk的
若编译完成,应该出现
Failed to load signer "signer #1"
java.io.FileNotFoundException: (没有那个文件或目录)
这个错误,若出现其他错误请自己排查,出现这个错误,说明在签名出错,需要我们手动签名
签名apk
使用如下命令创建签名文件
keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore
如果成功执行,你的目录下应该有名叫android.keystore
的密钥文件
然后签名:
apksigner sign --ks ./android.keystore ./android/powder.unsigned.apk #过程会提示你输入创建密钥时的密码
若没有报错,此时的powder.unsigned.apk
以及是签名过后的了,可以安装了