天天看点

关于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会报错

好像说完整个流程了~~就这样吧