我从官方存储库下载了Telegram的源代码: https://github.com/DrKLO/Telegram
我想编译应用程序并使用它除了手机中的官方电报,所以我将包名称从org.telegram.messenger
更改为org.telegram.myname
然后我不得不更改java代码中的一些引用所以我做到了。
现在应用程序编译正常,但它崩溃了这个错误:
E / art:找不到void org.telegram.myname.NativeLoader.init(java.lang.String,boolean)的实现(尝试过Java_org_telegram_myname_NativeLoader_init和Java_org_telegram_myname_NativeLoader_init__Ljava_lang_String_2Z)
我知道这是因为jni使用包名来引用c ++代码中的java方法,我可以通过更改本机代码并将其编译为.so
文件来修复它。
但是,从源代码开始运行Telegram并不困难。我错过了什么吗?做这一切有简单的方法吗?或者这是正常的吗?
答案 0 :(得分:2)
好的,这就是我的工作方式。在没有更改任何XML的干净源代码中,我向applicationID
和build.gradle
添加了applicationIdSuffix
到每种构建类型(debug,release,foss)。
现在它编译没有错误,我可以安装它除了原始的应用程序。
答案 1 :(得分:1)
失败是因为重命名了使用本机库的Java类(从org.telegram.messenger
包移动到org.telegram.myname
),但未重命名相应的本机方法。
您可以在C ++文件中重命名这些功能,这应该很容易。但没有必要这样做。您首先不需要重命名Java包。您的应用程序的Java类不需要使用应用程序清单中使用的包名称。
更改 AndroidManifest.xml 中的软件包名称可能需要使用活动和服务的全名,并在Java中修复一些导入路径。但是,将所有Java类移动到新包名称的变化要小得多。