У меня возникла ошибка при компиляции моих источников Java для создания заголовков C++ в последнее время: javah
spits a package does not exist
ошибка для некоторого файла.javah error: пакет не существует с помощью gradle и Android Studio
tl; dr:javah
отлично работает для источника Java, но не другой, - которые импортируют предложения довольно близко; gradle
не обрабатывает некоторые библиотеки, но даже пакеты обработанных отмечены как отсутствующие.
Я не знаю, почему javah начал плеваться этой ошибкой, так как он работал хорошо до недавнего времени и я ничего особенного не изменился. Я использую gradle
с Android Studio gradle-wrapper
. Недавно я обновил дистрибутив оболочки от 2.2.1 до 2.10, но я не думаю, что именно поэтому javah терпит неудачу.
В соответствии с журналами и настоящими файлами javah не находит пакеты из библиотек, которые я использую при компиляции ClassB
, но не ClassA
.
Давайте рассмотрим два примера: com.batch.android
и com.adjust.sdk
com.batch.android
библиотека делает обрабатываются по Gradle поэтому его банки находятся в моейbuild/intermediates/exploded-aar
папке (под com.batch.android/batch-sdk/1.5 0,3/банки/classes.jar и com.batch.android/batch-sdk/1.5.3/jars/libs/batch.jar)com.adjust.sdk
библиотека не получить обработанные Gradle так его банки не в моей сборки/промежуточных/разобранном-AAR- как в моем ~/.gradle/кэш/папки
- оба пакеты не безвестно отсутствующим javah
- оба пакета не импортируются из
ClassA
иClassB
java-файлы
Благодарим за помощь!
В Gradle журналы (извините, ребята, это супер длинный):
Executing tasks: [:app:clean, :app:generateDevAmazonDebugSources, :app:generateDevAmazonDebugAndroidTestSources, :app:mockableAndroidJar, :app:prepareDevAmazonDebugUnitTestDependencies, :app:assembleDevAmazonDebug]
Configuration on demand is an incubating feature.
:buildSrc:compileJava UP-TO-DATE
:buildSrc:compileGroovy UP-TO-DATE
:buildSrc:processResources UP-TO-DATE
:buildSrc:classes UP-TO-DATE
:buildSrc:jar UP-TO-DATE
:buildSrc:assemble UP-TO-DATE
:buildSrc:compileTestJava UP-TO-DATE
:buildSrc:compileTestGroovy UP-TO-DATE
:buildSrc:processTestResources UP-TO-DATE
:buildSrc:testClasses UP-TO-DATE
:buildSrc:test UP-TO-DATE
:buildSrc:check UP-TO-DATE
:buildSrc:build UP-TO-DATE
Generating assets binaries
Incremental java compilation is an incubating feature.
Cleaning project...
:app:clean
:app:processAssets
:app:copyFiles
:app:preBuild
:app:preDevAmazonDebugBuild
:app:checkDevAmazonDebugManifest
:app:preDevAmazonReleaseBuild
:app:preDevGoogleDebugBuild
:app:preDevGoogleReleaseBuild
:app:preProdAmazonDebugBuild
:app:preProdAmazonReleaseBuild
:app:preProdGoogleDebugBuild
:app:preProdGoogleReleaseBuild
:app:prepareComAndroidSupportAppcompatV72311Library
:app:prepareComAndroidSupportCardviewV72320Library
:app:prepareComAndroidSupportMediarouterV72220Library
:app:prepareComAndroidSupportMultidex100Library
:app:prepareComAndroidSupportRecyclerviewV72311Library
:app:prepareComAndroidSupportSupportV42320Library
:app:prepareComBatchAndroidBatchSdk153Library
:app:prepareComCrashlyticsSdkAndroidAnswers136Library
:app:prepareComCrashlyticsSdkAndroidBeta114Library
:app:prepareComCrashlyticsSdkAndroidCrashlytics255Library
:app:prepareComCrashlyticsSdkAndroidCrashlyticsCore238Library
:app:prepareComCrashlyticsSdkAndroidCrashlyticsNdk112Library
:app:prepareComFacebookAndroidFacebookAndroidSdk4101Library
:app:prepareComGoogleAndroidExoplayerExoplayerR142Library
:app:prepareComGoogleAndroidGmsPlayServices780Library
:app:prepareComGoogleAndroidGmsPlayServicesAds780Library
:app:prepareComGoogleAndroidGmsPlayServicesAnalytics780Library
:app:prepareComGoogleAndroidGmsPlayServicesAppindexing780Library
:app:prepareComGoogleAndroidGmsPlayServicesAppinvite780Library
:app:prepareComGoogleAndroidGmsPlayServicesAppstate780Library
:app:prepareComGoogleAndroidGmsPlayServicesBase780Library
:app:prepareComGoogleAndroidGmsPlayServicesCast780Library
:app:prepareComGoogleAndroidGmsPlayServicesDrive780Library
:app:prepareComGoogleAndroidGmsPlayServicesFitness780Library
:app:prepareComGoogleAndroidGmsPlayServicesGames780Library
:app:prepareComGoogleAndroidGmsPlayServicesGcm780Library
:app:prepareComGoogleAndroidGmsPlayServicesIdentity780Library
:app:prepareComGoogleAndroidGmsPlayServicesLocation780Library
:app:prepareComGoogleAndroidGmsPlayServicesMaps780Library
:app:prepareComGoogleAndroidGmsPlayServicesNearby780Library
:app:prepareComGoogleAndroidGmsPlayServicesPanorama780Library
:app:prepareComGoogleAndroidGmsPlayServicesPlus780Library
:app:prepareComGoogleAndroidGmsPlayServicesSafetynet780Library
:app:prepareComGoogleAndroidGmsPlayServicesVision780Library
:app:prepareComGoogleAndroidGmsPlayServicesWallet780Library
:app:prepareComGoogleAndroidGmsPlayServicesWearable780Library
:app:prepareComMopubMopubSdk440Library
:app:prepareComZendeskBelvedere1011Library
:app:prepareComZendeskSdk1512Library
:app:prepareComZendeskSdkProviders1512Library
:app:prepareIoBranchSdkAndroidLibrary1112Library
:app:prepareIoFabricSdkAndroidFabric1310Library
:app:prepareDevAmazonDebugDependencies
:app:compileDevAmazonDebugAidl
:app:compileDevAmazonDebugRenderscript
:app:generateDevAmazonDebugBuildConfig
:app:generateDevAmazonDebugAssets UP-TO-DATE
:app:mergeDevAmazonDebugAssets
:app:processDevAmazonDebugManifest
:app:fabricGenerateResourcesDevAmazonDebug
:app:generateDevAmazonDebugResValues UP-TO-DATE
:app:processDevAmazonDebugGoogleServices
:app:generateDevAmazonDebugResources
:app:mergeDevAmazonDebugResources
:app:processDevAmazonDebugResources
:app:generateDevAmazonDebugSources
:app:preDevAmazonDebugAndroidTestBuild
:app:prepareDevAmazonDebugAndroidTestDependencies
:app:compileDevAmazonDebugAndroidTestAidl
:app:processDevAmazonDebugAndroidTestManifest
:app:compileDevAmazonDebugAndroidTestRenderscript
:app:generateDevAmazonDebugAndroidTestBuildConfig
:app:generateDevAmazonDebugAndroidTestAssets UP-TO-DATE
:app:mergeDevAmazonDebugAndroidTestAssets
:app:generateDevAmazonDebugAndroidTestResValues UP-TO-DATE
:app:generateDevAmazonDebugAndroidTestResources
:app:mergeDevAmazonDebugAndroidTestResources
:app:processDevAmazonDebugAndroidTestResources
:app:generateDevAmazonDebugAndroidTestSources
:app:mockableAndroidJar UP-TO-DATE
:app:preDevAmazonDebugUnitTestBuild
:app:prepareDevAmazonDebugUnitTestDependencies
:app:javahBuild_ClassA
:app:javahBuild_ClassB
Error: package com.adjust.sdk does not exist
Error: package com.adjust.sdk does not exist
Error: package com.amazon.ags.api does not exist
Error: package com.batch.android does not exist
Error: package com.batch.android does not exist
Error: package com.crashlytics.android does not exist
Error: package com.crashlytics.android.answers does not exist
Error: package com.crashlytics.android.answers does not exist
Error: package com.crashlytics.android.answers does not exist
Error: package com.mopub.common does not exist
Error: package com.zendesk.sdk.feedback.impl does not exist
Error: package com.zendesk.sdk.model.access does not exist
Error: package com.zendesk.sdk.model.access does not exist
Error: package com.zendesk.sdk.model.push does not exist
Error: package com.zendesk.sdk.network.impl does not exist
Error: package com.zendesk.sdk.network.impl does not exist
Error: package com.zendesk.sdk.network.impl does not exist
Error: package com.zendesk.sdk.network.impl does not exist
Error: package com.zendesk.sdk.network.impl does not exist
Error: package com.zendesk.sdk.requests does not exist
Error: package com.zendesk.sdk.storage does not exist
Error: package com.zendesk.sdk.support does not exist
Error: package com.zendesk.service does not exist
Error: package com.zendesk.service does not exist
Error: package org.joda.time does not exist
Error: package org.joda.time does not exist
Error: package org.joda.time does not exist
Error: package org.joda.time does not exist
Error: package org.joda.time.format does not exist
Error: package org.joda.time.format does not exist
Error: package io.branch.indexing does not exist
Error: package io.branch.referral does not exist
Error: package io.branch.referral does not exist
Error: package io.branch.referral does not exist
Error: package io.branch.referral.util does not exist
Error: package io.branch.referral.util does not exist
Error: package com.adjust.sdk does not exist
Error: package com.amazon.ags.api does not exist
Error: package com.amazon.ags.api does not exist
Error: package com.amazon.ags.api does not exist
Error: package com.amazon.ags.api does not exist
Error: package com.applovin.sdk does not exist
Error: package com.batch.android does not exist
Error: package com.crashlytics.android does not exist
Error: package com.crashlytics.android.ndk does not exist
Error: package io.branch.referral does not exist
Error: package io.branch.referral does not exist
Error: package io.fabric.sdk.android does not exist
Error: package com.google.android.gms.analytics does not exist
Error: package com.google.android.gms.analytics does not exist
Error: package com.google.android.gms.analytics does not exist
Error: package com.google.android.gms.ads.identifier does not exist
Error: package com.google.android.gms.common does not exist
Error: package com.mopub.common does not exist
Error: package com.mopub.common does not exist
Error: cannot find symbol
symbol: class MoPubErrorCode
location: package com.mopub.mobileads
Error: cannot find symbol
symbol: class MoPubRewardedVideoListener
location: package com.mopub.mobileads
Error: package com.chartboost.sdk does not exist
Error: package com.adjust.sdk does not exist
Error: package com.adjust.sdk does not exist
Error: package com.adjust.sdk does not exist
Error: package com.adjust.sdk does not exist
Error: cannot find symbol
symbol: class BaseZendeskFeedbackConfiguration
location: class my.super.project.Renderer
Error: cannot find symbol
symbol: class BuildConfig
location: package my.super.project
Error: cannot find symbol
symbol: class Tracker
location: class my.super.project.Main
Error: ';' expected
Error: package com.facebook does not exist
Error: package com.facebook does not exist
Error: package com.facebook does not exist
Error: package com.facebook does not exist
Error: package com.facebook does not exist
Error: package com.facebook does not exist
Error: package com.facebook does not exist
Error: package com.facebook does not exist
Error: package com.facebook does not exist
Error: package com.facebook does not exist
Error: package com.facebook.appevents does not exist
Error: package com.facebook.login does not exist
Error: package com.facebook.login does not exist
Error: package com.facebook.share.model does not exist
Error: package com.facebook.share.model does not exist
Error: package com.facebook.share.model does not exist
Error: package com.facebook.share.widget does not exist
Error: package com.facebook.share.widget does not exist
Error: package com.facebook.share.widget does not exist
Error: package twitter4j does not exist
Error: package twitter4j does not exist
Error: package twitter4j does not exist
Error: package twitter4j does not exist
Error: package twitter4j does not exist
Error: package twitter4j does not exist
Error: package twitter4j does not exist
Error: package twitter4j does not exist
Error: package twitter4j.auth does not exist
Error: cannot find symbol
symbol: class R
location: package my.super.project
Error: cannot find symbol
symbol: class AmazonGamesClient
location: class my.super.project.Main
Error: cannot find symbol
symbol: class MoPubRewardedVideoListener
location: class my.super.project.Main
Error: cannot find symbol
symbol: class ChartBoostDelegate
location: class my.super.project.Main
Error: cannot find symbol
symbol: class CallbackManager
location: class my.super.project.ClassA
Error: cannot find symbol
symbol: class ProfileTracker
location: class my.super.project.ClassA
FAILED
FAILURE: Build failed with an exception.
Мой build.gradle
имеет следующие задачи:
android {
<snip>
['Main', 'Renderer', 'ClassA', 'ClassB'].each {
def targetName ->
tasks.create(name: "javahBuild_$targetName", type: Exec) {
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
String sdkDir = properties.getProperty('sdk.dir')
String flavorFolder = getCurrentFlavorFolder()
commandLine 'javah', '-classpath', "libs/:src/main/java/:$sdkDir/platforms/android-23/android.jar:build/intermediates/classes/$flavorFolder/$config:$sdkDir/platforms/android-23/optional/org.apache.http.legacy.jar/:$config/", '-d', 'src/main/jni/Main/', "my.super.project.${targetName}"
}
}
task javahBuildAll(dependsOn: tasks.matching { Task task -> task.name.startsWith("javahBuild_") })
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn javahBuildAll
}
}
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
compile('com.crashlytics.sdk.android:crashlytics:[email protected]') {
transitive = true;
}
compile('com.crashlytics.sdk.android:crashlytics-ndk:[email protected]') {
transitive = true
}
compile('com.mopub:mopub-sdk:[email protected]') {
transitive = true
}
compile group: 'com.zendesk', name: 'sdk', version: '1.5.1.2'
compile('com.android.support:multidex:1.0.0')
compile('com.google.android.gms:play-services:7.8.0')
compile('com.google.android.gms:play-services-analytics:7.8.0')
compile('com.google.android.gms:play-services-gcm:7.8.0')
compile('com.android.support:appcompat-v7:23.1.0')
compile('com.android.support:support-v4:23.1.0')
compile('com.facebook.android:facebook-android-sdk:4.10.+')
compile('io.branch.sdk.android:library:1.+')
compile('com.batch.android:batch-sdk:1.5+')
compile('com.adjust.sdk:adjust-android:4.2.3')
compile('joda-time:joda-time:2.9.2')
}
Я не думаю, что результат должен быть интерпретирован как «javah отлично работает для источника Java, но не Еще один". Видимый результат, похоже, является результатом запуска javah по двум целям параллельно. Если вы запускаете эти задачи вручную, вы можете подтвердить или отклонить мою оценку. –
Привет, Алекс, спасибо за ваш ответ. Это было то, что я, хотя сначала, но запуск javah из командной строки дает те же результаты: он отлично подходит для ClassA, но не для ClassB. – Kyone
Насколько я знаю, javah не заботится об импорте и будет жаловаться только в том случае, если он не может определить подпись собственного метода класса, который вы попросите обработать, а затем сообщение в журнале «Ошибка: не может определить подпись для ... ». Попробуйте установить '-classpath src/main/java', и вы сами это увидите. –