如何编译电报jni文件夹

时间:2016-01-12 14:00:17

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

我正在尝试使用ndk编译github.com/DrKLO/Telegram/中的电报源代码中的jni文件夹

但是当我在ndk文件夹中的cmd中编写ndk-build时 像:

  

F:\ ndk \ android-ndk-r10> ndk-build -C F:\ Workspace \ Android \ Telegram-master-1-12-2016 \ Telegram-master \ TMessagesProj \ jni

我收到一些错误,并且没有创建libs文件夹

当我向Android工作室添加ndk路径并手动添加jni文件夹时android工作室说找不到一些头文件

按照question下载Cygwin并使用它,但再次出现此错误,如ndk-build

$ndkbuild
  

[armeabi] SharedLibrary:libtmessages.15.so

     

process_begin:CreateProcess(........,

     

F:/ NDK /机器人-NDK-R10 /源/ CXX-STL / GNU-的libstdc ++ / 4.8 /库/ armeabi        /thumb/libgnustl_static.a -lgcc -no-canonical-prefixes        -Wl, - no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now        -LF:/ NDK / Android的NDK-R10 /平台/ android-         9 / arch-arm / usr / lib -ljnigraphics -llog -lz -ldl -lc -lm -o        F:/工作区/安卓/        电报主-2016年1月12日/电报主/ TMessagesProj // OBJ /本地/ armeabi / libtm        essages.15.so,...)失败

     

make(e = 87):参数不正确。

     

make.exe:*** [F:/Workspace/Android/Telegram-master-1-12-2016/Telegram-master/TMessagesProj//obj/local/armeabi/libtmessages.15.so]错误87 < / p>

如何解决这个问题?

3 个答案:

答案 0 :(得分:14)

重要更新问题: 在3.18版本中,下载电报源项目后,如果你去jni文件夹,你会发现并清空名为libtgvoip的文件夹,用所需的文件填充它: 1-从githum转到电报源,转到jni文件夹并单击libtgvoip @ eb813e1文件夹(@表示这是一个refrence文件夹)。 2-也下载该库! 3-将其内容复制到前面讨论的空文件夹中!

现在开始吧: 很容易。

1-将NDK目录添加到环境PATH变量。

2-打开Android.mk并添加以下行: LOCAL_SHORT_COMMANDS:= true

enter image description here

3-打开Application.mk并添加以下行: APP_SHORT_COMMANDS:= true

enter image description here

以管理员身份打开命令提示符并导航到jni文件夹,如下所示: (重要的是:在最后一个版本的电报中你应该导航到jni父文件夹而不是jni文件夹)

enter image description here

5-只执行ndk-build命令

enter image description here

然后ndk将开始构建.so文件:

enter image description here

等到完成任务后,可能会显示一些警告但不重要。最后,您将在obj目录中拥有所有共享库(.so文件): (重要的是:在最后一个版本的电报.so文件将在lib文件夹中创建,一切都准备好了)

enter image description here

然后转到每个文件夹并删除除libtmessages.22.so之外的所有内容。 创建一个libs文件夹并将三个目录复制到其中:

enter image description here

建立并享受乐趣! (记得用你的app id和app_hash填写org.telegram.messenger.BuildVars类中的变量。read more here

答案 1 :(得分:1)

只需删除目标文件即可。 在上一次构建中断并且未完全生成目标文件之后,很可能出现此错误。 enter image description here

答案 2 :(得分:0)

下载android-ndk然后转到Project目录(./TMessagesProj)并执行ndk-build。 然后重新运行将本机库打包到apk中的gradle构建。