android studio生成静态库没有*.a目标文件问题

使用android studio的cmakelists.txt方法生成C++的jni静态库在网上查找了很多帖子,基本上都是讲到通过add_library()修改第二个参数将SHARED修改为STATIC就表示将目标文件由动态库改变为静态库。如下,

add_library(native-lib 
STATIC
calcul.cpp
)

但是我在上述修改后编译并没有得到目标*.a文件。但是修改为SHARED编译是可以得到动态库目标*.so文件。就是感觉修改为STATIC后参数没起作用。后来看到一位网友说另有一处要修改才成功,现在记录如下。因为android studio中各版本号也很容易困扰开发人员,所以这里我会标出我用的版本。小蜜蜂2021版本

这里尽可能截图下每个过程,就不逐个描述了。 

1.创建工程

 

2.添加CPP文件

在工程路径中新建app/cpp/calcul.cpp文件,这些内容也是网友们提供的实例代码。

#include <jni.h>
#include "include/calcul.h" //引用头文件,相当于java中实现接口,头文件为接口,本cpp为实现

int add(int a , int b){
    return a + b;
}

新建文件件include和文件calcul.h

//
// Created by Administrator on 2022/10/15.
//

#ifndef JNITEST_CALCUL_H
#define JNITEST_CALCUL_H

int add(int a , int b);

#endif //JNITEST_CALCUL_H

CMakeLists.txt文件中添加calcul.cpp。

3.版本同步问题

我的gradle版本是7.2。有些低版本的Gradle Version还需求配置其上方的Android Gradle Plugin Version就是Gradle插件,而7.2可以不用。

开始编译出现JAVA版本过低提示,需要升级到Java 11版本。

如下方式修改调用的java版本。

 4.生产动态库*.so

系统默认add_library配置参数是SHARED,所以先生产动态库。可以看到在左侧的工程栏中已经生成了目标文件libmyappication.so文件。根据网友的提示生成动态库基本都没有问题。

5.生成静态库*.a 

修改CMakeLists.txt文件。

1、将add_library参数SHARED修改为STATIC。

2、屏蔽掉native_lib.cpp。

只修改上面两点后编译实际没有看到输出目标文件。还要修改build.gradle文件。

在cmake中添加参数targets 'myapplication'。引号中的名称就是我们要输出库的文件名称。

在进行编译后就可以在左侧的工程栏看到对应的静态库输出文件libmyapplication.a

 

 

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值