我所说的第三方,就是我没有源代码(c/c++),只有so文件。不知道有没有方法打入apk中。我在网上也没查到方法。请高人解惑~~

解决方案 »

  1.   

    放在assets目录中,通过路径访问。
      

  2.   

    在/assets目录也可以存放资源文件,而且/assets目录下的资源文件不会在R.java自动生成ID,所以读取/assets目录下的文件必须指定文件的路径。
    如果我要用/assets/hello-jni.so这个文件,我如何设置访问路径呢
      

  3.   

    本来so这种东西就是只要知道怎么用就可以了,直接load就可以了
      

  4.   

    1. put the xx.so to a folder in the application, such as /lib/
    2. add the so to the build path
    3. use System.loadLibrary("xx") to load library.
      

  5.   

    找一个NDK的例子看看就知道了,把SO放在lib下,打包进工程,然后代码中
    static{system.loadlibrary("");}
      

  6.   

    放到lib路径里面 ,System.loadLibrary("xx")就行了
      

  7.   

    不行~~你说的是要在工程中自带jni源文件再通过ndk编译后的SO才会自动打包到apk文件,如果是第三方的so根本打不进去。
      

  8.   


    NDK是把原来一些繁琐的东西简单化了一点,
    你可以找一下在ndk出现前,工程师们如何手工打包so的文章
      

  9.   

    建议参考一下Android系统里browser部分代码,里面有个assets目录,放着浏览器需要用到的插件。运行的嘶吼会自动复制到/data/data/目录下browser的目录下,相信有参考价值。
      

  10.   

    第三方库文件直接放到工程的libs/armeabi/目录下,自然会打包到apk中。对于普通的so文件,使用System.LoadLibrary加载是不行的,必须是JNI so文件才可以
      

  11.   

    直接使用System.LoadLibrary加载是不行的,必须重新用Ndk编译,生成*.so库时用到的交叉编译工具和Ndk使用的交叉编译工具不同,所以不能运行。
      

  12.   

    Android.mk - app(apk) use c/++ and java libraryWhen you want write an android app that built with Android source, you need create an Android.mk to indicate compiler how to do that.If the app need use c/c++ & java library, the content of Android.mk is listed as below.
    dir structure :app
      |- AndroidManifest.xml
      |- Android.mk
      |- res
      |- src
      |- libs
           |- XXX.jar
           |- YYY.so
           |- Android.mk
    The first Android.mk content :    LOCAL_PATH:= $(call my-dir)
        include $(CLEAR_VARS)    ############################################################
        LOCAL_STATIC_JAVA_LIBRARIES := my-jar-lib
        LOCAL_MODULE_TAGS := eng user
        ############################################################    LOCAL_SRC_FILES := $(call all-java-files-under, src)    LOCAL_PACKAGE_NAME := DMClient    include $(BUILD_PACKAGE)    ############################################################
        include $(CLEAR_VARS)    LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \
        my-jar-lib:libs/XXX.jar    include $(BUILD_MULTI_PREBUILT)    include $(call all-makefiles-under,$(LOCAL_PATH))LOCAL_STATIC_JAVA_LIBRARIES defines the java library.LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES associates the lib name and jar file (represented by relative path) which is contributed by third party.The last line means that includes all Android.mk which locate under the current path. In that way, the second Android.mk listed as below is included.
    The second Android.mk content :
        LOCAL_PATH := $(call my-dir)    include $(CLEAR_VARS)    LOCAL_PREBUILT_LIBS := YYY.so    include $(BUILD_MULTI_PREBUILT)The first line is important that announce YYY.so located in the current directory . If you didn't declare LOCAL_PATH (the first line), compiler will go to app/ to find XXX.so instead go to app/libs/ to find due to the second Android.mk is included by the first Android.mk.
    =====================================================
    上述可以编译通过,但不会将*.so文件打包到.apk中,在第一个mk文件中,加入:
    LOCAL_JNI_SHARED_LIBRARIES := YYY