静态库与动态库原理,编译流程,makefile走读、语法基础、Android.mk基础

编译流程:
1、预处理
2、编译
3、汇编
4、连接

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

gcc -o test test.c

直接把test.c文件 编译成 可执行文件

静态库
在这里插入图片描述

rcs
r:表示更新、增加新文件到静态库中
c:创建一个库,不管存在与否,都创建
s:创建文档索引,在创建较大的库的时候,能够加快编译时间。
在这里插入图片描述

动态库

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

生成静态库命令:
ar rcs libtool.a tool.o
生成动态库命令:
gcc -shared -fPIC -o libtool.so tool.o

什么是makefile?
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

Android.mk 介绍

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

上代码

第一步

:创建c文件
在这里插入图片描述


#include <jni.h>
int test() {
    return 123;
}

//com.example.ndk616   
//返回值int 类型  所以 jint
// Java 大写开头  用下划线拼接 包名_类名_方法名 
jint Java_com_example_ndk616_MainActivity_nativeTest() {
    return test();
}


第二步:

创建Android.mk文件

#定义模块当前路径
LOCAL_PATH := $(call my-dir)

#清空当前环境变量
include $(CLEAR_VARS)

#当前模块名
LOCAL_MODULE := hello-jni

#当前模块包含的源代码文件
LOCAL_SRC_FILES := hello-jni.c

#生成一个动态库
include $(BUILD_SHARED_LIBRARY)

第三步

app buildgradle
在这里插入图片描述

android {
    compileSdkVersion 28
    buildToolsVersion "29.0.2"

    defaultConfig {
        applicationId "com.example.ndk616"
        minSdkVersion 27
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        //指定源文件的编译方式,以及配置编译选项
        externalNativeBuild{
            ndkBuild{
                //指定cpu架构  我用的模拟器
                abiFilters "x86"
            }
        }
    }
    //配置native的编译脚本路径
    externalNativeBuild {
        ndkBuild{
            path "src/main/ndkBuild/Android.mk"
        }
    }

编译之后 可以在build文件夹下 apk文件里看到.so文件
在这里插入图片描述

第四步

android代码中加载本地库
在这里插入图片描述

public class MainActivity extends AppCompatActivity {
    {
        System.loadLibrary("hello-jni");
    }
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView tv = (TextView) findViewById(R.id.tv);
        tv.setText("nativeTest() = " + nativeTest());
    }


    //定义本地方法
    native int nativeTest();
}


在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值