Android:导入所需的系统jar包到Android studio

一般系统接口是hide修饰的隐藏类

1. 修改对于的AIDL文件,根据编译信息获知所需的jar包。

  mmm /frameworks/base/ show commands > log.txt 2>&1

  out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar   (frameworks.jar是dex格式,非原生态Java文件)

2.导入classes.jar到Android studio工程:

将系统jar包放到module的libs文件夹下,在Module下的build.gradle添加:

provided files(‘libs/classes.jar‘)

或图形如下操作:

在Project下的build.gradle文件中添加:

  gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs.add(‘-Xbootclasspath/p:app/libs/android_framework.jar‘)
    }
}

修改优先级:

allprojects {
    repositories {
        jcenter()
    }

    //添加以下代码,使classes-full-debug.jar包编译先于android.jar
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs.add(‘-Xbootclasspath/p:setting\\libs\\frameworks.jar‘)
        }
    }
}

找到对应Module下的.iml ,手动修改jar包引入顺序

把Android SDK的配置项放到最后,否则还是会提示找不到系统API:

3.编译错误:

a. java.lang.OutOfMemoryError: GC overhead limit exceeded

Android Studio Google jar causing GC overhead limit exceeded error
http://stackoverflow.com/questions/25013638/android-studio-google-jar-causing-gc-overhead-limit-exceeded-error

解决方法: build.gradle中添加:

dexOptions {
    javaMaxHeapSize "4g"
}

b. Too many field references

Building Apps with Over 65K Methods
https://developer.android.com/tools/building/multidex.html

解决方法:

    defaultConfig {

        // Enabling multidex support.
        multiDexEnabled true
    }
dependencies {

    compile ‘com.android.support:multidex:1.0.0‘

}

  AndroidManifest.xml 中添加:android:name="android.support.multidex.MultiDexApplication"

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.thisway.app_0001_leddemo" >

    <application
        android:name="android.support.multidex.MultiDexApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

补充: scop修改为Provided,只参与编译不打包进apk。

provided files(‘libs/classes-full-debug.jar‘)     Android studio3.0 后,provided 被 compileOnly 替代

打印指定 TAG/等级 的log:  logcat LedHal:I *:S

4. 问服务使用反射

import android.os.IBinder;
        try {
            //iLedService = ILedService.Stub.asInterface(ServiceManager.getService("led"));
            Method getService = Class.forName("android.os.ServiceManager").getMethod("getService", String.class);
            Object ledService = getService.invoke(null, "led"); //static对象第一次参数可以是NULL,调用invoke IBinder向上转换为Object,如有使用IBinder返回需强制转换
            Method asInterface = Class.forName("android.os.ILedService$Stub").getMethod("asInterface", IBinder.class);
            proxy = asInterface.invoke(null, ledService);
            ledCtrl = Class.forName("android.os.ILedService$Stub$Proxy").getMethod("ledCtrl", int.class, int.class);  //设置第i盏灯熄灭: ledCtrl.invoke(proxy, i, 0);
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }

    

原文地址:https://www.cnblogs.com/blogs-of-lxl/p/11756466.html

时间: 2024-10-11 20:24:00

Android:导入所需的系统jar包到Android studio的相关文章

Eclipse中添加Android系统jar包

这样做的好处是,可以使用Eclipse开发系统应用了,这样可以调用系统中才使用的API. 1.首先在项目中右击->属性.如图所示依次操作 2.添加User Library 3.第一次要新建User Library名字 注:一定要勾选上System library(addedto the boot class path)否则会出现错误1. 4.添加jar包 2.${ANDROID_SOURCE}/out/target/common/obj/JAVA_LIBRARIES/framework_inte

android 导入自己的生成的jar,老是 could not find class

最近开始学习android,开发一个小项目,功能很简单,就是从服务器上获取数据,之后显示在手机上.打算把访问服务器的功能打包成一个jar文件.然后android 引入jar包. 在eclipse 里 新建了一个java项目.之后完成代码测试,打包成jar文件 都很顺利.引用到android项目中,调试总报错,could not find class . 折腾了几天,都没有解决,几乎试遍 了,网上的所有方法都不行.后来突然意识到,是不是java项目的jar 不能引用到android 中.后来新建一

Android——eclipse共享library以及导出jar包

android的apk在在eclipse上进行开发的时候,有时候需要import其它包中的一些class,正常的方法就是在java build path中library 中添加 jar 包! 转载注明出处:http://blog.csdn.net/jscese/article/details/36627195 一.apk之间共享Class 在eclipse中的一个androoid工程想要使用另外一个工程的class,可以在工程的project.properties文件中添加: android.l

Android 混淆打包不混淆第三方jar包

项目因为要发布,所以要混淆打包. 混淆打包流程: 1.在proguard-project.txt文件中添加不需要混淆的类和第三方的jar包 这个是保持自己包中不需要混淆的类,如果有些类调用了jni也不需要混淆,不然会出错.还有如果项目中有其他项目作为library引入,那这些项目的一些类也不能混淆. 这个是保持项目中的第三方jar不混淆 另外加上上面几句话,不然会在控制台中报warning警告 2.在project.properties文件中把proguard.config=${sdk.dir}

Android 升级ADT到22第三方Jar包导致的ClassNotFoundException和NoClassDefFoundError异常解决

在使用异步载入框架Android-Universal-Image-Loader的Jar包的时候遇到错误: java.lang.NoClassDefFoundError:com.nostra13.universalimageloader.core.ImageLoaderConfiguration$Builder后来通过细致的研究发现这个和框架没有关系,这个是因为 你的ADT升级到22出的问题,ADT22比ADT21更加的合理.在adt17的版本号之后.导入第三方jar包,要建立一个libs文件夹,

【转】 Android——eclipse共享library以及导出jar包

原文网址:http://blog.csdn.net/jscese/article/details/36627195 android的apk在在eclipse上进行开发的时候,有时候需要import其它包中的一些class,正常的方法就是在java build path中library 中添加 jar 包! 转载注明出处:http://blog.csdn.net/jscese/article/details/36627195 一.apk之间共享Class 在eclipse中的一个androoid工

【jar包】Android——eclipse共享library以及导出jar包

android的apk在在eclipse上进行开发的时候,有时候需要import其它包中的一些class,正常的方法就是在java build path中library 中添加 jar 包! 转载注明出处:http://blog.csdn.net/jscese/article/details/36627195 一.apk之间共享Class 在eclipse中的一个androoid工程想要使用另外一个工程的class,可以在工程的project.properties文件中添加: [html] vi

【Android端】代码打包成jar包/aar形式

Android端代码打包成jar包和aar形式: 首先,jar包的形式和aar形式有什么区别? 1.打包之后生成的文件地址: *.jar:库/build/intermediates/bundles/debug(release)/classes.jar *.aar:库/build/outputs/aar/libraryname.aar 区别:jar包只包含了classes文件,不包含资源文件:aar不仅包含了classes文件,还包含资源文件 并且,aar的这个可以发布到maven库,然后使用者直

Android——eclipse共享library以及导出jar包[转]

目录(?)[-] 一apk之间共享Class 二apk导出jar包 android的apk在在eclipse上进行开发的时候,有时候需要import其它包中的一些class,正常的方法就是在java build path中library 中添加 jar 包! 转载注明出处:http://blog.csdn.net/jscese/article/details/36627195 一.apk之间共享Class 在eclipse中的一个androoid工程想要使用另外一个工程的class,可以在工程的