2016-08-01 59 views
0

有什麼辦法可以將彙編代碼包含到android studio的本地庫模塊中。裝配在Android gradle實驗

由於post表示您只能在srcDir中包含* .C,* .CPP,* .C++,* .cc,* .cp,* .cpp,* .cxx文件,所以我想知道是否有可能另一個解決方案或解決方法至少用本地庫進行編譯。

我想我可以預編譯彙編代碼,然後將其鏈接到我的本地模塊,但與此我會有問題,我必須重建它在每一個變化,然後重建項目本身,這不是一個真正的漂亮的工作流程,所以如果你有更好的方式讓我知道。

+0

等等,它不運行make來構建它?呵呵......(不期待在gradle下遷移我的NDK項目......因爲我使用Makefiles +'ndk-build'來定義構建和構建步驟所需的一切)。是不是有一些簡單的方法來編寫在gradle中運行make的自定義構建步驟? (我的意思是,它很時髦,所以它應該是可編程的?但我從來沒有真正理解它,實際上,整個gradle讓我感到非常惱火,無論是它的性能和建立過程定義的神祕方式。完全放棄它並編寫GNU make規則。) – Ped7g

+0

因爲你提到它,我想我會在某處讀到可以使用自定義生成文件在android studio中構建它,我一定會看一看它。 – Alex

+0

'ndk-build'本身使用make,因此我不使用任何自定義設置來運行make,我只是將自定義規則放入來自NDK示例的通用Makefiles中(並使用NDK的ndk-build腳本構建它)。有可能從gradle運行ndk-build(因爲你可能將任何代碼編碼成gradle),但我還沒有這樣做。 – Ped7g

回答

1

首先創建include文件夾裏面jni文件夾和libs文件夾裏面的同一個文件夾。您還可以在libs文件夾內爲不同的chipsets(armeabi,mips,x86)創建不同的文件夾。

複製include文件夾內的.h文件和你的編譯文件(.a)中在libs文件夾

然後,你必須改變你的build.gradle,添加新的repositorymodel

repositories { 
    libs(PrebuiltLibraries) { 
     libYourCLibrary{ 
      headers.srcDir "src/main/jni/include" 
      binaries.withType(StaticLibraryBinary) { 
       staticLibraryFile = file("src/main/jni/libs/${targetPlatform.getName()}/YOUR_C_LIBRARY.a") 
      } 
     } 
    } 
} 

裏面添加了model

android.sources { 
    main { 
     jni { 
      dependencies { 
       library "libYourCLibrary" linkage "static" 
      } 
     } 
    } 
} 
這個 repository依賴

最後與梯級文件同步項目。

+0

我知道如何包含一個預構建的庫,但我並不想預構建彙編代碼,因爲我只想告訴android工作室來構建它,並等待其完成,而不是每次更改都要手動編譯它。 – Alex

+0

據我所知目前還不可能這樣做。我可以想象的唯一方法是使用ant與gradle構建你的c庫,以靜態方式將它們複製到libs中,然後運行gradle,也許這個鏈接可能很有用http://ant-contrib.sourceforge.net/cpptasks/和https://docs.gradle.org/current/userguide/ant.html –

+0

這將比建立它manuay更好,但它不是一個真正的理想解決方案,但感謝您的鏈接。 – Alex

相關問題