zoukankan      html  css  js  c++  java
  • android打包so文件到apk

    常用有两种方法:

    1、在windows/linux下,首先把so动态库文件 编译出来(通过NDK),然后再 拷贝到android的工程里 libs/armeabi/下,如果libs/armeabi 不存在,那就自己创建,最后用eclipse编译本项目,这样将自动把so文件打包到apk里;eclipse在打包的时候会根据文件名的命名规则(lib****.so)去打包so文件,开头和结尾必须分别为“lib”和“.so”,否则是不会打包到apk文件中的。

    2、在android源码里,使用mm命令编译apk工程。

       在project根目录下创建一个Android.mk,文件内容如:

    1. LOCAL_PATH:= $(call my-dir)   
    2. include $(CLEAR_VARS)   
    3. LOCAL_MODULE_TAGS := user  
    4. LOCAL_SRC_FILES := $(call all-subdir-java-files)   
    5. LOCAL_PACKAGE_NAME := whzgj 
    6. LOCAL_JNI_SHARED_LIBRARIES := libhello-jni  
    7. include $(BUILD_PACKAGE)   
    8. include $(LOCAL_PATH)/jni/Android.mk   
    9. #include $(call all-makefiles-under,$(LOCAL_PATH)) 

    LOCAL_JNI_SHARED_LIBRARIES := libtest 就是把so文件放到apk文件里的libs/armeabi里,而include $(LOCAL_PATH)/jni/Android.mk为了编译so文件。


      Jni目录下Android.mk 里添加:

    LOCAL_PATH := $(call my-dir)

    include $(CLEAR_VARS)
    LOCAL_MODULE_TAGS := optional
    LOCAL_MODULE    := libhello-jni
    LOCAL_SRC_FILES := hello-jni.c

    include $(BUILD_SHARED_LIBRARY)

    编译出来的 共享库,会自动 添加 一个 .so 后缀,如:libhello-jni.so


    在android的java代码里添加:

        static {
            System.loadLibrary("hello-jni");//注意 千万 不要 在 前面  加 lib 后面 加 so
        } 


    把工程文件放到android source目录下,然后进入该目录,命令里输入mm,进行该工程的编译,这样编译出来的apk,在libs/armeabi文件夹里面包含so文件。


    当 编译的时候 不想 分离 apk的DEX文件,在 编译 系统里 添加 DISABLE_DEXPREOPT:=true









  • 相关阅读:
    【JS】逻辑处理
    XCODE
    mysql基础之-mysql锁和事务(七)
    mysql数据库-mysql数据定义语言DDL (Data Definition Language)归类(六)
    mysql基础-数据库表简单查询-记录(五)
    mysql基础-数据库表的管理-记录(四)
    mysql基础-数据类型和sql模式-学习之(三)
    mysql基础-数据库初始化操作必要步骤和客户端工具使用-记录(二)
    mysql基础-新版5.7.10源码安装-记录(一)
    LVS概述
  • 原文地址:https://www.cnblogs.com/liulaolaiu/p/11744746.html
Copyright © 2011-2022 走看看