【分享】AndroidStudio NDK开发
本帖最后由 Cizel 于 2016-7-27 00:08 编辑以前一直用Eclipse做Android开发,后来谷歌宣布停止ADT的更新了,无奈转向使用AndroidStudio这个IDE了。Android NDK开发 :使java能够调用C/C++写的SO库,其实就是Java的jni技术好处:APK破解难度增大,把核心业务逻辑写到so库里,会增加破解的门槛。先说下我的环境Windows 7 SP1 64位JDK版本java version "1.7.0_80"
AndroidStudio 1.5.1
1.新建一个Android工程http://img.blog.csdn.net/20160726164937792?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center2.配置NDK打开ProjectStructure窗口->点击SDK Location,下面的Android NDK Location 点击下载安装NDK
3.新建类NetUtil(类名可以自己随便写了),http://img.blog.csdn.net/20160726165428237?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center4.编写类NetUtil内容package demo.xgn.com.app1;
/**
* Created by Administrator on 2016/7/26.
*/
public class NetUtil {
static {
System.loadLibrary("NetUtil"); //这里的NetUtil是底层So库的名称
}
public native String getNetResult(); //熟悉java的jni编程的同学,一看就知道了,这是本地方法,对应so库里的方法
}
编译项目Build->Make Module 'app'
查看intermediates\classes\debug 目录下是否生成NetUtil.class文件,若没有生成则重新编译http://img.blog.csdn.net/20160726170842255?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center打开AndroidStudio的Termminal命令行窗口cd C:\Users\Administrator\AndroidStudioProjects\app1\app\build\intermediates\classes\debug (这个路径取自己电脑上的实际路径)执行 javah -jni demo.xgn.com.app1.NetUtil 生成头文件
会在该目录生成对应的头文件,把该文件拷贝到 main/jni目录下(如果jni目录不存在则手动新建)http://img.blog.csdn.net/20160726171334335?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center接着在jni目录下新建 nettest.c文件(文件名随便写)//
// Created by Administrator on 2016/7/26.
//
#include "demo_xgn_com_app1_NetUtil.h"
JNIEXPORT jstring JNICALL Java_demo_xgn_com_app1_NetUtil_getNetResult
(JNIEnv *env, jobject obj){
return (*env)->NewStringUTF(env,"Android NDK编程");
}
编辑 local.properties 文件添加 NDK路径(AndroidStudio会在安装NDK后自动添加的)
ndk.dir=C\:\\Users\\Administrator\\AppData\\Local\\Android\\sdk\\ndk-bundle编辑项目下的build.gradle找到 defaultConfig 在它里面添加
ndk { moduleName "NetUtil" //生成的so名字(这个So库名称要与NetUtil中载入的库名称一致)}编译并运行APK
在Activity中调用NetUtilpackage demo.xgn.com.app1;
import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.util.logging.Handler;
public class MainActivity extends Activity {
private Button btn1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.btn1=(Button)this.findViewById(R.id.btn1);
if(btn1!=null){
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
NetUtil nu=new NetUtil();
Toast.makeText(MainActivity.this,nu.getNetResult(),Toast.LENGTH_LONG).show();
}
});
}
}
}
编译并运行APKhttp://img.blog.csdn.net/20160726172134526?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center原文可以关注我的博客 共同学习、进步。。
这种初级教程搬过来有什么用。百度一下一大把。浪费占用论坛资源。 先收藏了,以后再学习 aeatho 发表于 2016-7-26 18:35
这种初级教程搬过来有什么用。百度一下一大把。浪费占用论坛资源。
如果你是大神,那么应该明白初学者怎么一步步走过来的,百度AndroidStudio NDK资料是不少,但是各种坑,不管是进阶还是基础,授人以鱼不如授人以渔。 SuperProgram 发表于 2016-7-27 08:55
如果你是大神,那么应该明白初学者怎么一步步走过来的,百度AndroidStudio NDK资料是不少,但是各种坑, ...
不知道楼主的博客在那里呢?? lcylcyll 发表于 2016-7-28 13:50
不知道楼主的博客在那里呢??
我的博客 支持 good 现在几乎零基础在学Android studio…… 好累
页:
[1]