Android에서 로컬 코드 사용
OpenGL의 코드 C/C++가 압도적인 다수를 차지하기 때문에 "그 자산을 이용할 수 있다!"기대되지만 생각보다 사용법이 많이 어려워졌다.아직 다 파악하지는 못했지만 내가 이해하는 범위를 총결해 보겠다.
최신 안드로이드 스튜디오에는 정보가 많지 않아 상당히 많은 모색이 이뤄졌으니 잘못된 점이 있으면 지적해달라.
차리다
Android Studio2.준비
Android Studio2.2에서 새 프로젝트를 만들 때 C/C++를 사용하시겠습니까의 확인란을 먼저 ON으로 설정합니다.
![c.png](https://s1.md5.ltd/image/93773537413b5bf7054862c3d2e08c38.png)
디렉토리 구조 확인
새 프로젝트의 구성을 확인하다.왼쪽의 프로젝트 구조를 Android에서 Project로 변경하여 모든 파일을 확인합니다.
다음 서류가 있으면 됩니다.
시험해 보다
build로 보고 싶습니다. 화면에 Textview가 표시됩니다.
MainActivity.자바에서 cpp/native-lib까지.나는 c의 코드가 호출되었다는 것을 안다.
public class MainActivity extends AppCompatActivity {
// native-lib.cはコンパイルでlibraryになるようで、それをここで読み込んでいます。
// import みたいなものでしょうか。
static {
System.loadLibrary("native-lib");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Example of a call to a native method
TextView tv = (TextView) findViewById(R.id.sample_text);
tv.setText(stringFromJNI());
}
/**
* native-lib.cで実装した関数を定義しているようです。
*/
public native String stringFromJNI();
}
native-lib.cpp 확인
다음 코드를 기본적으로 기술하고 싶습니다.
이 코드를 봤어요.
패키지, 프로젝트 이름, 함수 이름은 밑줄로 연결된 것 같습니다.아마 이게 격식이겠지.
이런 기술은 정의된 것 같다.되돌아오는 값도'jstring'의 형식이다.
이것이 Android NDK인지 JNI(Java native interface) 유형인지 확인합니다.
#include <jni.h>
#include <string>
extern "C"
jstring
Java_com_test_opengl_MainActivity_stringFromJNI(
JNIEnv *env,
jobject /* this */) {
std::string hello = "Hello from C++";
return env->NewStringUTF(hello.c_str());
}
테스트 함수를 정의해 보세요.
먼저 extern "C"를 모두 다음 내용으로 수정합니다.
extern "C" {
// ここに関数をいれます。
}
테스트 함수를 적당히 설명하다.매개 변수는 매우 규정이 있기 때문에 같은 것을 넣어야 한다.extern "C" {
// stringFromJNIの記述は省略
void
Java_quad_jp_opengl_MainActivity_sayHello(JNIEnv *env, jobject){
std::cout << "Hello World" << std::endl;
}
}
물론 MainActivity도 함수를 정의합니다.public native void sayHello();
구축 후 특별한 오류가 없습니다.cout의 출력이 어디에서 확인할 수 있는지 모르겠습니다.orz우선, C 쪽에서 처리하는 방법을 알았기 때문에 이걸로 지난번 코드를 수정합니다.이따가 여기서 추기할게요.
참조 정보
Android NDK(공식 페이지 세부 설정 방법 있음)
일부 번역된 페이지가 있는데 번역이 잘 안 돼서 혼란스러워요.
프로젝트에 C/C++ 코드 추가
Reference
이 문제에 관하여(Android에서 로컬 코드 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mizno/items/ab33f029c9bdd13e8c9e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)