AndroidStudio导入系统源码DeskClock编译生成系统签名apk

DeskClock源码路径:/repo/packages/apps/DeskClock/

导入DeskClock源码到AndroidStudio
  • 1.拷贝源码到AS工程

使用AndroidStudio创建DeskClock工程,指定Android源码相同的包名

把DeskClock中src、res、AndroidManifest.xml、assets复制到创建的AS工程中

查看.mk文件发现依赖datetimepicker工程库,在AS工程中创建一个Module,module类型为AndroidLibrary,同理把对应的源码复制到该module中.效果图如下:

datetimepicker源码路径:/repo/frameworks/opt/datetimepicker/

  • 2.导入framework.jar系统库

目的是为了在AndroidStudio上调用系统隐藏API及自定义的framrwork API.

将repo/out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar复制出来,重命名为framework.jar;

为了区分系统的jar包,在如上图中app目录下创建ext_libs目录,将framework.jar复制到该目录中;

build.gradle dependencies{}中添加provided files(‘ext_libs/framework.jar’)编译该库

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 project(':datetimepicker')
    compile 'com.android.support:support-v13:26.0.0-alpha1'
    compile 'com.android.support:design:26.0.0-alpha1'
    compile 'com.android.support:gridlayout-v7:26.0.0-alpha1'
    provided files('ext_libs/framework.jar')
}

//compile的方式是编译使用,并且打包进apk中
//provided的方式是编译使用,但不打包进apk中

Tips:
    Android Studio3.0后依赖方式关键字变更(括号中为2.x版本的关键字):
    implementation (compile)    // 依赖的库将会参与编译和打包(依赖不会传递,和以下两者推荐使用implementation,implementation会使编译速度有所增快)
    api(compile)    // 依赖的库将会参与编译和打包(依赖可以传递)
    compileOnly(provided)   // 只在编译时有效,不会参与打包 
    runtimeOnly(apk)    // 只在生成apk的时候参与打包,编译时不会参与,很少用
    testImplementation(testCompile)     // 只在单元测试代码的编译以及最终打包测试apk时有效
    debugImplementation(debugCompile)   // 只在debug模式的编译和最终的debug apk打包时有效
    releaseImplementation(releaseCompile)   // 仅仅针对Release 模式的编译和最终的Release apk打包

最后修改project的build.gradle

在allprojects中添加以下代码:

allprojects {
    repositories {
        jcenter()
    }
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs.add('-Xbootclasspath/p:app\\ext_libs\\framework.jar')
        }
    }

}

Xbootclasspath/p:path – 让jvm优先于默认的bootstrap去加载path中指定的class

Tips:
    -Xbootclasspath是设定在指定路径中装载系统运行时类
    我们一般会用到下面两个参数:
    -Xbootclasspath/a:path,先搜索缺省路径在搜索path中的路径
    -Xbootclasspath/p:path,先搜索path中的路径在搜索缺省路径
  • 3.导入其他的依赖库

datetimepicker中添加

compile 'com.android.support:appcompat-v7:26.0.0-alpha1'

DeskClock中添加

compile project(':datetimepicker')
compile 'com.android.support:support-v13:26.0.0-alpha1'
compile 'com.android.support:design:26.0.0-alpha1'
compile 'com.android.support:gridlayout-v7:26.0.0-alpha1'

解决所有报错,成功编译出apk

  • 4.配置系统签名

    对于Eclipse或AndroidStudio已经编出来的apk手动重新签名:
    创建SignApk文件夹,把需要重新签名的apk和platform.x509.pem、platform.pk8、signapk.jar文件拷贝到该目录下
    对应文件路径:
    platform.x509.pem、platform.pk8:build/target/product/security
    signapk.jar:out/host/linux-x86/framework
    signapk源码路径:build/tools/signapk
    执行以下命令生成系统签名后的apk
    java -jar signapk.jar platform.x509.pem platform.pk8 old.apk new.apk

使用AndroidStudio配置系统签名:

1).生成签名文件
在AS工具类上选择Build -->> Generate Signed APK,如果没有就Create new 创建生成一个SignXXX.jks签名文件

在DeskClock工程目录下创建SignApk文件夹保存签名文件

2.)使用keytool-importkeypair对生成的SignXXX.jks签名文件引入系统签名

keytool-importkeypair下载

platform.x509.pem、platform.pk8路径:build/target/product/security

把keytool-importkeypair、platform.x509.pem、platform.pk8和SignXXX.jks签名文放在同一目录下,执行以下命令

./keytool-importkeypair -k [jks文件名] -p [jks的密码] -pk8 platform.pk8 -cert platform.x509.pem -alias [jks的别名]

./keytool-importkeypair -k SignXXX.jks -p 123456 -pk8 platform.pk8 -cert platform.x509.pem -alias SignXXX

执行完后(需要在Linux下执行),我们就得到系统签名SignXXX.jks,替换SignApk中的签名文件

3.)配置build.gradle编译时直接生成签名的apk

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "com.android.deskclock70"
        minSdkVersion 21
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    signingConfigs {
        release {
            storeFile file("../SignApk/SignXXX.jks")
            storePassword '123456'
            keyAlias 'SignXXX'
            keyPassword '123456'
        }

        debug {
            storeFile file("../SignApk/SignXXX.jks")
            storePassword '123456'
            keyAlias 'SignXXX'
            keyPassword '123456'
        }
    }

}

直接运行便可生成配置系统签名的apk

代码地址: https://github.com/ansen360/DeskClock


AndroidStudio配置使用自定义SDK

AndroidStudio项目需要调用的API是我们自己framework增加的API时,由于默认使用的官方SDK.因此会找不到对应的API.

解决方案是: 替换AndroidStudio SDK中的SDK为我们系统编译出来的SDK

  • 1.在我们系统源码linux中执行make sdk 生成android.jar文件.

路径: repo/out/target/common/obj/PACKAGING/android_jar_intermediates/android.jar

  • 2.将linux中android.jar替换掉AndroidStudio SDK中sdk\platforms\android-24\android.jar文件

相关链接直达:

Android系统源码SystemUI导入eclipse编译

Android系统源码Settings导入eclipse

AndroidStudio导入系统源码DeskClock编译生成系统签名apk

ContactsProvider系统源码导入配置AndroidStudio编译环境

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值