256.Android Studio 引入libcurl

在Android上部署libcurl.a
1 将对应平台的  libcurl.a 放在JNI文件夹中。   还有curl/整个文件夹(.h头文件) 也放在JNI路径,拷贝适合自己手机的libcurl.a文件到jni目录下,比如手机是arm的虚拟机是x86的

                                         

2.这个时候需要将新增加的libcurl.so也编译生成,将jni生成的so文件 一起联通libcurl.a一起编译,需要修改Android.mk文件,新增加的代码如下:

include $(CLEAR_VARS)

# libcurl.a
LOCAL_MODULE := libcurl
LOCAL_SRC_FILES := libcurl.a
include $(PREBUILT_STATIC_LIBRARY)

也需要新增加,因为需要依赖到新生成的libcurl

LOCAL_STATIC_LIBRARIES := libcurl

修改以后的Android.mk文件如下:


LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# libcurl.a
LOCAL_MODULE := libcurl
LOCAL_SRC_FILES := libcurl.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE := FunUtils
LOCAL_SRC_FILES := FunUtils.cpp login.cpp cJSON.CPP
LOCAL_LDLIBS := -llog -lz
LOCAL_STATIC_LIBRARIES := libcurl

include $(BUILD_SHARED_LIBRARY)

3 修改AndroidStudio配置文件,在项目/app/build.gradle,在defaultConfig {}下面增加下面的文件

// 不声明ndk标签,项目默认会创建一个libapp.so的文件
ndk {
	// 声明创建so库的文件名,会自动添加lib前缀, 添加了前缀,不会自动添加
	moduleName "FunUtils"

	//声明启用Android日志, 在c/c++的源文件中使用的#include <android/log.h> 日志将得到输出
	//这里我们关联了两个库 一个是liblog 和 libz
	ldLibs "log","z"

	// 声明创建指定cpu架构的so库, 不声明的话, 默认(gradle 1.5.0)会生成7中架构,如果你的libcurl没有提供别的平台,那么就会链接失败,
	//所以此条配置很重要,这里我们只生成一个平台
	abiFilters "armeabi"
}

截图如下:

也需要修改Android.mk文件,新增一个依赖so“-lz”

LOCAL_LDLIBS := -llog -lz

修改后的Android,mk如下:


LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

# libcurl.a
LOCAL_MODULE := libcurl
LOCAL_SRC_FILES := libcurl.a
include $(PREBUILT_STATIC_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE := FunUtils
LOCAL_SRC_FILES := FunUtils.cpp login.cpp cJSON.CPP
LOCAL_LDLIBS := -llog -lz

include $(BUILD_SHARED_LIBRARY)

4  在JNI路径下 添加Application.mk文件
在文件中添加如下代码 表示当前ndk_build 过滤平台结果,这样就只编译arm平台下面的

APP_ABI = armeabi

如果是all那就所有的都编译,生成一堆文件

APP_ABI := all

5 在login.cpp中添加#include "curl/curl.h",在login的jni接口中随便调用curl代码

CURL* curl = curl_easy_init();

点击SYnc Now

6 ndk_build.cmd 重新生成so文件 看是否能够编译成功

7 部署在app手机上,点击一下登陆按钮。如果app不崩溃 环境通了。

安装的时候可能的错误提示:

1.安装过程中遇到了下面的错误,是因为之前都是设置的armeabi,将所有的Anrdoid.mk,/app/build.gradle,,Application.mk引入的so都换成“armeabi-v7a”问题解决:

D:\Code\Code_for_androideclipse2019\01hello\app\src\main\jni>ndk-build.cmd
Android NDK: APP_PLATFORM not set. Defaulting to minimum supported version android-16.
Android NDK: WARNING: APP_PLATFORM android-16 is higher than android:minSdkVersion 1 in D:/Code/Code_for_androideclipse2019/01hello/app/src/main/AndroidManifest.xml. NDK binaries will
*not* be compatible with devices older than android-16. See https://android.googlesource.com/platform/ndk/+/master/docs/user/common_problems.md for more information.
Android NDK: The armeabi ABI is no longer supported. Use armeabi-v7a.
Android NDK: NDK Application 'local' targets unknown ABI(s): armeabi
Android NDK: Please fix the APP_ABI definition in D:/Code/Code_for_androideclipse2019/01hello/app/src/main/jni/Application.mk
C:/Users/Administrator/AppData/Local/Android/Sdk/ndk-bundle/build//../build/core/setup-app.mk:79: *** Android NDK: Aborting    .  Stop.

截图如下:

APP_ABI := armeabi-v7a

2.ndk-build.cmd成功但是启动app失败,是因为虚拟机的是X86需要将所有的信息修改成X86的进行编译才行

错误提示如下:

2019-10-16 07:29:53.358 1640-1640/? D/AndroidRuntime: >>>>>> START com.android.internal.os.RuntimeInit uid 0 <<<<<<
2019-10-16 07:29:53.360 1640-1640/? D/AndroidRuntime: CheckJNI is OFF
2019-10-16 07:29:53.386 1640-1640/? W/art: Unexpected CPU variant for X86 using defaults: x86
2019-10-16 07:29:53.389 1640-1640/? D/ICU: No timezone override file found: /data/misc/zoneinfo/current/icu/icu_tzdata.dat
2019-10-16 07:29:53.406 1640-1640/? E/memtrack: Couldn't load memtrack module (No such file or directory)
2019-10-16 07:29:53.407 1640-1640/? E/android.os.Debug: failed to load memtrack module: -2
2019-10-16 07:29:53.408 1640-1640/? I/Radio-JNI: register_android_hardware_Radio DONE
2019-10-16 07:29:53.417 1640-1640/? D/AndroidRuntime: Calling main entry com.android.commands.am.Am
    
    --------- beginning of system
2019-10-16 07:29:53.420 522-736/system_process I/ActivityManager: Force stopping com.ldw.hello appid=10063 user=0: from pid 1640

截图如下:

APP_ABI := x86

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值