Android JNI 第一次使用

我们平时使用过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、付费专栏及课程。

余额充值