一、Debug調(diào)試效果
DEBUG.png
二伞广、配置JNI調(diào)試環(huán)境
2.1 配置build.gradle
build.png
只需配置android標(biāo)簽節(jié)點(diǎn)下的buildTypes
buildTypes{
debug{
jniDebuggable true
jniDebuggable = true
}
}
2.2 配置AndroidManifest屬性
android:debuggable="true"
<application android:label="@string/app_name"
android:debuggable="true">
<activity android:name=".HelloJni"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
2.3 配置Run/Debug configurations
config.png
- 選擇run下拉item减拭,選Edit Configurations,彈出配置窗體
- 點(diǎn)擊?新建 configuraionts,選android native條目
- 配置下native執(zhí)行的名稱(chēng)如:hellojniNative.
- 選擇真機(jī)或模擬器調(diào)試.
三拧粪、code
源碼取的是ndk目錄下hellojni demo可霎,可以自行去獲取
3.1 java code
public native String stringFromJNI();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/* Create a TextView and set its content.
* the text is retrieved by calling a native
* function.
*/
final TextView tv = new TextView(this);
tv.setText("點(diǎn)擊調(diào)用方法");
tv.setTextSize(100);
tv.setClickable(true);
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// start(tv);
tv.setText(stringFromJNI());
}
});
setContentView(tv);
}
3.2 natvie code
jstringJava_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
jobject this )
{
#if defined(__arm__)
#if defined(__ARM_ARCH_7A__)
#if defined(__ARM_NEON__)
#if defined(__ARM_PCS_VFP)
#define ABI "armeabi-v7a/NEON (hard-float)"
#else
#define ABI "armeabi-v7a/NEON"
#endif
#else
#if defined(__ARM_PCS_VFP)
#define ABI "armeabi-v7a (hard-float)"
#else
#define ABI "armeabi-v7a"
#endif
#endif
#else
#define ABI "armeabi"
#endif#elif defined(__i386__)
#define ABI "x86"#elif defined(__x86_64__)
#define ABI "x86_64"#elif defined(__mips64)
/* mips64el-* toolchain defines __mips__ too */
#define ABI "mips64"#elif defined(__mips__)
#define ABI "mips"#elif defined(__aarch64__)
#define ABI "arm64-v8a"#else
#define ABI "unknown"#endif
return (*env)->NewStringUTF(env, "Hello from JNI ! Compiled with ABI " ABI ".");
}