日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

gradle linux中文乱码,Gradle 构建 Android 应用常见问题解决指南

發布時間:2023/12/20 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gradle linux中文乱码,Gradle 构建 Android 应用常见问题解决指南 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

Android gradle 插件已經發展到0.5.7,同時gradle 本身也到了1.8,相比兩個月前,android gradle 更快,更完善,也更好用了,為了讓各位androider 早日用上gradle這樣的神器,特地寫一篇關于gradle一些奇葩錯誤的解決指南.

使用最新的gradle android插件

以前我們寫的時候會這么寫

dependencies { classpath 'com.android.tools.build:gradle:0.5.0'}

不過,由于android gradle 插件的開發還是很活躍的,而且目前而言,可能還存在一些我們不知道的坑,但是,別人踩過,后邊,官方修復,為了不踩坑,我建議android gradle 始終保持最新版本,寫法如下:

dependencies { classpath 'com.android.tools.build:gradle:0.5+'}

由于代碼編碼與編譯環境編碼不一致,導致構建失敗

有時候,我們的代碼使用utf-8 保存的,但是,進行gradle build 的環境是gbk這類的,這時候會包如下錯誤:

15: 錯誤: 編碼GBK的不可映射字符

* 鍑虹幇涓枃璇鋒敞鎰?

這個時候我們就需要手動的設置編譯時編碼類型.

tasks.withType(Compile) { options.encoding = "UTF-8"}apply plugin: 'android'android {}

android support v4 重復引用問題

UNEXPECTED TOP-LEVEL EXCEPTION:Java.lang.IllegalArgumentException: already added: Landroid/support/v4/app/ActivityCompatHoneycomb; at com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:123) at com.android.dx.dex.file.DexFile.add(DexFile.java:163) at com.android.dx.command.dexer.Main.processClass(Main.java:490) at com.android.dx.command.dexer.Main.processFileBytes(Main.java:459) at com.android.dx.command.dexer.Main.access$400(Main.java:67) at com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:398) at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:245)

出現這個問題的原因一般是由于我們這樣的寫法導致:

dependencies { compile fileTree(dir: 'libs', include: '*.jar')}

某個相同的jar包,被復制到了build目錄導致重復編譯使編譯時失敗,

由于這個問題android support v4 出現的比較多,所以同類型的都歸類為v4 問題吧.

要避免這個問題,我們盡量少使用依賴某個目錄下所有包,畢竟android項目不想java web項目動不動就有好幾十jar 包依賴.要修復這個v4,原理很簡單,可以使用依賴maven的寫法.

dependencies { compile 'com.android.support:support-v4:13.0.0'}

打包后缺少*.so文件

用指定依賴包的方式打包,我們會發現,最終打包后的jar沒有了*.so文件,這個時候,我們需要自定義一個tasks,寫如下:

task copyNativeLibs(type: Copy) { from(new File('libs')) { include '**/*.so' } into new File(buildDir, 'native-libs')}tasks.withType(Compile) { compileTask -> compileTask.dependsOn copyNativeLibs }clean.dependsOn 'cleanCopyNativeLibs'tasks.withType(com.android.build.gradle.tasks.PackageApplication) { pkgTask -> pkgTask.jniDir new File(buildDir, 'native-libs')}

這樣,在編譯時,就會自動把libs目錄下的**/*.so 文件復制到apk里面了.

構建多渠道包

在最新版本的gradle 0.5.7 中,構建多渠道包比之前簡單多了,在以前,你需要這么寫:

android { buildTypes { hiapk { packageNameSuffix ".hiapk" } playstore { packageNameSuffix ".playstore" } } sourceSets { hiapk { manifest.srcFile 'hiapk/AndroidManifest.xml' } playstore { manifest.srcFile 'hiapk/AndroidManifest.xml' } }}

要替換某個類型的文件需要自己手動寫,渠道多了,這代碼量是可想而知的多,在0.5.7中,進行了一個約定規則,構建,渠道包你只需

android { buildTypes { hiapk { packageNameSuffix ".hiapk" } playstore { packageNameSuffix ".playstore" } } sourceSets { hiapk.setRoot('build-types/hiapk') playstore.setRoot('build-types/playstore') }}

在項目的根目錄下創建一個build-types的目錄,在創建對應渠道的子目錄,然后把一些,諸如要替換AndroidManifest.xml,里面友盟渠道號什么的,直接把xml復制進去就行,gradle在構建項目的時候,會自動的優先使用build-types下目錄文件的目錄,諸如,根據不同渠道,不同國家換個程序圖標什么的,都只要放到目錄下即可.

推薦閱讀:

總結

以上是生活随笔為你收集整理的gradle linux中文乱码,Gradle 构建 Android 应用常见问题解决指南的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。