注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

Android开发之三十七AndroidStudio使用NDK开发SO库并调用第三方库  

2015-08-03 18:24:11|  分类: Android |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Android开发之三十七AndroidStudio使用NDK开发SO库并调用第三方库

这里唐僧一下,你的SDK中的API的版本等级必须和NDK中的保持一致,这个在前面遇到这个问题,解决了将近一天,已经记下,这里再重复一遍。

Eclipse的工程转到AndroidStudio中开发NDKJNI,还是有一些区别的,在“Android开发之二十七AndroidStudio调用第三方SO”中有过说明,也就是说对SO库的拷贝进入的文件位置还是有区别的。

但是需要注意的是,NDK的自动编译AndroidStudio做的目前还是不如Eclipse好,但前者更胜一箸的是不用写MKMakefile文件,不过这也是好事也是坏事,在处理一些附加的编译条件时,这个还是有一些不方便,或者说让不熟悉的人得手忙脚乱一下。

以后有机会还要继续完善这方面,或者说请高人帮忙指点一下。虽然目前解决基本的问题是没有问题的,但现在还是有一些东西是不太清楚的,比如增加一些特殊的库,修改一些配置等。

最后一个就是预编译,本来这个东西是想在新的库里封装一下别人的SO,结果到后来发现,没有这个机会,它们两者之间是不搭界的,所以就只好把别人的MK拿过来展示一下:

首先需要注意的是一个MK文件可以写多个模块来生成多个目标文件:

LOCAL_SHORT_COMMANDS := true

LOCAL_PATH := $(call my-dir)
$(warning "local dir $(LOCAL_PATH)")

AK_SDK_PATH = ../../../../../aksdk
AK_INC_PATH = ../../../../aksdk

############################## Prebuilt libakuafdev.a
include $(CLEAR_VARS)

LOCAL_MODULE          := akuafdev_s
LOCAL_MODULE_FILENAME := libakuafdev
LOCAL_SRC_FILES := $(AK_SDK_PATH)/libs/$(TARGET_ARCH_ABI)/libakuafdev.a

include $(PREBUILT_STATIC_LIBRARY)

############################## Prebuilt libcrypto.a
include $(CLEAR_VARS)

LOCAL_MODULE    := crypto
LOCAL_SRC_FILES := $(AK_SDK_PATH)/libs/$(TARGET_ARCH_ABI)/libcrypto.a

include $(PREBUILT_STATIC_LIBRARY)

############################## Build libakuafdev.so
include $(CLEAR_VARS)

LOCAL_C_INCLUDES += $(AK_INC_PATH)/include

LOCAL_SRC_FILES += ak_jni.c

LOCAL_MODULE    := akuafdev
LOCAL_LDLIBS    := -lm -llog
LOCAL_LDFLAGS   += -s

# Order of static libraries is important
LOCAL_WHOLE_STATIC_LIBRARIES := akuafdev_s
LOCAL_STATIC_LIBRARIES := crypto

include $(BUILD_SHARED_LIBRARY)

Android这里把这个叫做预编译,其实你可以把它理解成提前处理一下,就简单了。意思都差不多。这样帮的目的一个是可以在库中直接调用第三方的库,另外一个部分是可以增加速度。至于Prebuilt什么个原理,怎么用,有什么好处,大家都可以去网上查。

那么如果不想使用自动生成的MK怎么办呢?

apply plugin: 'com.android.library'
apply from: "ndk_build_script.gradle"

android {
    publishNonDefault
true
   
compileSdkVersion 22
   
buildToolsVersion "22.0.0"

   
defaultConfig {
        minSdkVersion
15
        
targetSdkVersion 22
   
}

    buildTypes {
        debug {
            debuggable
true
           
minifyEnabled false
       
}
        release {
            debuggable
false
           
minifyEnabled true
           
proguardFiles file( "${rootProject.projectDir}/proguardJAR.cfg")
        }
    }

    sourceSets {
        main  {
            jni.srcDirs = [] //disable automatic ndk-build call
           
jniLibs.srcDir 'src/main/libs'
        }
    }


    tasks[
'preBuild'].dependsOn 'ndkBuild'
}

红色及注释部分可以看到,不过这样就得自己写Android.mk文件了。

不断的捡漏儿,也不知道有没有说清楚这些漏儿的痛点。努力 吧。

  评论这张
 
阅读(331)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017