吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4155|回复: 8
收起左侧

[其他转载] 【分享】AndroidStudio NDK开发

[复制链接]
SuperProgram 发表于 2016-7-26 17:29
本帖最后由 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工程

2.配置NDK

打开ProjectStructure窗口->点击SDK Location,下面的Android NDK Location 点击下载安装NDK


3.新建类NetUtil(类名可以自己随便写了),

4.编写类NetUtil内容

[Java] 纯文本查看 复制代码
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文件,若没有生成则重新编译

打开AndroidStudio的Termminal命令行窗口

cd C:\Users\Administrator\AndroidStudioProjects\app1\app\build\intermediates\classes\debug (这个路径取自己电脑上的实际路径)

执行 javah -jni demo.xgn.com.app1.NetUtil 生成头文件

会在该目录生成对应的头文件,把该文件拷贝到 main/jni目录下(如果jni目录不存在则手动新建)

接着在jni目录下新建 nettest.c文件(文件名随便写)

[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中调用NetUtil

[Java] 纯文本查看 复制代码
package 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();
                }
            });
        }


    }


}


编译并运行APK

原文可以关注我的博客 共同学习、进步。。



免费评分

参与人数 1热心值 +1 收起 理由
流月汐志 + 1 很好,收藏了!!!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

aeatho 发表于 2016-7-26 18:35
这种初级教程搬过来有什么用。百度一下一大把。浪费占用论坛资源。

点评

然而我最讨厌的就是你这样的人。与人方便就是自己的方便,就算自己是大神,自己也低调点  发表于 2016-10-31 12:41
yulewg 发表于 2016-7-26 17:54
 楼主| SuperProgram 发表于 2016-7-27 08:55
aeatho 发表于 2016-7-26 18:35
这种初级教程搬过来有什么用。百度一下一大把。浪费占用论坛资源。

如果你是大神,那么应该明白初学者怎么一步步走过来的,百度AndroidStudio NDK资料是不少,但是各种坑,不管是进阶还是基础,授人以鱼不如授人以渔。
lcylcyll 发表于 2016-7-28 13:50
SuperProgram 发表于 2016-7-27 08:55
如果你是大神,那么应该明白初学者怎么一步步走过来的,百度AndroidStudio NDK资料是不少,但是各种坑, ...

不知道楼主的博客在那里呢??
 楼主| SuperProgram 发表于 2016-7-28 14:42
lcylcyll 发表于 2016-7-28 13:50
不知道楼主的博客在那里呢??

我的博客
kingkaling37 发表于 2016-8-7 12:50
支持    good
mimi10911 发表于 2016-11-18 23:40
现在几乎零基础在学Android studio…… 好累
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-9-23 13:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表