天天看點

關于frameworks層源碼編譯

1、編譯環境以及指令行

之前有做一個關于源碼層編譯的項目,現在有時間了來總結一下,同時友善新手參考

我們做源碼編譯使用的是Putty沒有直接安裝linux系統,隻需要伺服器給我建立一個賬戶就行

關于frameworks層源碼編譯

第一次打開putty,然後用伺服器給你建立的帳号密碼,登入進去,以後會有session記錄你的帳号密碼不需要每次輸入帳号密碼;

登入後的界面如下

關于frameworks層源碼編譯

然後就是cd 指令進入伺服器網盤了比如我們的網盤如圖:

關于frameworks層源碼編譯

然後執行初始化的一些指令

先輸入 source build/envsetup.sh  
然後  lunch   //73是我們的啟動模式,可以改變的
           

然後就是進入我們要編輯的源碼目錄如圖:

關于frameworks層源碼編譯

進入項目目錄以後,就是編譯指令

編譯完成之後我們找到編譯好的apk位置,如圖

關于frameworks層源碼編譯

這個apk就可以直接安裝到手機,指令行安裝到手機之前需要電腦連結手機,安裝到手機也可以通過指令行來進行,指令如下

//覆寫安裝APK   
adb push Z:\ot8234G_work\out/target/product/p301/system/app/WalkliveLauncher/WalkliveLauncher.apk
//system目錄之後的就是系統目錄了,也就是framework層
或者使用install指令安裝
adb install -r              Z:\ot8234G_work\out/target/product/p301/system/app/WalkliveLauncher/WalkliveLauncher.apk && adb shell am start -n com.onething.flowpusher/.ui.MainActivity
           

然後總結一下幾個比較常用的指令

adb devices 
 安裝軟體 --将指定的apk檔案安裝到裝置上

adb install <apk檔案路徑> 
 解除安裝軟體

adb uninstall <軟體名> 
adb uninstall -k <軟體名>         如果加 -k 參數,為解除安裝軟體但是保留配置和緩存檔案.
 登入裝置shell

adb shell  --這個指令将登入裝置的shell.
adb shell <command指令>      後面加<command指令>将是直接運作裝置指令, 相當于執行遠端指令

 從電腦上發送檔案到裝置 --用push指令可以把本機電腦上的檔案或者檔案夾複制到裝置(手機)

adb push <本地路徑> <遠端路徑>

adb remount     ## remount '/system'分區 as read-write
 從裝置上下載下傳檔案到電腦 --用pull指令可以把裝置(手機)上的檔案或者檔案夾複制到本機電腦

adb pull <遠端路徑> <本地路徑> 
 顯示幫助資訊(包括各種指令用法與含義) --

adb help 顯示幫助指令
adb connect +ip位址 連結裝置
           

2、然後說一下代碼編輯器

一般可以通過eclipse直接導入編輯

使用Androidstudio也是可以的,我們需要建立一個project,然後把伺服器源碼拉下來,我這裡有個比較簡便的方法,隻需要修改兩個檔案

檔案修改好以後,還需要點選AS上面的重新整理按鈕即可拉取伺服器源碼;

如圖

關于frameworks層源碼編譯

第一個是app目錄下面的build.gradle,請參考如下代碼修改

apply plugin: 'com.android.application'

android {
    compileSdkVersion Integer.parseInt(COMPILE_SDK_VERSION)
    buildToolsVersion BUILD_TOOLS_VERSION
    defaultConfig {
        applicationId PACKAGE_NAME
        minSdkVersion Integer.parseInt(MIN_SDK_VERSION)
        targetSdkVersion Integer.parseInt(TARGET_SDK_VERSION)
        versionCode Integer.parseInt(VERSION_CODE)
        versionName VERSION_NAME
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    sourceSets {
        main {
            manifest.srcFile MANIFEST_SRC_FILE
            java.srcDirs = [JAVA_SRC_DIRS]
            resources.srcDirs = [RESOURCES_SRC_DIRS]
            aidl.srcDirs = [AIDL_SRC_DIRS]
            renderscript.srcDirs = [RENDERSCRIPT_SRC_DIRS]
            res.srcDirs = [RES_SRC_DIRS]
            assets.srcDirs = [ASSETS_SRC_DIRS]
        }
    }

    android.applicationVariants.all { variant ->
        variant.outputs.each { output ->
            output.processManifest.doLast {
                def manifestFile = output.processManifest.manifestOutputFile
                def updatedContent = manifestFile.getText('UTF-8').replaceAll("android:sharedUserId=\"android.uid.system\"", "")
                manifestFile.write(updatedContent, 'UTF-8')
            }
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: LIBS)
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    testCompile 'junit:junit:4.12'
    compile "com.android.support:support-v4:${SUPPORT_LIBRARY_VERSION}"
    compile "com.android.support:appcompat-v7:${SUPPORT_LIBRARY_VERSION}"
}
           

另一個是gradle.properties檔案,參考如下代碼修改

VERSION_CODE=
VERSION_NAME=
PACKAGE_NAME=com.onething.FlowPusherTest.test//包名
MIN_SDK_VERSION= //版本可自定定義
COMPILE_SDK_VERSION=
TARGET_SDK_VERSION=
BUILD_TOOLS_VERSION=
SUPPORT_LIBRARY_VERSION=
MANIFEST_SRC_FILE=Z:/ot8234G_work/packages/apps/FlowPusherTest/AndroidManifest.xml//這個是伺服器上面的配置檔案
JAVA_SRC_DIRS=Z:/ot8234G_work/packages/apps/FlowPusherTest/src//伺服器上面代碼目錄
RESOURCES_SRC_DIRS=Z:/ot8234G_work/packages/apps/FlowPusherTest/src//伺服器上面代碼目錄
AIDL_SRC_DIRS=Z:/ot8234G_work/packages/apps/FlowPusherTest/src//伺服器上面代碼目錄
RENDERSCRIPT_SRC_DIRS=amlogic_6/packages/apps/FlowPusherTest/src//伺服器上面代碼目錄
RES_SRC_DIRS=Z:/ot8234G_work/packages/apps/FlowPusherTest/res//伺服器上面代碼目錄的資源檔案
ASSETS_SRC_DIRS=Z:/ot8234G_work/packages/apps/FlowPusherTest/assets//伺服器上面代碼目錄的資源檔案
LIBS=Z:/ot8234G_work/packages/apps/FlowPusherTest/libs//伺服器上面代碼目錄的lib

//如果看不懂的,就用eclipse導入吧
           

然後代碼修改編輯過程中需要注意的是,編輯器裡面如果要添加一下compile,需要下載下傳jar包然後添加到伺服器,并且在mk檔案裡面增加依賴,如圖

關于frameworks層源碼編譯
關于frameworks層源碼編譯

jar包添加到圖示的libs目錄裡面,mk檔案裡面參考圖檔代碼修改,否則在linux系統下mm會報錯

好像說完整個流程了~~就這樣吧