ndk и Android Studio 1.0
ndk и Android Studio 1.0
Можете описать пошаговую инструкцию подключения ndk в Android Studio 1.0 и вызов нативных методов в java коде под андроид( пытаюсь собрать готовые проекты, подключить ndk, но gradle все время выдает ошибки, не могу понять в чем дело)?? Помогите пожалуйста?? Говорят Android Studio 1.0 уже не поддерживает ndk это правда??
- Mikhail_dev
- Сообщения: 2386
- Зарегистрирован: 09 янв 2012, 14:45
- Откуда: Самара
Re: ndk и Android Studio 1.0
Говорят Android Studio никогда не поддерживала NDKГоворят Android Studio 1.0 уже не поддерживает ndk это правда??
Re: ndk и Android Studio 1.0
Собирать вроде бы можно было:
http://habrahabr.ru/post/228365/
http://habrahabr.ru/company/intel/blog/216353/
Но там старые версии AS. В новой тоже можно, недавно коллега переносил проект из Eclipse, говорит в AS 1.0 поменяли много чего, но проект собрал и он работает. Информацию от него теперь смогу только в понедельник получить.
Вот все, что касается редактирования C/C++ кода, тут ничего не поддерживается. Хотя недавний выход CLion может исправить ситуацию в будущем (хотя вряд ли в ближайшем).
http://habrahabr.ru/post/228365/
http://habrahabr.ru/company/intel/blog/216353/
Но там старые версии AS. В новой тоже можно, недавно коллега переносил проект из Eclipse, говорит в AS 1.0 поменяли много чего, но проект собрал и он работает. Информацию от него теперь смогу только в понедельник получить.
Вот все, что касается редактирования C/C++ кода, тут ничего не поддерживается. Хотя недавний выход CLion может исправить ситуацию в будущем (хотя вряд ли в ближайшем).
Re: ndk и Android Studio 1.0
а сейчас уже есть какая то информация на счет подключения ndk??
Re: ndk и Android Studio 1.0
Как я понял собираются нативная часть сейчас отдельно от AS (в папке в которой находится jni вызвать ndk-build). Далее полученные .so (они будут лежать в папке libs) ложатся в папку \src\main\jniLibs и gradle должен их запихивать в apk автоматически. Для дебажной версии этого должно хватить:
Вызывание нативных функций никак не зависит от системы сборки. (можно посмотреть семплы в ndk чтобы понять как это работает, собственно я бы посоветовал вначале собрать под AS что-нибудь из них для пробы)
ну и если есть ошибки, то было бы неплохо узнать что за ошибки.
Вызывание нативных функций никак не зависит от системы сборки. (можно посмотреть семплы в ndk чтобы понять как это работает, собственно я бы посоветовал вначале собрать под AS что-нибудь из них для пробы)
ну и если есть ошибки, то было бы неплохо узнать что за ошибки.
Re: ndk и Android Studio 1.0
а как подключить библиотеку opencv к нативной части проекта??
Re: ndk и Android Studio 1.0
Тут ничем особо не помогу.
первое что предложил гугл: http://stackoverflow.com/questions/2740 ... oid-studio
первое что предложил гугл: http://stackoverflow.com/questions/2740 ... oid-studio
Re: ndk и Android Studio 1.0
А как вызывать в java коде класс определенный в jni. Ну хедер его и реализация будут в папке jni написанные на с++ а как дальше создать его обьект в java коде ?? Как обьявить этот класс в java?? Ну метод я знаю обьявляется ключевым словом native а класс как обьявить чтоб можно было создавать его обьекты в java ??
Re: ndk и Android Studio 1.0
Насколько я знаю никак. Взаимодействия из java с jni только через методы. Как вариант написать обертку для с++ класса. Хотя ту зависит от конкретики задачи.yura91 писал(а):А как вызывать в java коде класс определенный в jni. Ну хедер его и реализация будут в папке jni написанные на с++ а как дальше создать его обьект в java коде ?? Как обьявить этот класс в java?? Ну метод я знаю обьявляется ключевым словом native а класс как обьявить чтоб можно было создавать его обьекты в java ??
Может вам вообще ненужен это с++ объект в java коде? Может всю работу можно организовать в с/с++, а java возвращать только результат?
Re: ndk и Android Studio 1.0
а можете написать пример обертки для С++ класса чтоб можно было создавать его обьект в java коде или дать ссылку как это делается??
Re: ndk и Android Studio 1.0
А вообще судя по всему ссылку на объект можно хранить:
http://stackoverflow.com/questions/1980 ... -c-objects
Но я не уверен что это хорошо и что это работает (я плоховато знаю с++, и не знаю будет ли жить объект созданный new до тех пор пока ему явно не вызвать delete, или он может умереть при каких-то других обстоятельствах и ссылка будет неактуальна). Ну и еще не понятно зачем. Почему бы с++ объект не хранить в нативной части и не работать с ним там. А в Java просто вытягивать нужную информацию с помощью методов?
Как-то так:
[syntax=cpp]
CPP_Object *obj
void
Java_package_name_init(JNIEnv *, jobject) {
obj = new CPP_Object();
}
void
Java_package_name_doSomething(JNIEnv *, jobject) {
// do whatever you want with the object
}
void
Java_package_name_delete(JNIEnv *, jobject) {
delete obj;
}[/syntax]
http://stackoverflow.com/questions/1980 ... -c-objects
Но я не уверен что это хорошо и что это работает (я плоховато знаю с++, и не знаю будет ли жить объект созданный new до тех пор пока ему явно не вызвать delete, или он может умереть при каких-то других обстоятельствах и ссылка будет неактуальна). Ну и еще не понятно зачем. Почему бы с++ объект не хранить в нативной части и не работать с ним там. А в Java просто вытягивать нужную информацию с помощью методов?
Как-то так:
[syntax=cpp]
CPP_Object *obj
void
Java_package_name_init(JNIEnv *, jobject) {
obj = new CPP_Object();
}
void
Java_package_name_doSomething(JNIEnv *, jobject) {
// do whatever you want with the object
}
void
Java_package_name_delete(JNIEnv *, jobject) {
delete obj;
}[/syntax]
Re: ndk и Android Studio 1.0
А в нативной части просто подключаешь хедер класса через include и можно создавать обьект его. Там куда этот хедер подключил верно??
Re: ndk и Android Studio 1.0
А package_name в приведенном примере что означает?? Это имя package где находится класс Java в котором создается обьект С++ класса?? Ведь класс то сам определяется в jni. А CPP_Object *obj что это??
Re: ndk и Android Studio 1.0
А в классе Java например MainActivity просто обьявить нативными эти 3 метода и вызывать для создания обьекта??
Re: ndk и Android Studio 1.0
Думаю вы вообще плохо понимаете что происходит, возможно стоит почитать несколько статей по Android NDK и JNI. Посмотрите семплы и как это все работает. С ходу тут не разберешься. Ну и книжка по с/с++ тоже лишней не будет.
1) в общем случае хедер к классу не относится, но в нем может быть объявлен класс, или два класса, или вообще не быть класса. Но в целом да, скорее всего нужно прописать что-то в include, чтобы что-то использовать.
2) package_name это путь до этой функции в Java. Например если нативная (native) функция stringFromJNI находится в com.example.hellojni.HelloJni.java, то в c++ она примет вид Java_com_example_hellojni_HelloJni_stringFromJNI
3) В примерах используются говорящие названия: CPP_Object *obj - указатель на объект, который мы собираемся использовать, методы init - создание объекта, doSomething - действия над объектом, delete удаление объекта (освобождаем память, в с++ это полезно)
1) в общем случае хедер к классу не относится, но в нем может быть объявлен класс, или два класса, или вообще не быть класса. Но в целом да, скорее всего нужно прописать что-то в include, чтобы что-то использовать.
2) package_name это путь до этой функции в Java. Например если нативная (native) функция stringFromJNI находится в com.example.hellojni.HelloJni.java, то в c++ она примет вид Java_com_example_hellojni_HelloJni_stringFromJNI
3) В примерах используются говорящие названия: CPP_Object *obj - указатель на объект, который мы собираемся использовать, методы init - создание объекта, doSomething - действия над объектом, delete удаление объекта (освобождаем память, в с++ это полезно)
Re: ndk и Android Studio 1.0
То есть к примеру если я определяю в jni класс MyClass CPP_Object *obj запишется как MyClass* obj и в Java классе MainActivity вызывая 3 указанных метода я смогу создать обьект класса MyClass верно??
Re: ndk и Android Studio 1.0
все понял
Re: ndk и Android Studio 1.0
NDK_PROJECT_PATH что этот атрибут указывает в build.gradle??