Android JNI 第一次使用

本文详细介绍了如何在Android应用中首次使用JNI。首先讲解了NDK的配置,包括下载、解压和环境变量设置。接着,通过一个简单的示例展示了如何创建Java工程并实现JNI方法调用。在Java代码中声明native方法后,使用javah生成对应的C/C++头文件,并编写对应的C语言实现。此外,还提到了Android.mk和Application.mk文件在编译过程中的作用,以及如何执行ndk-build生成so文件。最后,文章简要分析了Android的编译系统,包括相关脚本和系统变量的使用。
摘要由CSDN通过智能技术生成

我们平时使用过so文件,也听过JNI编程,那么今天就学习简单的使用。

首先应该配置NDK,下载NDK->解压->添加到环境变量.这样就完成了简单的配置。

接着就是我们的主题application。

创建一个工程,

package com.example.myjni;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

public class MainActivity extends Activity {
private TextView tv_show;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv_show=(TextView) this.findViewById(R.id.tv_show);
        tv_show.setText(getString());
    }
    public native String getString();
    static {
    System.loadLibrary("test");
    }
}

这样就是一个简单的使用实例。然后我们在src目录下使用命令 javah com.xx.xx.MainAcitivty 这样就得到了一个.h文件,这个在编写C/C++文件时可以使用到。

#include <jni.h>

JNIEXPORT jstring JNICALL Java_com_example_myjni_MainActivity_getString
  (JNIEnv *env, jobject obj)
{
return (*env)->NewStringUTF(env,"hellowordl");
}

上面的是C语言文件,将java文件中的方法进行了实现。

同时还需要Android.mk 和Application.mk 文件 对于编译进行配置

Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    := test
LOCAL_SRC_FILES := test.c
include $(BUILD_SHARED_LIBRARY)

Application.mk

APP_ABI := ALL

然后了 就是执行编译 在工程目录下执行 ndk-build 就会生成so文件,这样就完成了整个过程,运行程序 会看到显示出了helloworld。


顺便贴上安卓编译的一些分析

1. Android编译系统分析
编译脚本及系统变量
build/envsetup.sh脚本分析
在编译源代码之前通常需要在android源代码顶层目录执行 . ./build/envsetup.sh 目的是为了使用
脚本 envsetup.sh 里面定义了一些函数:
function help()
function get_abs_build_var()
function get_build_var()
function check_product()
function check_variant()
function setpaths()
function printconfig()
function set_stuff_for_environment()
function set_sequence_number()
function settitle()
function choosetype()
function chooseproduct()
function choosevariant()
function tapas()
function choosecombo()
function print_lunch_menu()
function lunch()
function gettop
function m()
function findmakefile()
function mm()
function mmm()
function croot()
function pid()
function gdbclient()
function jgrep()
function cgrep()
function resgrep()
function getprebuilt
function tracedmdump()
function runhat()
function getbugreports()
function startviewserver()
function stopviewserver()
function isviewserverstarted()
function smoketest()
function runtest()
function runtest_py()
function godir ()

choosecombo 命令分析:
function choosecombo()
{
choosesim $1
echo
echo
choosetype $2

echo
echo
chooseproduct $3

echo
echo
choosevariant $4

echo
set_stuff_for_environment
printconfig
}
会依次进行如下选择:
Build for the simulator or the device?
1. Device
2. Simulator
Which would you like? [1] 

Build type choices are:
1. release

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值