2016-05-13 14 views
1

私の問題は、タイトルが言っていることを超えているので、質問の前に背景を与えるでしょう。私は2.0にAndroidのメーカー1.5から更新してから、私は私のAndroid Studioと開かれたCファイルを更新するとき、私は背景実験的なグラデルに移行する際の問題Android Studio 2.0以降

(同様のベータ版を試してみましたが、今で安定した2.1.1を使用して)

を問題を実験してきましたNDK yでは、次のメッセージが表示され始めました。 sync gradle message このメッセージは、既にプロジェクトを同期していても表示されます。

コンパイラは正常に動作していました.cの変更を無視してコンパイルすることができたためです。次に、私が作成したファイルの新しいインクルードを追加しようとしましたが、これにはいくつかの設定とメソッドが含まれています。同じファイルが他のファイルにも含まれています。しかし、この時間は、コンパイラは私に次のエラーがスローされます。

error: undefined reference to 'my_method' 

はかなり長い間デバッグを過ごしたが、成功しなかったので、この問題は発生しません実験のGradleに移行することを決定しました。ここで

は、私が今使っているものです: - Gradleの-実験:0.7.0 - wraper:gradle-2.10-all.zip

マイGradleのファイルはこれです:

apply plugin: 'com.android.model.application' 
import org.apache.tools.ant.taskdefs.condition.Os 

model { 
    android { 
     compileSdkVersion 23 
     buildToolsVersion "23.0.3" 

     defaultConfig.with { 
      applicationId "com.domain.myapp" 
      minSdkVersion.apiLevel 15 
      targetSdkVersion.apiLevel 23 
      versionCode 1 
      versionName "1.0" 
     } 

     tasks.withType(JavaCompile) { 
      compileTask -> compileTask.dependsOn ndkBuild 
     } 

     task ndkBuild(type: Exec) { 
      if (Os.isFamily(Os.FAMILY_WINDOWS)) { 
       commandLine 'ndk-build.cmd', '-C', file('src/main').absolutePath 
      } 
     } 
    } 
    task runSwig(type: Exec, description: 'Run swig config') { 
     workingDir 'src/main' 
     commandLine 'cmd', '/c', 'swig.bat' 
    } 

    ndk { 
     moduleName "MyNativeModule" 
     //toolchain "clang" 
    } 

    sources.main { 
     jni { 
      source { 
       srcDir 'src/main/libs' //set .so files location to libs 
       srcDirs = [] //disable automatic ndk-build call 
      } 
     } 
    } 

    buildTypes { 
     debug { 
      debuggable true 
      ndk.with { 
       debuggable = true 
      } 
      versionNameSuffix "1.0" 
     }   
    } 
} 

repositories { 
    maven { url "https://jitpack.io" } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:appcompat-v7:23.4.0' 
    compile 'com.android.support:design:23.4.0'  
    compile 'org.litepal.android:core:1.2.1' 
} 

私はきれいに実行すると、それは今

問題を成功裏に終了しますが、..:

#include <config.h> 
:それは次のように含まのライブラリにはconfig.hの場合

-Error:(20, 20) config.h: No such file or directory 
-Error:(33, 30) libkern/OSAtomic.h: No such file or directory 
-Error:(29, 25) dev/usb/usb.h: No such file or directory 
... many others like these 

:*私は私が構築しようとした際、私は次のエラーを取得するのlibusbライブラリ を使用しています私が直接を持っていない、他のファイルに対して一方

#include "../config.h> 

:私は、ライブラリ内の親ディレクトリでそのファイルを持っているので

ので、私はそれがこのように動作させるために管理しました私はそれらを参照することはできませんので、ライブラリ内のファイルやories。また、これらのファイルは私がgoogleにMacOSに属しているのがわかります。

標準的なグラデルでは、これは魅力のようにコンパイルされるので問題はありません!

私の質問は以下のとおりです。

  • ですが、なぜでしょうか?これらのファイルを無視するためにいくつかのコンパイルフラグがありますか?
  • この問題を解決するにはどうすればよいですか?安定的かつ実験的な異なるGradleのバージョンを試してみましたBetaチャンネルへの安定したアンドロイドStudioから11
  • 12に切り替えてから

    • 更新NDKとバック
    • :私はすでに試した

私はNDKとCに精通しているので、私の質問はobvios、a nyの助けが大いに評価されるでしょう!

更新

私はそれにいくつかの変更を加えたとして、私はのlibusbライブラリを構築しています。次のように

私のディレクトリ構造がある(安定のGradleでこれは問題のために、私はすべてが期待通りに動作し、私は数ヶ月のために、この設定を使用しているアップデートの前に、上記以外正常に動作します):

-jni 
-jni/myUSB/libusb 
JNI:

LOCAL_PATH := $(call my-dir) 
ROOT_PATH := $(LOCAL_PATH) 
include $(call all-subdir-makefiles) 
LOCAL_PATH := $(ROOT_PATH) 
include $(CLEAR_VARS) 
LOCAL_MODULE := myModuleName 
LOCAL_CFLAGS := -O2 -ffast-math 
LOCAL_LDLIBS := -llog 
LOCAL_SRC_FILES := \ 
jiw.cpp \ 
mainFile.c \ 
otherFile.c 

LOCAL_C_INCLUDES := $(LOCAL_PATH)/ 
LOCAL_SHARED_LIBRARIES := myUSB 
include $(BUILD_SHARED_LIBRARY) 

myUSB:

LOCAL_PATH := $(call my-dir) 
ROOTUSB_PATH := $(LOCAL_PATH) 
include $(call all-subdir-makefiles) 
LOCAL_PATH := $(ROOTUSB_PATH) 
include $(CLEAR_VARS) 
LOCAL_MODULE := myUSB 
LOCAL_CFLAGS := -O2 -ffast-math 
LOCAL_LDLIBS := -llog -pthread 
LOCAL_SRC_FILES := \ 
myUsbMainFile.c \ 
myUsbInterface.c \ 

LOCAL_C_INCLUDES := \ 
$(LOCAL_PATH)/ 

LOCAL_SHARED_LIBRARIES := android-usb 
include $(BUILD_SHARED_LIBRARY) 
あなたは、私はそれらを構築していますどのように見るように、ここで

は私のAndroid.mkファイルをしています

のlibusb:

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 
LOCAL_MODULE := android-usb 
LOCAL_CFLAGS := -O2 -ffast-math 
LOCAL_LDLIBS := -llog 
LOCAL_SRC_FILES := \ 
core.c \ 
descriptor.c \ 
io.c \ 
sync.c \ 
os/linux_usbfs.c \ 
os/threads_posix.c \ 
os/android_java.c 

LOCAL_C_INCLUDES := \ 
$(LOCAL_PATH)/ \ 
$(LOCAL_PATH)/os 
include $(BUILD_SHARED_LIBRARY) 
+1

通常、私は 'experimental * plugin 'に切り替えて' ndk-build'を取り除きます。 ** ndkBuild **タスクを使用する場合は、** build.gradle **に異なる依存関係を設定する必要があります。 * experimental *プラグインがあなたのためにC/C++ライブラリを構築したい場合は、 'jni {source {srcDir'をソースファイルが入っているディレクトリに指定して、おそらく' ndk {'ブロックに追加の文を追加してください。 –

+0

私は実験的なプラグインに精通していないので、通常はndk-buildを取り除くために使用することを知らなかったので、間違いなくこれを見ていきます。私がこれについてもっと読むことができるソースがあるなら、私はそれを非常に高く評価します。 – alexm

+0

これはgradle-experimentalプラグインの公式ウェブサイトであり、grale DSLの変更とネイティブビルドの設定例を含んでいます:http://tools.android.com/tech-docs/new-build-system/gradle-experimental 特に第5章「NDKの統合」に興味がありますhttp://tools.android.com/tech-docs/new-build-system/gradle-experimental#TOC-Ndk-Integration –

答えて

関連する問題