Ubuntu开发环境搭建(5)【Android-JNI开发环境 (windows10+ubuntu16.04)】

Android-JNI开发环境 (windows10+ubuntu16.04)


系统环境
* windows10(64位)
* Ubuntu16.04(32位)
* 相关安装包:jdk-8u131-linux-i586.tar.gz、android-sdk_r24.4.1-linux.tgz、android-ndk-r8b-Linux-x86.tar.bz2

* 安装包下载链接

1.安装JDK (Ubuntu)

  • 下载jdk:jdk-8u131-linux-i586.tar.gz
  • 解压:sudo tar -zxvf jdk-8u101-linux-x64.tar.gz
  • 移动到指定文件夹:sudo mv /jdkjdk1.8.0_101 /usr/java
  • 设置环境变量,vim ~/.bashrc,在最后添加:
JAVA_HOME=/usr/java/jdk1.8.0_131
JRE_HOME=$JAVA_HOME/jre
JAVA_BIN=$JAVA_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME PATH CLASSPATH
  • 使得环境变量生效:source ~/.bashrc
  • 验证:java -version,打印java信息,如果没有反应,尝试关闭当前终端,或者重启
    image

2.安装NDK (Ubuntu)

  • 下载nkd:android-ndk-r8b-Linux-x86.tar.bz2
  • 解压:tar -jxvf android-ndk-r8b-Linux-x86.tar.bz2
  • 移动到指定文件夹:sudo mv android-ndk-r8b /usr/local/ndk
  • 设置环境变量,vim ~/.bashrc,在最后添加:
NDK_HOME=/usr/local/ndk/android-ndk-r8b
export NDK_HOME
export PATH=$PATH:$NDK_HOME
  • 使得环境变量生效:source ~/.bashrc
  • 验证:ndk-build,打印ndk信息,如果没有反应,尝试关闭当前终端,或者重启
    image

3.安装sdk (ubuntu) 【注:Ubuntu中仅仅安装SDK】

  • 下载:android-sdk_r24.4.1-linux.tgz
  • 解压:tar -zxvf android-sdk_r24.4.1-linux.tgz
  • 移动到指定文件夹:sudo mv android-sdk-linux /opt
  • 设置环境变量,vim ~/.bashrc,在最后添加:
ANDROID_HOME=/opt/android-sdk-linux
export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform:$ANDROID_HOME/platform_tools
  • 使得环境变量生效:source ~/.bashrc
  • 验证:android,弹出Android SDK Manager的对话框,如果不行,尝试重启
    image
  • 选择下载相关文件
Android SDK Tools 24.4.1
Android SDK Platform-tools 25.0.6
Android SDK Build-tools 24.0.3
Android6.0文件夹中:SDK Platform 23、Google APIs、Sources for Android SDk
//注:这里主要下载Android6.0的文件,电脑容量大网速快的话可以都下载。Image文件主要用于模拟器,相对较大,如果不用模拟器的话不用下载,

4.安装adb (Ubuntu)

  • sudo apt install android-tools-adb
  • 需要用到的命令:
adb devices // 查看电脑连接的安卓设备,插上设备后,执行这个命令,能够list相关设备
adb root // 获取root权限
adb shell // 进入安卓设备的shell环境,进去后可输入linux支持的命令
adb remount // 将设备设为可读可写
adb push ~\drivers\hello.ko data/fpga // 需要拷贝到能够读写的文件夹
  • 打开手机的开发者选项,勾选USB调试,插上电脑,电脑能够自动识别设备
  • 输入命令:adb devices,如下图所示:

image

5.搭建Android应用程序开发环境 (Windows) - 基于Eclipse

  • 安装JDK,配置环境变量,个人安装的是JDK1.7
  • 下载并安装Eclipse
  • 安装ADT,网上教程很多,不再赘述,需要用到翻墙软件(推荐蓝灯)
  • 打开Eclipse中的Android SDK Manager,安装如图所示选中的文件:
    image
  • 打开Eclipse中的Android Virtual Device Manager,创建一个新的模拟器,参数设置如图所示:
    image
  • 单击start即可运行模拟器,运行很慢,所以建议用自己的手机或者平板进行调试
  • 运用手机进行安卓调试:参考网上教程,不在赘述。

6.JNI的实现

6.1 新建Android Application Project

  • project的相关信息:
Project:JNITest
Package: com.cong.jni
Activity:JNITest
  • 编辑res/values/strings.xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">JNITest</string>
    <string name="hello_world">Hello world!</string>
    <string name="action_settings">Settings</string>

    <string name="hello">HelloWorld, JNITestActivity</string>  
    <string name="btn_show">Show</string>  

</resources>
  • 编辑res/layout/main.xml文件如下,添加了一个EditText控件和一个Button控件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:orientation="vertical">  
    <TextView  
    android:layout_width="fill_parent"  
    android:layout_height="wrap_content"  
    android:text="@string/hello"/>  
    <EditText  
    android:id="@+id/ed_name"  
    android:layout_width="match_parent"  
    android:layout_height="wrap_content"  
    android:layout_gravity="center_horizontal"  
    android:layout_marginLeft="5dp"  
    android:layout_marginRight="5dp"/>  
    <Button  
    android:id="@+id/btn_show"  
    android:layout_width="109dp"  
    android:layout_height="wrap_content"  
    android:layout_gravity="center_horizontal"  
    android:text="@string/btn_show"/>  

</LinearLayout>
  • 编辑JNITest.java文件:
package com.cong.jni;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class JNITest extends Activity {

    // 表示系统第一次加载类的时候,先执行这段代码,这里表示加载动态链接库JNITest.so
    static{  
        System.loadLibrary("JNITest");  
        }  

    private native String GetReply(); // native表示这个方法由本地代码定义,需要通过jni接口调用本地c/c++代码。
    private EditText edtName;
    private Button btnShow;
    String reply;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_jnitest);
        reply= GetReply();

        edtName= (EditText)this.findViewById(R.id.ed_name);  
        btnShow= (Button)this.findViewById(R.id.btn_show);  

        btnShow.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                // TODO Auto-generated method stub
                edtName.setText(reply);  //这段代码表示点击按钮后,把native方法的返回的字符串显示到EditText控件。
            }
        });
    }
}
  • 编译工程,生成.class文件,如果这个时候将程序放到手机上调试会出现闪退的现象,查看输出的错误日志,这是正常的。

6.2用javah工具生成符合JNI规范的C语言头文件

  • 将生成的project拷贝到Ubuntu中
  • 进入工程目录:cd ~/workspace/android_workspace/JNITest
  • 新建jni文件夹:mkdir jni
  • 执行命令:
javah -jni -classpath /opt/android-sdk-linux/platforms/android-23/android.jar:bin/classes/ -d jni/ com.cong.jni.JNITest
// android.jar的路径:/opt/android-sdk-linux/platforms/android-23/android.jar
// class的路径:bin/classes/
// 生成头文件的目标路径:jni/
  • 在jni/目录中将会有com_cong_jni_JNITest.h文件

6.3编写C/C++代码

  • 代码放在与生成的头文件同一目录jin/下
  • 文件com_cong_jni_JNITest.c如下:
#include<jni.h>  

#include<string.h>  

#include"com_cong_jni_JNITest.h"  

JNIEXPORT jstring JNICALL Java_com_cong_jni_JNITest_GetReply  

(JNIEnv *env, jobject obj){  

    return(*env)->NewStringUTF(env,(char*)"Hello,JNITest");  

}  

6.4编写Android.mk文件

  • 代码放在与生成的头文件com_cong_jni_JNITest.h同一目录jin/下
  • 文件Android.mk如下:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libJNITest
LOCAL_SRC_FILES:= com_cong_jni_JNITest.c
include $(BUILD_SHARED_LIBRARY)

#pay attention to no space after per row
  • LOCAL_MODULE表示编译的动态库名、LOCAL_SRC_FILES 表示源代码文件
  • 此时jni/文件夹中的文件:
    image

6.5用ndk工具编译并生成.so文件

  • 进入工程目录:cd ~/workspace/android_workspace/JNITest
  • 执行命令:ndk-build,如图所示:
    image
  • 然后libs/armeabi目录下生成了libJNITest.so文件:
    image
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值