Вопрос по android – Javah Ошибка android.app.Деятельность не найдена

13

Я пытаюсь создать заголовочный файл .h для простого проекта NDK. С помощью Cygwin я просматриваюmyprojectDIR\jni каталог, затем выполните эту команду:

javah -o com_myproject_MyActivity.h -classpath  myprojectDIR\bin\classes com.myproject.MyActivity

тогда появляется это сообщение об ошибке:

Error: cannot access android.app.Activity
class file for android.app.Activity not found

У меня есть родной метод внутриMyActivity класс, поэтому я попытался создать новый класс под названиемNativeAccess (не расширяет ни одного класса из Android SDK), и он работал нормально, файл .h был создан, ndk-build и тестируйте на устройстве, где успешно!

Так что моя проблема в том, что мне нужны мои собственные методы в действиях и сервисах Android, которые я создаю, но я не могу этого сделать, потому чтоJavah Команда не может получить доступ к классам внутри самого android-sdk. Обратите внимание, что я использую (Windows-7 x64) и у меня есть следующие переменные среды:

ANDROID_NDK : C:\Android\android-ndk-r7b
ANDROID_SDK : C:\Android\android-sdk
ANT_HOME    : C:\ANT\apache-ant-1.8.3
JAVA_HOME   : C:\Program Files\Java\jdk1.7.0_02
PATH        : %JAVA_HOME%\bin;%ANDROID_SDK%\tools;%ANDROID_SDK%\platform-tools;%ANDROID_NDK%;%ANT_HOME%\bin; (other unrelated stuff)

заранее спасибо

Вам нужно будет включить файлы jar платформы Android в classpath, который вы используете с этим инструментом. Если ваша задача особенно проста, вы можете просто создать заголовки вручную, используя примеры ndk в качестве руководства. Chris Stratton
Спасибо, Крис, я подумал о том, чтобы добавить classpth из jar android с помощью инструмента javah, но я не смог найти, как это сделать .. Ayesh Qumhieh

Ваш Ответ

5   ответов
0

javah необходимо:

your classes (usually under build/intermediates/classes) Android classes (usually under $ANDROID_HOME/platforms/android-%ver%/android.jar)

Таким образом, вы просто передаете их-classpath аргумент

Основной задачей для меня было в основном пройти их обоих - вы должны использовать: в качестве разделителя и пути должны быть абсолютными.
УвидетьOracle документы

Таким образом, вы можете получить что-то вроде этого:
javah -classpath <full path to app>build/intermediates/classes/debug:<full path to sdk>/platforms/android-26/android.jar com.myproject.MyActivity

-1

   E:\workspeaceResearch\DAMMADARJNI\src>javah -classpath "E:\Software\sdk\platform
   s\android-19/platforms/android-8.jar"; -jni com.dammadar.jni.Home_Screen
4

Перейти к & gt; Запустить | Внешние инструменты | Конфигурации внешнего инструмента    Под Программой создайте новую конфигурацию, щелкнув маленькую иконку

Назови это.

Расположение будет: C: \ Program Files \ Java \ jdk1.7.0_04 \ bin \ javah.exe

Рабочий каталог будет: $ {workspace_loc: / My_First_NDK / bin / classes} и

Аргументами могут быть: -classpath $ {workspace_loc: / My_First_NDK / bin / classes} -bootclasspath & quot; C: \ adt-bundle-windows-x86-20140624 \ sdk \ platform \ android-19 \ android.jar & quot; -v -d $ {workspace_loc: / My_First_NDK / jni} com.mypackage.ndk.HelloNDK

enter image description here

Error: User Rate Limit Exceededstackoverflow.com/a/52527212/2573138
21

-classpath <android-sdk-location>/platforms/android-8.jar
Error: User Rate Limit Exceededsdk/platforms/android-10/android.jar
14


javah -o com_myproject_MyActivity.h -classpath <android-sdk-location>/platforms/android-8.jar;myprojectDIR\bin\classes com.myproject.MyActivity

Похожие вопросы