2015-11-06 33 views
3

我下載了電報的源代碼從官方倉庫在這裏包的名稱後: https://github.com/DrKLO/Telegram電報從源崩潰,JNI錯誤編譯改變

我想編譯應用程序,並在我的手機上使用,除了官方的電報使我將包名從org.telegram.messenger更改爲org.telegram.myname,然後我必須更改java代碼中的一些引用,所以我做了。

現在的應用程序編譯罰款,但與此錯誤崩潰:

E/art: No implementation found for void org.telegram.myname.NativeLoader.init(java.lang.String, boolean) (tried Java_org_telegram_myname_NativeLoader_init and Java_org_telegram_myname_NativeLoader_init__Ljava_lang_String_2Z)

我知道這是因爲JNI使用包名引用從C++代碼的Java方法,我可以通過改變可能修復本地代碼並將其編譯爲.so文件。

但是,這不應該是這個很難得到電報,並從源代碼運行。我錯過了什麼嗎?有這樣一個簡單的方法嗎?或者這只是正常的?

回答

2

好的,這是我如何得到它的工作。在不更改任何XML的乾淨源代碼中,我將applicationID添加到build.gradleapplicationIdSuffix到每個構建類型(debug,release,foss)。

現在它編譯沒有錯誤,我可以安裝它,除了原來的應用程序。

+0

嗨,我們在哪裏可以找到這個applicationId – Pruthviraj

1

失敗是因爲使用本機庫的Java類已重命名(從org.telegram.messenger包移到org.telegram.myname),但相應的本機方法未重命名。

您可以在C++文件中重命名這些函數,這應該很容易。但是沒有必要這樣做。您不需要首先重命名Java包。沒有要求應用程序的Java類使用應用程序清單中使用的包名稱。

更改包名的AndroidManifest.xml可能需要使用的活動和服務的全名,並固定在Java中一些進口路徑。但它比將所有Java類移動到新的包名稱更少得多。

+0

我沒有更改包,我只是修改了AndroidManifest.xml和一些導入。你認爲Android Studio可能會自動完成這項工作嗎? –

+0

它可以很容易地自動更改Java,從未親自嘗試過此路線。但是將Java類移回'org.telegram.messenger'也應該很容易處理。 –

+0

好的,我還做了其他的事情。我回到了原來的代碼,只是改變了'gradle.build'中的ApplicationID。現在我可以用一個不同的包名來編譯它,沒有錯誤。但除了原始的電報應用程序之外,我無法安裝它!任何想法,爲什麼? –