編輯:關於Android編程
在0.4.0版本時我總結了一篇文章,android studio V0.4.0調整。
之前的理解有點不到位,把最近的理解記錄下,大家幫我糾正,謝謝。
先上腳本代碼:
android { ...... task copyNativeLibs(type: Copy) { from fileTree(dir: 'libs', include: '*/*.so' ) into 'build/native-libs' } tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs } clean.dependsOn 'cleanCopyNativeLibs' tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask -> pkgTask.jniFolders = new HashSet() pkgTask.jniFolders.add(new File(projectDir, 'build/native-libs')) println pkgTask.jniFolders } }
2.compileTask.dependsOn copyNativeLibs 把1中的task依賴於編譯任務,這樣每次在編譯前,就是把1中的copyNativeLibs方法執行;
3.clean.dependsOn 'cleanCopyNativeLibs'這行腳本容易理解,把clean build/native-libs 依賴於gradlew clean;
4.tasks.withType,在這塊腳本中需要注意理解兩點:
a.之前我們通過1把我們需要的so文件都拷貝到主項目(app)的build/native-libs中;
b.jniFolders,我的理解是打包時默認的jni文件目錄。把默認的jniFolders修改成我們自己指定的目錄,即build/native-libs,從而so文件便能夠被打入apk中。
有關多module的so文件加載:
首先,說說你的理解,多module項目,某個子moudle可能需要jni支持,同樣也面臨so文件打包問題。通過上面的例子我嘗試了幾種方案。
1.直接把所有子module的so文件都拷貝到主項目的libs中;
2.子module中的build.gradle同樣包含上述腳本,把build/native-libs修改成主項目的絕對路徑;
3.修改copyNativeLibs,這裡既然做so文件的拷貝操作,那我直接把子module的dir加入,下面是對應的腳本;
android { ...... task copyNativeLibs(type: Copy) { def libPath = project(':lib').projectDir.absolutePath + '/libs' println libPath from fileTree(dir: 'libs', include: '*/*.so' ) into 'build/native-libs' from fileTree(dir: libPath, include: '*/*.so' ) into 'build/native-libs' } tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs } clean.dependsOn 'cleanCopyNativeLibs' tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask -> pkgTask.jniFolders = new HashSet() pkgTask.jniFolders.add(new File(projectDir, 'build/native-libs')) println pkgTask.jniFolders } }
說明:
a.project(':lib')中的lib是需要jni支持的子module,這裡書寫子module的具體名稱,可以參照setttings.gradle;
b.libPath獲取到子moudle下存放so文件的libs絕對目錄;
c.多個子module同樣方法處理;
以上解決方案是我本人多次嘗試得出的結論,如有理解偏差,歡迎留言或者郵件我(郵箱:[email protected])
Android設備有兩種文件存儲區域:內部存儲和外部存儲 (internal and external storage)。這名字來自早期Android,那時大多數Andr
1.錯誤描述今天在Android4.4 的小米4手機上運行我的程序的時候沒有報錯,而在Android 5.1的華為P7上運行我的程序的時候報了以下的錯誤,錯誤提示如下:E
本節引言: 本節帶來的是Android中的SmsManager(短息管理器),見名知意,就是用來管理手機短信的, 而該類的應用場景並不多,一般是我
效果圖:這個對框完全繼承、仿照AlertDialog,只是實現了自定義效果。另外,沒有實現setIcon,因為iphone中的對話框多數都沒有圖標。附件包含例子、jar包