Android NDK JNI 入门笔记-day01-创建项目并运行
创建项目
1. 选择一个项目模板
Native C++
2. 配置我们的项目
Name
Package name
Save location
Language
Minimum SDK
3. Customize C++ Support
C++ Standard
4. 查看第一个 NDK-JNI 项目
build.gradle
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
defaultConfig {
applicationId "com.ihubin.ndkjni"
......
}
buildTypes {
......
}
externalNativeBuild {
cmake {
path "src/main/cpp/CMakeLists.txt"
version "3.10.2"
}
}
}
dependencies {
......
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.4.1)
add_library(
native-lib
SHARED
native-lib.cpp )
find_library(
log-lib
log )
target_link_libraries(
native-lib
${log-lib} )
native-lib.cpp
#include <jni.h>
#include <string>
extern "C" JNIEXPORT jstring JNICALL
Java_com_ihubin_ndkjni_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
MainActivity.java
package com.ihubin.ndkjni;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
static {
System.loadLibrary("native-lib");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = findViewById(R.id.sample_text);
tv.setText(stringFromJNI());
}
public native String stringFromJNI();
}
运行项目
修改 C++ 代码,重新运行
#include <jni.h>
#include <string>
extern "C" JNIEXPORT jstring JNICALL
Java_com_ihubin_ndkjni_MainActivity_stringFromJNI(
JNIEnv* env,
jobject /* this */) {
// std::string hello = "Hello from C++";
std::string hello = "NDK-JNI-day01";
return env->NewStringUTF(hello.c_str());
}
可以看到,我们修改的 C++ 代码已经生效了。
查看 APK
至此,我们已经学会了在 Android 项目中使用 C++ 代码。
代码:
参考资料:
3 声望
4 粉丝
推荐阅读
音视频入门-20-BMP、PNG、JPG、GIF静态图生成GIF动态图
音视频入门文章目录 静态图 -> 动态图前面 【18-手动生成一张GIF图片】 和 【19-使用giflib处理GIF图片】 生成的 GIF 每一帧都是一个颜色,平时用到的 GIF 每一帧都是图片,下面就做一张每一帧都是图片的 GIF...
binglingziyu阅读 1.2k
如何用3D流体实现逼真水流效果?
华为应用市场在2022年HDC大会期间发布了一款3D水流主题,基于华为HMS Core Scene Kit服务能力,展现立体灵动的水流岛屿,可跟随用户指尖实现实时流体波动效果,既趣味又解压。
HMSCore赞 1阅读 2k
Android桌面图标快捷方式
长按桌面图标实现快捷方式最早是iOS提供的功能,而Android最早在Android 7.1版本也提供了对这方面的支持,于是在短时间内,像微信,支付宝,头条等流量级应用都提供了这方面的支持,如下图。
xiangzhihong赞 2阅读 590
2022 年终总结|致敬即将过去的,匆忙而又虐心的一年...
本文参与了 SegmentFault 思否年度征文「一名技术人的 2022」,欢迎正在阅读的你也加入。 时间,总是过的这么快,快得让人猝不及防,眨眼又是一年的末...似乎儿时的文章中,对于时间的流逝,描述的最多的便是:白...
贺biubiu赞 1阅读 1.1k
安卓逆向之破解某成人APP播放次数限制
某成人水果APP非VIP用户存在播放次数限制,每天只能播放3次。超过3次需要购买VIP。 由于过于贫穷,于是抽空,对其安卓APP进行了逆向分析,最终成功破解了其播放次数限制。
悖论赞 2阅读 224
读懂 gradle dependencies
不过在使用 dependencies 时有一些细节之前一直没有搞清楚,遂研究了一下部分细节。本文整体参考 gradle 官方文档,大家感兴趣也可以自己深入研究下。
云音乐技术团队赞 1阅读 453
Android实现RecyclerView嵌套流式布局
新建Activity文件RecyclerViewActivity.class {代码...} Activity页面布局activity_recycler_view.xml {代码...}
似水流年赞 1阅读 784
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。