問題說明:Spatialite for Android是基於Eclipse的Android項目構建的,所以並給基於gradle,不能直接加載到Android Studio中使用,需要做必要的設置才可以!
思路:
第一步:將Spatialite for Android加載到Eclipse中,測試成功,表明項目確實可用,api需要選擇支持google api的開發包!
第二步:在AndroidStudio中通過Improt project的方式將Spatialite for Android加載到AndroidStudio,這一過程會生成gradle構建文件,生成AndroidStudio的application項目結構!
第三步:因為項目中存在項目依賴(spatialite-android依賴於spatialite-android-library),所以,需要將被依賴的項目類型改為library,可以參考AndroidStudio中一般library項目,重新設置build.gradle和Mainfest.xml
第四步:原項目依賴了google api中的maps.jar等幾個開發包,所以在類似Android_SDK_windows\add-ons\addon-google_apis_x86-google-19\libs的路徑下找到對應的jar包,放到spatialite-android的libs中,沒有libs時新建該文件夾,然后在build.gradle的dependences中添加compile fileTree(dir:'libs',include:['*.jar'])即可
第五步:spatialite-android-library中存在Exception is never thrown in try statement的問題,是說在try語句塊中永遠不會拋出該異常,直接import java.lang.Exception將sqlite.Exception替換即可!
第六步:如果SDK的版本設置存在問題,可以直接參考已經測試成功的項目,依賴項目的最低版本不應高於應用項目的最小版本
第七步:刪除spatialite-android-library中的jni文件夾,其中的c++源碼文件已經編譯為so文件了,所以直接刪除,否則會編譯錯誤!
最后要注意的是so文件引入AndroidStudio的問題,通過import project后,發現在main中自動生成了一個jniLibs文件夾存放了so文件,這就是Android Studio引入so文件的方式,會自動加載 jniLibs中的so文件!
要想利用Spatialite for Android構建自己的項目,關鍵在於設置好apatialite-android-library這個依賴項目,然后在自己的application項目中依賴它就好了!
這樣一來,問題就簡單多了,需要在android項目中使用spatialite時,只需要在AndroidStudio中新建一個Android Library Module,刪除自動生成的源碼包,然后將spatialite-android-library中的源碼包jsqlite拷貝到main-->java中,將AndroidManifest.xml中的package改為jsqlite,然后再在main下新建文件夾jniLibs,將so文件拷貝進去,然后再修改一下之前說過的Exception的問題,API版本的問題就OK了!
需要使用的時候,直接在項目dependencies中添加依賴:compile project(':your library')即可。