通过命令行创建本机android apk(makefile)

时间:2016-08-25 07:52:59

标签: java c++ android-ndk java-native-interface

目标

创建原生android apk:

  • 通过vim&仅Makefile
  • 没有使用gradle, ant, maven, android.mk和其他所有东西

问题

  • 我已经通过命令行创建了一个简单的非原生android apk,效果很好&在我的 Samsung S7 上播放。
  • 当我尝试loadLibrary("hello")共享对象时,logcat告诉我它无法找到它。
  • .so文件肯定是通过aapt add hellojni.apk ./lib/arm64/libhello.so
  • 添加的

错误报告

08-25 16:56:30.959 15637 15637 W ResourcesManager: getTopLevelResources: /data/app/com.example.hellojni-1/base.apk / 4.0 running in com.example.hellojni rsrc of package com.example.hellojni
08-25 16:56:30.969 15637 15637 W System  : ClassLoader referenced unknown path: /data/app/com.example.hellojni-1/lib/arm64
08-25 16:56:30.969 15637 15637 W amo     : Trying to load shared library!
08-25 16:56:30.969 15637 15637 E AndroidRuntime: FATAL EXCEPTION: main
08-25 16:56:30.969 15637 15637 E AndroidRuntime: Process: com.example.hellojni, PID: 15637
08-25 16:56:30.969 15637 15637 E AndroidRuntime: java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.example.hellojni-1/base.apk"],nativeLibraryDirectories=[/data/app/com.example.hellojni-1/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libhello.so"

更新

https://github.com/skanti/Android-Project-Command-Line

中的解决方案

1 个答案:

答案 0 :(得分:1)

你在这里指定的路径似乎是罪魁祸首:

aapt add hellojni.apk ./lib/arm64/libhello.so

我尝试使用相同类型的路径向APK添加虚假文件,然后列出APK内容:

./aapt.exe add test.apk ./lib/libbcc.dll
./aapt.exe list test.apk

在输出中得到了这个:

./lib/libbcc.dll

即。我最终在APK的根目录中找到了一个名为.的目录,其中创建了一个lib目录,其中放置了libbcc.dll文件(我通过打开确认了这一点) APK with 7zip)。

如果我删除./

./aapt.exe add test.apk lib/libbcc.dll
./aapt.exe list test.apk

我得到了正确的结果:

lib/libbcc.dll

(我通过Windows cmd和MSys2对此进行了测试,结果相同)