DeskClock
系统源码DeskClock7.1在AndroidStudio上编译
Install / Use
/learn @ansen360/DeskClockREADME
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系统库
将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')编译该库
compile的方式是编译使用,并且打包进apk中
provided的方式是编译使用,但不打包进apk中
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')
}
最后修改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
- 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签名文件引入系统签名
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
Related Skills
node-connect
341.0kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
84.4kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
341.0kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
84.4kCommit, push, and open a PR
