目标
创建一个原生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中的解决方案
最佳答案
您在此处指定的路径似乎是罪魁祸首:
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
文件(我通过使用7zip打开APK确认了这一点)。如果删除
./
:./aapt.exe add test.apk lib/libbcc.dll
./aapt.exe list test.apk
我得到正确的结果:
lib/libbcc.dll
(我通过Windows cmd和MSys2进行了测试,结果相同)
关于java - 仅通过命令行(makefile)创建 native android apk,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39139604/