我正在尝试在android设备(4.0.2)上运行JAIN-SIP堆栈。我能够重新打包所需的jar文件(java -sip-api-1.2-src.jar、java -sip-src-1.2.1111.jar、concurrent.jar、log4j-1.2.8.jar)。
这是我使用的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="sipper.sip.@1"/>
</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="sipper.nist.@1"/>
</jarjar>
<jarjar jarfile="${out.absolute.dir}/concurrent_re.jar">
<zipgroupfileset dir="mylib" includes="concurrent.jar" />
<rule pattern="EDU.**" result="sipper.EDU.@1"/>
</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="sipper.org.apache.log4j.@1"/>
</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下工作?
提前感谢您的帮助:-)
丹尼尔编写了许多原始JAIN SIP堆栈的人现在支持JAIN SIP的Android端口:
http://www.telestax.com/jain-sip-stack-for-android/我刚刚看到这篇文章,遇到了同样的问题。
几分钟后,我成功地将jain sip栈移植到Nexus 7 Android 4.1。
问题的主要原因是"Jar"包名。由于Android不支持从包名"javax. js"导入库。*",将jsip移植到Android平台的第一项工作是更改导入包的名称。
并且您已经更改了其中一个包名称javax。小口啜饮。使用以下脚本进行Sip。
<rule pattern="javax.sip.**" result="sipper.sip.@1"/>
这会使jsip产生您刚才提到的异常。
请先通过这个链接查看完整的源代码(第551~552行)。您将看到以下代码:
String name = configurationProperties.getProperty("javax.sip.STACK_NAME");
所以jsip只是找到属性来获得sip堆栈名称。最后,这个问题的答案。请在您的jsip应用程序中添加这些代码。
Properties properties = new Properties();
properties.setProperty("sipper.sip.STACK_NAME", "stack");
希望这可以帮助你和观众从互联网!!