2016-04-23 3 views
0

У меня возникла ошибка при компиляции моих источников 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') 
} 
+0

Я не думаю, что результат должен быть интерпретирован как «javah отлично работает для источника Java, но не Еще один". Видимый результат, похоже, является результатом запуска javah по двум целям параллельно. Если вы запускаете эти задачи вручную, вы можете подтвердить или отклонить мою оценку. –

+0

Привет, Алекс, спасибо за ваш ответ. Это было то, что я, хотя сначала, но запуск javah из командной строки дает те же результаты: он отлично подходит для ClassA, но не для ClassB. – Kyone

+0

Насколько я знаю, javah не заботится об импорте и будет жаловаться только в том случае, если он не может определить подпись собственного метода класса, который вы попросите обработать, а затем сообщение в журнале «Ошибка: не может определить подпись для ... ». Попробуйте установить '-classpath src/main/java', и вы сами это увидите. –

ответ

0

OK это не понять, почему я получив эти ошибки, но я просто понял, что могу игнорировать их, поскольку файлы заголовков C++ все еще генерируются.

Поэтому я решил изменить свою задачу градиента javah, чтобы игнорировать ошибки и записывать их в выделенный файл журнала.Я добавил следующую строку:

errorOutput = project.file("build/javah_error_${targetName}.log").newDataOutputStream() 
ignoreExitValue = true 

Моя javah задача теперь выглядит следующим образом:

['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() 
      errorOutput = project.file("build/javah_error_${targetName}.log").newDataOutputStream() 
      ignoreExitValue = true 
      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}" 
     } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^