2016-03-23 50 views
10

我想知道为什么我的图书馆一旦建成AAR格式后总是丢失它的文档。此外,Android Studio会缩小代码,即构建之前的代码与内置AAR格式后的代码始终不同,不含原始代码。我希望我的图书馆拥有自己的文档并拥有原始代码。你可以看到下面的不同:内置AAR格式如何导出AAR库及其文档?

after

哪里文档后

以前建造

before

?另外,你会注意到整个代码真的缩小了,不同。

那么,如何在不收缩代码的情况下将AAR库与其文档一起导出?

+0

如何从另一个模块中引用我的代码?我的意思是我有一个'moduleA',我使用'moduleB','moduleB'使用第三个'moduleC',但是当我从'moduleA'中的moduleC'引用一个类(control + click)时, .class'而不是我的'moduleC'中的'.java'类。你有解决这个问题的一些想法吗?谢谢! – epool

回答

2

代码“缩小”,因为一旦创建AAR 原始源代码不包含在AAR中。它只是Java字节码。

然后,当您在应用程序中使用AAR库时。 源代码是从字节代码反向设计的。原始变量名称不可用,由于字节码编译器的优化以及其他原因,可能会有一些编码样式差异。当然,这些注释并不包含在字节码中,因为它是用于计算机的,评论是针对人们的。

因此,如果您在调试时不想看到原始源代码,那么当使用AAR库时,您需要将它作为单独的源JAR提供给AAR,并且可能会告诉Android Studio使用源JAR不会自动执行。

我已经能够自动化源JAR创建,作为将生成的AAR/JAR“上传”到本地Maven存储库的过程的一部分。我不知道你有什么样的构建系统,所以我不会详细讨论这些细节。

反正你可以添加到您的模块的的build.gradle:

task sourcesJar(type: Jar) { 
    classifier = 'sources' 
    from android.sourceSets.main.java.srcDirs 
} 

然后您就需要单独运行它时,你要创建/更新源JAR:

摇篮 - >任务 - >其他 - >源码Jar

并且可能有一些方法可以将任务自动化为assembleRelease任务的一部分,但我对Gradle还不是很熟悉。

源JAR将出现在... \ MyLibrary \ app \ build \ libs \ path中。

+0

如何从另一个模块中引用我的代码?我的意思是我有一个'moduleA',我使用'moduleB','moduleB'使用第三个'moduleC',但是当我从'moduleA'中的moduleC'引用一个类(control + click)时, .class'而不是我的'moduleC'中的'.java'类。你有解决这个问题的一些想法吗?谢谢! – epool

8

我同意@MarkusKauppinen。

构建源代码jar后的主要问题是你不能使用这个jar作为你的依赖关系。这只是一个不能用于编写代码的源代码,即不能导入任何东西,因为该jar包含*.java文件而不是*.class文件。因此,请执行以下操作:

步骤#1为您的库构建AAR格式。通常,它位于[project]/[library-module]/build/outputs/aar/library-release.aar

步骤#2将AAR文件添加为模块。转到文件>新建>新建模块...>导入.JAR/.AAR软件包>下一步。

enter image description here

然后,找到AAR文件并单击Finish。

enter image description here

步骤#3转到单击此图标icon project structure到项目结构,并增加我们只是应用程序的依赖关系所作的模块。

enter image description here

步骤#4添加@ MarkusKauppinen的gradle这个任务库模块的build.gradle和同步与gradle这个项目。

步骤#5转到Android Studio的右窗格>单击Gradle>刷新gradle任务,点击此图标icon refresh gradle task

步骤#6查找和运行(通过双击)sourcesJar:library-module>Tasks>other

sourcesJar task

步骤#7的任务完成后,你会发现在

library-module\build\libs\..-sources.jar来源罐子。

步骤#8将至少一个类导入到应用的模块,例如,在MainActivity。然后按Ctrl +点击课程。点击Choose sources,然后浏览第7步中提到的源代码jar文件。

browse sources jar

最后,你可以看到它的文档的源代码。

+0

如何从另一个模块中引用我的代码?我的意思是我有一个'moduleA',我使用'moduleB','moduleB'使用第三个'moduleC',但是当我从'moduleA'中的moduleC'引用一个类(control + click)时, .class'而不是我的'moduleC'中的'.java'类。你有解决这个问题的一些想法吗?谢谢! – epool