2013-04-07 168 views
0

我試圖在Android設備上運行JAIN-SIP堆棧(4.0.2)。 我能夠重新包裝所需的jar文件(jain-sip-api-1.2-src.jar,jain-sip-src-1.2.1111.jar,concurrent.jar,log4j-1.2.8.jar) 。JAIN-SIP 1.2 for Android:缺少javax.sip.STACK_NAME屬性

這是我用我的build.xml文件:

<!-- Converts this project's .class files into .dex files --> 
    <target name="-jarjar" depends="-compile"> 
     <taskdef name="jarjar" classname="com.tonicsystems.jarjar.JarJarTask" 
       classpath="buildtools/jarjar-1.4.jar"/> 
     <jarjar jarfile="${out.absolute.dir}/JainSipApi1.2_re.jar"> 
      <zipgroupfileset dir="mylib" includes="jain-sip-api-1.2-src.jar" /> 
      <rule pattern="javax.sip.**" result="[email protected]"/> 
     </jarjar> 
     <jarjar jarfile="${out.absolute.dir}/JainSipRi1.2_re.jar"> 
      <zipgroupfileset dir="mylib" includes="jain-sip-src-1.2.1111.jar" /> 
      <rule pattern="gov.nist.**" result="[email protected]"/> 
     </jarjar> 
     <jarjar jarfile="${out.absolute.dir}/concurrent_re.jar"> 
      <zipgroupfileset dir="mylib" includes="concurrent.jar" /> 
      <rule pattern="EDU.**" result="[email protected]"/> 
     </jarjar> 
     <jarjar jarfile="${out.absolute.dir}/log4j-1.2.8_re.jar"> 
      <zipgroupfileset dir="mylib" includes="log4j-1.2.8.jar" /> 
      <rule pattern="org.apache.log4j.**" result="[email protected]"/> 
     </jarjar> 
    </target> 

這是一個代碼示例,我試圖測試在沒有Android的環境中重新打包文件:

import sipper.sip.SipFactory; 
... 
sipFactory = SipFactory.getInstance(); 

sipFactory.setPathName("sipper.nist"); 
Properties properties = new Properties(); 
properties.setProperty("javax.sip.STACK_NAME", "Sipper"); 
properties.setProperty("javax.sip.IP_ADDRESS", "127.0.0.1"); 

sipStack = sipFactory.createSipStack(properties); 

當我嘗試運行此代碼時,出現以下錯誤:

Problem initializing the SIP stack. 

sipper.sip.PeerUnavailableException: Missing javax.sip.STACK_NAME property 
    at sipper.sip.SipFactory.createSipStack(SipFactory.java:144) 
    at SipLayer.<init>(SipLayer.java:86) 
    at SipperClient.main(SipperClient.java:51) 

據我瞭解,我只是改變了軟件包的名稱,但它似乎不適用於某些軟件包的「內部」。這就是爲什麼我看着源,看到有一些硬編碼字符串,如:

if (name == null) throw new PeerUnavailableException("Missing javax.sip.STACK_NAME property"); 

現在是我的問題是有沒有合適的方法/解決方案,使JAIN-SIP下Android平臺?

感謝您的幫助提前:-)

丹尼爾

回答

0

我剛看到這篇文章,遇到同樣的問題。

幾分鐘後,我成功將jain sip stack移植到Nexus 7 Android 4.1。

您問題的主要原因是「Jar」包名稱。 由於Android不支持從「javax。*」, 的包名稱導入庫,所以將jsip移植到Android平臺的第一個作業是更改導入包名稱。

而且您已經使用以下腳本將包名稱javax.sip中的一個更改爲sipper.sip。

​​

這會讓jsip產生上面提到的異常。

請先檢查link(551行〜552行)的完整源代碼。 您將看到下面的代碼。

String name = configurationProperties.getProperty("javax.sip.STACK_NAME"); 

因此,jsip只是找到屬性來獲取SIP堆棧名稱。 最後,這個問題的答案。 請將這些代碼添加到您的jsip應用程序中。

Properties properties = new Properties(); 
properties.setProperty("sipper.sip.STACK_NAME", "stack"); 

希望這可以幫助你從互聯網觀察者!