ごきげんよう!
私は Android 用の VoIP SIP アプリケーションを開発しています (開発しようとしています)、mjsip、pjsip、および sdk のライブラリと 2 週間口論した後、JAIN-SIP に落ち着きました。理論的には、ライブラリは見栄えがします。Android のネイティブ コードや多くのドキュメントを学習する必要はありません (私はここにいるので、まだ十分ではありません)。
私の最初の試みは、Android SDK の SIP ライブラリを使用することでした (はい、それらが JSIP に基づいていることは知っています)。 SipManager.open() がサーバーとの通信用のプロファイルを開くことを拒否した後、例外やその他の種類なしで失敗しました問題の診断に役立つ出力の。(潜在的な解決策がある場合は、こちらを参照してください) mjsip と pjsip をいじった後、予定どおりにネイティブ コードを理解するには時間がかかりすぎると判断したため、JAIN は完璧な解決策のように思えました...またはそれは?
問題は、JAIN SIP ライブラリがパッケージ内で Java のコア ライブラリと同じ名前を使用しているため、dalvik で dex の問題が発生することです。しかし、OK-sipスタックソースをAndroid用に準備された単一の.jarにビルドする「ant make all-android」ソリューションがあります。間違っています。「gov.nist」パッケージのみがリファクタリングされ、「javax」パッケージは以前のままになり、同じ dalvik dex の問題が発生します。しかし、待ってください!- JarJar があり、jar を再パッケージ化してパッケージをリファクタリングし、dex の競合を解決します。違う. JarJar を使用して再パッケージ化すると、スタックが暗号化などに必要とする実際の javax.net パッケージへの参照の名前も変更され、例外やクラッシュ、あらゆる種類の問題が発生します。そのため、昨日の大半を手動で javax ライブラリのリファクタリングに費やしました。
...Caused by: java.lang.Error: Unresolved compilation problem:
だからここに私の質問があります...
- 名前の変更、再パッケージ化、およびリファクタリングを必要とせずに、箱から出してすぐに実際に動作するAndroid 対応の jain-sip ライブラリに出くわした人はいますか?
- 私のJarJarルールが間違っているのでしょうか?すべてのパッケージと「javax.sip」および「javax.sdp」への参照の名前を変更するためのルールを誰かが提供してくれますが、 「javax.net」ではありませんか?
- Android用の他のSIPライブラリはありますか(NDKまたはネイティブコードの知識は必要ありません)?
- 2014 年になっても、なぜこれが未だにこのような苦痛なのか?
PS Google ページやその他のスタックオーバーフローの質問をする前に、私がこの問題に 2 週間も悩まされていたことを考慮してください。解決策は適用されないか、機能しません。
2016 年 5 月の編集 - 受け入れられた回答は現在古くなっています。新しい解決策については、以下の joelpatrol の回答を参照してください。ここ