⑴ android 集成三方SDK编译时classes.jar文件冲突
这几天的任务是将mapbox的工程合到程序中去,但是合并过程却出现了问题
合并方法:在app的build.gradle中添加
dependencies {
compile ('com.mapbox.mapboxsdk:mapbox-android-sdk:0.7.4@aar'){
transitive=true
}
}
但是合并后会报错:
Error:Execution failed for task ':app:dexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin/java'' finished with non-zero exit value 2
这个错误是由于jar包冲突,解决方法如下:
方法一:找到冲突包,将冲突包删除,一般冲突包为'com.android.support:appcompat-v7:22.2.0'或者'com.android.support:support-v4:22.2.0',但是我删除冲突包后,依然报错,于是使用方法二
方法二:因为我的冲突包是'com.android.support:support-v4:22.2.0',所以找到项目根目录-build-intermediates-dex-cache-cache.xml文件,将其中跟v4有关的全部删除,然后clean project,然后将compile改为provided如下:
dependencies {
compile 'com.vividsolutions:jts:1.13'
compile 'com.squareup.okhttp:okhttp:2.4.0'
compile 'com.squareup.okhttp:okhttp-urlconnection:2.4.0'
compile 'com.nineoldandroids:library:2.4.0'
compile 'com.jakewharton:disklrucache:2.0.2'
provided 'com.android.support:support-v4:21.0.0'
}
⑵ android系统编译jar包给app使用
最近在android O编译系统jar包给应用使用遇到了点问题,网上也没有找到解决方案,这里记录下。
编译方法参考网上博客就可以, android源码编译jar包
最终生成了javalib.jar,改名为 tvManager.jar即可。注意:如果没有指定LACAL_JACK_ENABLED选项,则默认是enabled,将会生成classes.jack文件,不会产生classes.jar包!
正常按照上面方案就可以编译出jar包,导入到AS里面就可以使用,下面说下我遇到的问题
遇到classes.jar.toc被依赖, 但是怎么编译都没有编译出来,网上也没有找到对应的方法,编译错误如下:
https://www.cnblogs.com/wangqiang9/p/9679466.html
https://stackoverflow.com/questions/43471694/how-to-generate-classes-dex-toc-files
⑶ Android Studio 3.5导入AOSP编译的classes.jar
一、适用场景
我们在写应用时可能会需要调用系统隐藏的API,这些API是我们无法直接访问的,报如下错误:
此时,我们需要将系统AOSP的out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar导入到Android Studio中,使app能够访问这些接口。
二、实现步骤
Step1 . 在app目录下建立libs文件夹,并将classes.jar包放入该路径
Step2 .在app目录上右键【Open Mole Settings】,点击左侧【Dependencies】,选择app,点击【+】选择【2 Jar Dependency】,添加
选择我们的libs/classes.jar,点击【OK】
Step3 .在Mole的build.gradle中,dependencies自动增加依赖配置,注释掉下面一行
implementation fileTree(dir: 'libs', include: ['*.jar'])
并将implementation files('libs/classes.jar')改为
compileOnly files('libs/classes.jar')
最终如下图所示
Step4 .修改Project的build.gradle,在allProjects中增加如下语句
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs.add('-Xbootclasspath/p:app\\libs\\classes.jar')
}
}
Step5 .修改jar包优先级,在Moels的app.iml文件中找到我们的classes.jar包所在行,
<orderEntry type="library" name="Gradle: __local_aars__:/Users/mrwong/AndroidStudioProjects/uart_daemon/app/libs/classes.jar:unspecified@jar" level="project" />
将其移动到
<orderEntry type="jdk" jdkName="Android API 29 Platform" jdkType="Android SDK" />
这一行之上,最终如下图所示:
至此,app可以优先访问我们自己的jar包 。
⑷ android APK中的classes.dex反编译成jar怎么无法运行。
Android 是 .apk 文件
网上有反编译的软件 可以反编译成源代码,你可以去网上找找,我用的是 jd-gui-0.3.3
但是,一般来说 程序员在 开发完成后都会混淆打包,即使是反编译出来,也会有很多 abcdefg,,,, 表示的乱码
有的软件 没混淆 就可以得到源码,但是这样的软件 一般都能在网上找到开源的相关的代码
祝你成功 !