我已经从以下存储库构建了Wire应用程序: https://github.com/wireapp/wire-android
使用以下构建说明:
如何在本地构建检出wire-android存储库。切换到 最新的relase分支发行版从checkout文件夹中,运行./gradlew assembleProdRelease。这将获取所有必要的依赖项 来自Maven。
我尝试了发布分支:
git clone https://github.com/wireapp/wire-android.git --branch release
和主人:
git clone https://github.com/wireapp/wire-android.git
最初两个版本都给出了错误:
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.lang.UnsatisfiedLinkError: Error looking up function 'wcall_set_video_send_state': undefined symbol: wcall_set_video_send_state
at com.sun.jna.Function.<init>(Function.java:245)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:566)
但是,可以通过在Android Studio中打开项目之前运行以下命令来解决此错误:
gradlew assembleProdRelease
此命令还会在build / output / apks中创建apk。但是,该构建没有使用发布或调试密钥进行签名。我使用以下工具对apk进行签名: https://github.com/patrickfav/uber-apk-signer/releases
APK稳定且可以正常运行,但仍无法发起视频通话。它给出了以下错误:
Android 5:
08-24 22:53:29.877 296-881 /? E / FastThread:未收到预期 优先提升
Android 8:
08-24 23:10:02.190 406-4592 /? E / AudioALSAPlaybackHandlerBase: -getHardwareBufferInfo(),pcm_get_htimestamp失败,ret = -1,pcm_get_error =
Android 9模拟器:
08-25 19:56:58.425 1583-3268 /? W / audio_hw_generic:不提供 足够的数据发送给HAL,预期位置4108693,仅写入4108320
更新:
我考虑过尝试构建自己的AVS库版本:遵循https://github.com/wireapp/wire-audio-video-signaling
需要运行以下命令:
make dist_android
C:\ work \ wire-audio-video-signaling>制作dist-android mk / target.mk:167: ***未知的主机系统。停止。
mk / target.mk看起来像:
# Start by auto-determining host system and arch.
ifeq ($(HOST_OS),)
HOST_UNAME := $(shell uname)
ifeq ($(HOST_UNAME),Darwin)
HOST_OS := osx
else
ifeq ($(HOST_UNAME),Linux)
HOST_OS := linux
else
$(error Unknown host system)
endif
endif
endif
Makefile似乎没有设置为支持Windows,因此我将尝试从Linux机器上构建它,看看是否有帮助。
更新2:
它在Ubuntu上确实可以更好地构建,但最终因抱怨编译器参数而死。 [抱歉我没有错误]
但是我设法在这里找到为Android / ARM构建的库的二进制副本: http://dl.bintray.com/wire-android/releases/com/wire/avs/
但是,这些库似乎也无法解决问题。
更新3:
尝试了以下内容:
但是我得到了错误:
程序类型已存在:com.waz.avs.VideoCapturer $ 4 消息{种类=错误,文本=程序类型已存在: com.waz.avs.VideoCapturer $ 4,来源= [未知源文件],工具 name = Optional.of(D8)}
如果您指出该错误将消失,则下面还会引用AVS库。
但是,这些步骤都不能解决问题。
现在,我将尝试构建发行分支的旧版本...
更新4:发行分支:2.41.359 [最新的非beta标签发行版]
08-25 14:51:02.142 29066-29109 /? E / AndroidRuntime:致命异常: 线程4 工艺:电线,PID:29066 java.lang.NullPointerException:尝试在空对象上调用接口方法'int com.waz.call.RequestHandler.request $ 1d4ff469()' 参考 在com.waz.call.FlowManager.request(FlowManager.java:365)
注意:似乎编辑设备屏幕不是问题的原因,因为我删除了Web应用程序中的所有设备,但是2.41.359在手机上崩溃而未显示编辑设备屏幕。
以下线程中提到了此问题:
由于提供的文件不足以运行项目,因此建议使用生产版本中的avslib.so文件。
因此,我已经从他们的网站上下载了APK: https://wire.com/en/download/
它的版本:3.15.634 [比应用商店中的版本还早:3.16.638,尽管希望没关系]。
对于任何不知道的人,APK只是一个ZIP文件,因此为了获得libavs.so,我将其从.apk重命名为.zip:
解压libavs.so后,我将构建工具生成的未签名版本的wire-prod-release-2.41.99999重命名为wire-prod-release-2.41.99999-avs-mod.zip并删除了旧的libavs .so并将其替换为我刚刚从该应用的正式版中获取的那个。我将其重命名为.pkg,然后运行以下命令对其进行签名:
java -jar \uber-apk-signer-0.8.4.jar --apks wire-prod-release-2.41.99999-avs-mod.apk -debug
相当不错的结果,2.41.359不再崩溃。但是,我仍然无法发起任何音频或视频通话。在最新版本的发行分支中发现相同的错误:
08-25 16:01:51.748 406-4592/? E/AudioALSAPlaybackHandlerBase: -getHardwareBufferInfo(), pcm_get_htimestamp fail, ret = -1, pcm_get_error =
作为一个健全性检查,我安装了生产版本:3.15.634(用于额外的libavs.so),它能够进行音频和视频通话。 [GooglePlay上的版本:3.16.638也可以很好地用于音频和视频...]
有什么想法吗?
答案 0 :(得分:1)
经过几天的尝试,我找到了一种构建项目的方式,可以启动音频和视频通话:
程序:
<?xml version="1.0" encoding="utf-8"?>
移至版权注释上方,因为该文件必须以XML标记开头其他说明:
想法:
我不太确定这个项目正在发生什么。有开发人员恳求在Git上解决音频/视频问题时反应不佳。我认为,除非有更多的稳定性和支持,否则我对于将这个代码用于商业项目会感到有些不安。
答案 1 :(得分:0)
我放弃了从源代码编译可运行的应用程序。除了教育上的原因外,我从源代码进行编译的动机是特定的代码更改(因为我拥有超过2个,因此取消了android应用程序中同时帐户的限制)
进行更改本身是微不足道的,它只是在 app / src / main / scala / com / waz / zclient / pages / main / profile / preferences / pages / ProfileBottomSheetDialog.scala:
val MaxAccountsCount = 2
但是,由于无法从提供的源中构建可用的应用程序-即使付出了很大的努力-我改为使用
的smali / backsmali工具
https://github.com/JesusFreke/smali
在源代码构建的已修改和未修改(非功能性)二进制应用程序之间创建此特定代码更改的补丁/差异-反映字节码中的相应更改。 (尽管可以使用apktool来做同样的事情)
此字节码补丁程序也可以使用smali / backsmali(或apktool)应用到预编译且功能齐全的生产应用程序中