Android Studio Jni 環境搭建


第一步:NDK環境搭建,點擊下圖紅色框區域查看NDK下載和環境配置

(YQRBG7{FC_D`8[04]}P@QR

image

(5OLEVKM6V$R%3GTO]@(4O5

安照正常情況是很慢的或者無法下載成功的,這個時候可以去下載NDK壓縮包進行解壓。下面給出兩個下載地址

(1)官網:http://wear.techbrood.com/tools/sdk/ndk/

(2)社區:http://tools.android-studio.org/

下載完成解壓:如下圖

image

image

第二步:新建測試JNI示例 HelloJni  顯示C文件里面的字符串

image

新建JAVA文件NdkJniUtils並定義本地接口

image
 
然后clean project 再rebuild project 生成class文件,
 
image
 
這時候打開如下圖的文件夾看是否生成了classes文件夾,沒有生成請重新來過。
image

頭文件生成

再打開Terminal輸入指令進入debug文件夾下

image


cd app/build/intermediates/classes/debug
然后再輸入指令生成頭文件,這里javah -jni后面跟的是NdkJniUtils類的全路徑

javah -jni com.boyoi.ysj.hello.jni.NdkJniUtils
image
如果沒有報錯就說明生成頭文件成功,如果報錯請檢查環境是否配置錯誤。

這時候打開classes/debug下面的文件發現多了一個文件
com_boyoi_ysj_hello_jni_NdkJniUtils.h
然后在src/main下新建文件夾jni,把生成的.h文件復制或者剪切到jni文件夾下面去,新建一個c類隨便取一個名字,添加代碼如下

image

配置文件

(1)在gradle.properties文件末尾添加android.useDeprecatedNdk=true

(2)在app文件下得build.gradle ->defaultConfig括號內添加如下代碼

ndk {      
  moduleName "NdkJniDemo"          //生成的so名字    
   abiFilters "armeabi", "armeabi-v7a", "x86" //輸出指定三種abi體系結構下的so庫,目前可有可無。
}

image

重新build項目,發現已經沒有變紅了。接下來就是運用了,在JniUtils類里面添加如下代碼

static {      
  System.loadLibrary("HelloJNI");//之前在build.gradle里面設置的so名字,必須一致
}

測試是否成功

在 activity_main:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/test"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</RelativeLayout>

在 MainActivity:

public class MainActivity extends AppCompatActivity {

private TextView mTextView;
NdkJniUtils jni = new NdkJniUtils();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mTextView = (TextView) this.findViewById(R.id.test);

NdkJniUtils jni = new NdkJniUtils();

mTextView.setText(jni.hello());
}

運行結果:

0E9D4EE6E6136B7398B8C70EDAD426D6

另外:打開app->intermediates-ndk-debug發現生成了三個文件夾,並且對應了之前我們在build.gradle配置的abiFilters

image

 

 

注意:我也在mac下android studio 通過重復如上步湊也是成功的,下圖為證

{52C52F7D-648E-0F98-DB75-75FBA6188FE1}


 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM