直接调用系统中的相关函数?你是说用JAVA直接调用功能函数?没看懂

解决方案 »

  1.   

    是的,现在的项目将Android系统的关于视频渲染、音频播放的库放在了工程的jni目录下,然后在C语言层直接调用库中的函数。
    现在我的意思是:不用将这两个库放在工程的jni目录下,即程序装到真机上后直接调用Android系统底层关于视频渲染与音频播放的实现。不知道这样可以么?
      

  2.   

    工程将Android系统中关于视频渲染和音频播放的libjnivideo.so,libjniaudio.so这两个库放在了工程的jni目录下,在工程运行时可以加载这两个库,因此可以在C中直接调用这两个库中的实现。在Java中只使用了setContentView这个函数用于视频显示,解码的工作是在C语言层完成的,解码后的数据放在buffer里面,而这个buffer已经和存储要渲染的内容的buffer相关联了,即可以简单的理解为:解码后的数据可直接存储到视频渲染的buffer里,然后再调用libjnivideo.so中的函数就可以做到在屏幕显示视频画面了。现在我就不想在工程中带着这两个库,想在程序运行时直接调用Android系统底层中视频渲染与音频播放的函数,不知道这样行不行呀?
      

  3.   

    应该可以啊,用jni再封装下这些so
      

  4.   

    可能我说的不是很清楚,libjnivideo.so和libjniaudio.so在系统中已经存在了,如果可以直接使用系统中的这两个库,那么应用程序就不需要自带这两个库了。
    现在就不知道能不能直接调用Android系统的底层库?
      

  5.   

    不能,因为JNI有严格的命名限制,不通过封装JNI的JAVA类来调用的话,行不通
      

  6.   

    c可以调用系统库 但是app调用的接口必须封装
      

  7.   


    app要调用的接口已经封装好了,现在就不是很清楚在工程的C语言曾如何调用系统中的底层库了?麻烦你能能较详细的说一说如何调用系统的底层库么?谢谢了。
      

  8.   

    修改Android.mk指定链接库,c工程里加入头文件就可以调用了
    LOCAL_LDLIBS := -ljnivideo -ljniaudio参考下ndk自带的帮助文件LOCAL_LDLIBS的描述
      

  9.   

    c语言是可以这样实现的,在java上倒还真没有试过。还有一点我不明白的是,如果说现在的程序是这个样子的调用顺序 android app -> jni库 -> c库 
    那样的话只是编译上的问题,不需额外的设置,但是你那几个jni的库是永远省不掉的。
      

  10.   

    现在程序的流程就是android app—>jni库—>C库,java层只是做UI,音视频的解码,音频的播放和视频的渲染都是在C语言层做的,调用的是Android已有的库里的实现(没有直接调用Android系统的底层库,只是从android源码中编译出libjniaudio.so和libjnivideo.so这两个库,放在工程的JNI目录下)。
    请问现在能省略这两个库而在c语言层直接调用Android中的底层库么?如果不能的话,能麻烦你说说原因么?非常感谢
      

  11.   

    好的,非常感谢。
    如果这样做的话就必须在工程的JNI目录的libs文件夹里添加这两个库吗?
      

  12.   


    这两个库只要放在编译的时候可以搜索的路径上就可以了  
    编译的时候你可以指定库的搜索路径的
    LOCAL_LDLIBS :=-L$(SYSROOT)/usr/lib -ljnivideo 
    LOCAL_LDLIBS +=-L$(SYSROOT)/usr/lib -ljniaudio具体你参考下ndk自带的那个例子two-libs
    two-libs — a simple application that loads a shared library dynamically and calls a native method provided by the library. In this case, the method is implemented in a static library imported by the shared library. 
      

  13.   

    编译已经完成后,把应用程序打包为apk的时候能不能把这两个库拿出来呢?这会不会对应用程序的功能造成影响呀?
      

  14.   

    明白了,我现在就在想有没办法把这两个库省略了,直接使用Android系统中的底层库,非常感谢
      

  15.   

    之前看过一个工程。。声明好void后。用的 native 关键字当时看来还挺神奇的。。
      

  16.   

    java跟c是两种语言,他们间要合作就一定要有桥,jni就是java通向c的桥,这么可能省略的掉呢?
      

  17.   

    那两个不是jni的库,是Android的系统库,只不过放在工程的jni目录下,而且是在工程的C语言层调用这两个库的实现,java没有直接调用这两个库的实现
      

  18.   

    问题是libjnivideo.so和libjniaudio.so不同的机子不一定有的如果可以肯定系统上有这两个库可以不用拷 只要指定运行时指定下库的加载路径
    LOCAL_LDLIBS +=-Lsystem/usr/lib -ljniaudio
      

  19.   

    是在Android.mk里添加这句话吗?
      

  20.   

    QQ for pad不就在/data/data下面整了俩so么