AndroidStudio 编译配置

AndroidStudio 编译配置

  • Module中合并第三方jar包
    • AndroidStudio新建Module
  • 依赖原生模块jar包的解决办法
    • Studio配置改动
    • 源码编译改动

Module中合并第三方jar包

  • 前段时间配置的,没有及时记录,需要重新整理及时更新,不然又忘的差不多了

AndroidStudio新建Module

参照Android Developer官方文档 https://developer.android.com/studio/projects/android-library 描述新建一个Module “File > New > New Module”,根据实际需要选择Jar Module可以选择Android Library(.aar)或者Java Library(.jar),区别在于Android Library可以支持资源共享。

依赖原生模块jar包的解决办法

Studio配置改动

  • gradle修改src目录
    Android源码目录树通常是如下结构

    ---src/
    ---res/
    ---AndroidManifest.xml
    ---Android.mk
    

    但是在AndroidStudio建立的应用工程目录结构通常是在app/src/main目录下:

    ---java/
    ---res/
    ---AndroidManifest.xml
    

    为了在不改变目录结构的情况下将源码导入AndroidStudio,需要在app/build.gradle文件中增加sourceSets配置:

    android {
    	...
    	sourceSets {
    		main {
    			java.srcDirs = ['../src']
    			res.srcDirs = ['../res']
    			manifest.srcFile = '../AndroidManifest.xml'
    		}
    	}
    	...
    }
    
  • framework hide接口调用

  • 如何使用及隐藏platform签名
    app/build.gradle中增加如下内容:

    def keystorePropertiesFile = rootProject.file(".keystore")
    def keystoreProperties = new Properties();
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
    android {
    	signingConfigs {
        	debug {
            	keyAlias keystoreProperties['keyAlias']
           		keyPassword keystoreProperties['keyPassword']
            	storeFile file(keystoreProperties['storeFile'])
            	storePassword keystoreProperties['storePassword']
        	}
        	release {
            	keyAlias keystoreProperties['keyAlias']
            	keyPassword keystoreProperties['keyPassword']
            	storeFile file(keystoreProperties['storeFile'])
            	storePassword keystoreProperties['storePassword']
        	}
    	}
    }
    

    .keystore和platform.jks签名文件都放在项目的根目录下即可。

  • jar包compileonly设置
    实际调试过程中framework.jar不需要编译到apk中,可以防止apk过大和函数过多导致的gradle编译失败的问题,需要修改app/build.gradle:

    dependencies {
    	...
    	compileOnly files('libs/framework.jar')
    	...
    }
    

    同时修改根目录下的build.gradle:

    allprojects {
    	...
    	gradle.projectsEvaluated {
        	tasks.withType(JavaCompile) {
            	options.compilerArgs << '-Xbootclasspath/p:app/libs/framework.jar'
        	}
    	}
    	...
    }
    
  • 如果需要依赖多个compileOnly的jar包,在bootclasspath中使用":"分隔路径,不要多次配置compilerArgs变量,会被最后一个配置覆盖

  • 移除重复的依赖包"Program type already present" https://blog.csdn.net/Calvin_zhou/article/details/80880501

源码编译改动

  • 导入原生jar包
    以framework.jar为例,需要将对应源码工程的out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar copy到 App project的app/libs/目录下,然后右键classes.jar,“Add as libraries”即可。
  • .jack文件makefile修改
    Android 8.0之后默认开启Jack,好多源码模块编译后都只生成classes.jack文件,需要在对应模块的Android.mk中增加JACK_ENABLED := disabled,然后重新make module,在对应的intermediates中可以找到classes.jar。千万不要全编源码,会导致其它依赖这个jack文件的模块编不过。

你可能感兴趣的:(Android)