Android蹲坑的疑難雜癥集錦(兼Gradle) 二

Hello,大家吼,周一你快樂嗎<( ̄︶ ̄)?郭小司機又來開拖拉機啦,作為了一個非專業(yè)的分享猿,我知道也沒有人會想我的 ̄へ ̄,如今工作又忙碌起來,在產(chǎn)品經(jīng)理各種(nue)呵(dai)護,老板對需求的各種細(da)調(diào)(gai)下,只能在閑(tou)暇(lan)的時候才能碼碼水貨,以表慰♂藉。

</p> 



 這次我們繼續(xù)聊聊項目中遇到的問題吧,作為上輩子的天使,才換來今生的入坑Android,碼農(nóng)不易,我們的夢想就是,下輩子下班時,不再月上柳梢頭,可以看到夕陽下的奔跑,那是我們逝去的青春〒〒。

1、依賴包沖突

你是否也曾遇到過,興致勃勃的導(dǎo)入項目依賴,卻突然提醒你v23xxxxx,這時候你除了( ‵o′)凸,或者還可以試試下面這個,相信真愛一定可以成功編譯!當(dāng)然,如果依賴庫還應(yīng)用了高版本的特性,那么···還是升級你的支持包吧(。??)ノ!

compile('com.xxxx.xxxx:1.1.0') {
    exclude group: 'com.android.support', module: 'appcompat-v7'
}
2、隱藏虛擬按鍵

(亂入1)有時候,我們需要在全屏顯示的時候,隱藏虛擬按鍵,但是藏好后,一碰屏幕它們又歡快的蹦跶出來,這時候除了問候,你還可以試試下面度娘說的,也許你就再也看不到它們了。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    ((Activity) context).getWindow().getDecorView().setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 
                    | View.SYSTEM_UI_FLAG_FULLSCREEN 
                    | View.SYSTEM_UI_FLAG_IMMERSIVE);//API19
} else {
    ((Activity) context).getWindow().getDecorView().setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 
                    | View.SYSTEM_UI_FLAG_FULLSCREEN 
    );
}
3、Dialog的Gravity

(亂入2)這是個小問題,只是那時候讓本人調(diào)了好幾遍,那就是Dialog的gravity是Center的,如果你想讓它出現(xiàn)在上面,不要忘了它:

WindowManager.LayoutParams localLayoutParams = mDialog.getWindow().getAttributes();
localLayoutParams.gravity = Gravity.TOP;
4、NDK的so支持

產(chǎn)品吐槽你的包太大了?so太多?新依賴的包沒有對應(yīng)的so?這時候或者你可以選擇配置,要支持的動態(tài)鏈接庫。

一般其實'armeabi'和'armeabi-v7a'就足夠了,因為如今大部分X86的機器也支持,不過會跑不了win的X86虛擬機。(反正我不跑虛擬機好多年╮(╯_╰)╭)。其實你還可以選擇在app跑起來的時候,對應(yīng)下載支持的so實現(xiàn)熱插拔,因為某種程度上,使用對應(yīng)的so會讓APP跑得比較快,可惜我lan(。??)ノ。

android {

  
        ···

    defaultConfig {
        ···
        ndk {

            //APP的build.gradle設(shè)置支持的SO庫架構(gòu)

            abiFilters 'armeabi', 'armeabi-v7a', 'x86'
        }

    }
}
5、建立你的依賴管理

有時候你需要在你的各個lib module中,配置各種依賴版本、編譯版本、最大最小版本支持,這時候各種版本的升級、管理會顯示格外重復(fù),或者你可以選擇一個文件,來實現(xiàn)方(tou)便(lan)管理與維護。

  • 首先定義一個依賴管理gradle:dependence.gradle,將庫和版本都存放其中。
  • 在項目根gradle中導(dǎo)入:apply from: 'dependencies.gradle'。
  • 在其他項目中統(tǒng)一引用,這樣各個項目中的版本也能夠統(tǒng)一管理啦。

dependence.gradle


ext {

    androidBuildToolsVersion = "23.0.2"
    androidMinSdkVersion = 16
    androidTargetSdkVersion = 23
    androidCompileSdkVersion = 23
    
    supportLibraryVersion = '23.0.2'
    version = '1.5'

    android = [
            recyclerView: "com.android.support:recyclerview-v7:${supportLibraryVersion}",
            appcompat_v7: "com.android.support:appcompat-v7:${supportLibraryVersion}",
            support_v4  : "com.android.support:support-v4:${supportLibraryVersion}",
    ]

    view = [
            aaaaaa: "com.xxxxxx:aaaaaa:${version}",
    ]

   
}

app/lib 的build.gradle

android {

    def globalConfiguration = rootProject.extensions.getByName("ext")
    compileSdkVersion globalConfiguration.androidCompileSdkVersion
    buildToolsVersion globalConfiguration.androidBuildToolsVersion

    defaultConfig {
        applicationId "com.xxx.xxxx"

        minSdkVersion globalConfiguration.androidMinSdkVersion
        targetSdkVersion globalConfiguration.androidTargetSdkVersion

        versionCode 1
        versionName "1.0.0"


        ndk {
            //設(shè)置支持的SO庫架構(gòu)
            abiFilters 'armeabi', 'armeabi-v7a', 'x86'
        }

    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    def view = rootProject.ext.view
    def android = rootProject.ext.android
    compile android.appcompat_v7
    compile view.aaaaaa
}
6、配置你的線上和線下版本

實際開發(fā)中,我們可以經(jīng)常需要,在線上和線下版本切換,這時候不同環(huán)境中的appid、簽名、URL都需要對應(yīng)有不同的配置,還有AndroidManifest下的各種meta···(ノ?益?)ノ彡┻━┻,冷靜冷靜,因為這時候可愛又迷人的Gradle,又可以讓你高潮(ˉ ̄~) 。

//配置不同的簽名
signingConfigs {
    debug {
        //密匙的路徑
        storeFile file("../debug.jks")
        storePassword "123456"
        keyAlias "debug"
        keyPassword "123456"
    }
    release {
        //密匙的路徑
        storeFile file("../release.jks")
        storePassword "123456"
        keyAlias "release"
        keyPassword "123456"
    }
}
//不同編譯下對應(yīng)的不同配置
buildTypes {
    debug {
        //混淆
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        //對應(yīng)簽名
        signingConfig signingConfigs.debug
        //URL
        buildConfigField "String", "URL_HOST",
                "\"https://XXXX.XXXX.XXXX/""
        buildConfigField "String", "QQ_APPID", "\"11111111111\""
        buildConfigField "String", "QQ_APPSECRET", "\"XXXXXXXXXXXXXXXX\""
        buildConfigField "Boolean", "DEBUG_TAG", "true"
        //對應(yīng)修改AndroidManifest的各種KEY_
        manifestPlaceholders = [BAIDU_KEY_VAULE        : "fffffffffffffffffffff",
                                UMENG_CHANNEL_VALUE    : "xxxxxxxxx"]
    }
    release {
        //混淆
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        //對應(yīng)簽名
        signingConfig signingConfigs.release
        //URL
        buildConfigField "String", "URL_HOST",
                "\"https://XXXX.XXXX.XXXX/""
        buildConfigField "String", "QQ_APPID", "\"11111111111\""
        buildConfigField "String", "QQ_APPSECRET", "\"XXXXXXXXXXXXXXXX\""
        buildConfigField "Boolean", "DEBUG_TAG", "false"
        //對應(yīng)修改AndroidManifest的各種KEY_
        manifestPlaceholders = [BAIDU_KEY_VAULE        : "fffffffffffffffffffff",
                                UMENG_CHANNEL_VALUE    : "xxxxxxxxx"]
    }
}
7、視頻出現(xiàn)有聲音但是沒畫面

(亂入3)額,話風(fēng)突變啊,因為這是最后一條啦╮(╯_╰)╭。最后扯扯蛋收尾吧。

如果使用IJKPlayer遇到這種問題,首先查看下你的視頻編碼方式是不是H264,還有pixel format屬性,如果這個屬性是N/A,那么一般都是錄制的視頻和FFMPEG的兼容問題,你可以選擇更換視頻的錄制配置;或者更換播放器,使用原生的mediaPlayer、干兒子EXOPlayer,一般它們也是支持的。如果它們也不支持,那么還要這視頻干啥?

好了,水完了。
最后這是我的Github,來逛逛嗎( ﹁ ﹁ ) ~→ https://github.com/CarGuo 。

來嘛來嘛
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容