์๋๋ก์ด๋ ์ฑ ๊ฐ๋ฐ์ ํ๋๋ฐ ๊ธฐ์กด์๋ Eclipse๋ฅผ ์ฌ์ฉํ์๋๋ฐ ์ด์ ๋ Android Studio๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํ์ง๋ง ์์คํ ์ฑ ๊ฐ๋ฐ์ ํ ๋์ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ฒ๋ผ ์์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋จ์ํ dependencies ์ถ๊ฐํด์ค๋ค๊ณ ํด์ ๋น๋๊ฐ ๋๋๊ฒ ์๋์์ต๋๋ค. Eclipse์ ํฐ ํ์ ๊ฐ์ผ๋ ๋ช๊ฐ์ง ์ถ๊ฐ ์์ ์ด ๋ ํ์ํ๋๊ตฐ์. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ ์ค์ , ์ปดํ์ผ ๋ถํธ์คํธ๋ฉ ํด๋์คํจ์ค ์ค์ …
Android Studio์์ ์์ ํ๊ธฐ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ ๋ฐ ์์ ์ค์
๋จผ์ ์ค๋นํ “framework.jar” ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค๋นํ ๋ค “project/app/libs” ํด๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ถ๊ฐํ์ฌ ์ค๋๋ค. ๊ทธ๋ฆฌ๊ณ “project/app/build.gradle” ํ์ผ์ ์ด์ด “dependencies” ๋ถ๋ถ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐํ์ฌ ์ค๋๋ค. ์ด๋ ์ฃผ์ ํ ์ ์ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ ๋ค๋ฅด๊ฒ “compile” ์ด ์๋ “provided” ๋ก ์ถ๊ฐํด์ฃผ์ ์ผ ํ๋ค๋ ์ ์ ๋๋ค. ๋ง์ฝ, Android Studio 3.0 ์ด์์ด๋ผ๋ฉด “compileOnly” ๋ฅผ ์ฌ์ฉํด ์ฃผ์ ์ผ ํฉ๋๋ค.
1 2 3 | dependencies { provided files('libs/framework.jar') } |
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ๋ ๋์์ง๋ง ์์ง Android SDK๋ฅผ ๋์ฒดํ์ง ๋ชป ํ๊ธฐ ๋๋ฌธ์ ์์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋์ํ์ง ์์ต๋๋ค. ์ด์ “framework.jar”๊ฐ Android SDK๋ฅผ ๋์ฒด ํ ์ ์๋๋ก “project/app/app.iml”์์ “<orderEntry />” ๋ถ๋ถ ์์ ํด์ฃผ์ ์ผ ํฉ๋๋ค. ์๋์ผ๋ก ์์ ํ์ฌ ์ฃผ์ ๋ ๋์ง๋ง, “build.gradle” ์ด ์์ ๋๋ฉด ์๋์ผ๋ก ์์ฑ๋๋ ํ์ผ์ด๊ธฐ์ ๋งค๋ฒ ์๋์ผ๋ก ์์ ์ ํด์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์์ต๋๋ค. ๊ทธ๋์ ์๋ ์ฝ๋์ ๊ฐ์ด “preBuild” Task๋ฅผ ์ด์ ์ ์์ ํย dependencies ์๋์ ์ถ๊ฐ์ฃผ์๋ฉด ๋ฉ๋๋ค.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | preBuild { doLast { def imlFile = file(project.name + ".iml") println 'Change ' + project.name + '.iml order' try { def parsedXml = (new XmlParser()).parse(imlFile) def jdkNode = parsedXml.component[1].orderEntry.find { it.'@type' == 'jdk' } parsedXml.component[1].remove(jdkNode) def sdkString = "Android API " + android.compileSdkVersion.substring("android-".length()) + " Platform" new Node(parsedXml.component[1], 'orderEntry', ['type': 'jdk', 'jdkName': sdkString, 'jdkType': 'Android SDK']) groovy.xml.XmlUtil.serialize(parsedXml, new FileOutputStream(imlFile)) } catch (FileNotFoundException e) { // nop, iml not found } } } |
์ด์ Sync gradle ํ ์์คํ API๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋ ์์ฑ์ด ๊ฐ๋ฅํฉ๋๋ค. ํ์ง๋ง ์์ง Build๋ ๋์ง ์์ต๋๋ค.
Compile bootstrap classpath์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ ์ฒ๋ฆฌ ๋๋๋ก ์ค์
์์์ ์ค์ ํ๋ ์์ ์ ํตํด์ ์์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ Android SDK๋ณด๋ค ๋จผ์ ์ฒ๋ฆฌ๋์ด Editor์์๋ ์ ๋์ํ์ง๋ง Build ์์๋ ์ฌ์ ํ Android SDK๊ฐ ๋จผ์ ์ฒ๋ฆฌ๋์ด ๋น๋ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ๊ทธ๋์ Compile ์ “-Xbootclasspath/p” ์ต์ ์ ์ฃผ์ด ์์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋จผ์ ์ฒ๋ฆฌ ๋ ์ ์๋๋ก ํด์ฃผ์ด์ผ ํฉ๋๋ค. “project/build.gradle” ํ์ผ์ ์ด์ดย “allprojects” ๋ถ๋ถ์ ์๋ ์ฝ๋์ ๊ฐ์ด compile ์ต์ ์ ์ถ๊ฐํ์ฌ ์ค๋๋ค.
1 2 3 4 5 6 7 8 9 10 11 | allprojects { repositories { jcenter() } // Adds a prefix to the search path for bootstrap classes. gradle.projectsEvaluated { tasks.withType(JavaCompile) { options.compilerArgs.add('-Xbootclasspath/p:app\\libs\\framework.jar') } } } |
์ด์ ์ ์์ ์ผ๋ก Build๊ฐ ๋๋ ๊ฒ์ ํ์ธ ํ์ค ์ ์์ต๋๋ค.
์ฐธ์กฐ 1:ย http://www.31mins.com/android-studio-build-system-application/
๊ธ ๋์์ผ๋ก ๋น๋๊น์ง๋ ์ฑ๊ณตํ์ต๋๋ค.
๊ทผ๋ฐ ํน์ java 8 ๊ด๋ จ ์๋ฌ๊ฐ ๋์ ์ด ์์ผ์ ๊ฐ์??
Error:Error converting bytecode to dex:
Cause: Dex cannot parse version 52 byte code.
This is caused by library dependencies that have been compiled using Java 8 or above.
If you are using the ‘java’ gradle plugin in a library submodule add
targetCompatibility = ‘1.7’
sourceCompatibility = ‘1.7’
to that submodule’s build.gradle file.
Error:Execution failed for task ‘:app:transformClassesWithDexForDebug’.
> com.android.build.api.transform.TransformException: java.lang.RuntimeException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.ide.common.process.ProcessException: Return code 1 for dex process
๋น๋๋ ๋๋๋ฐ, run ์ผ๋ก ์ค์นํ๋ ค๊ณ ํ๋ฉด ์์๊ฐ์ ์๋ฌ๊ฐ ๋ฉ๋๋ค.
ํน์ ํด๊ฒฐ ํ์ จ๋ค๋ฉด ๊ณต์ ๋ถํ๋๋ ค๋ ๋ ๊น์??
์ ๊ฐ ๊ฒฉ์ด๋ณด์ง ๋ชปํ ๋ฌธ์ ์ด๊ธฐ๋ ํ๋ ์๋ ๋งํฌ์์ ํด๋ต์ ์ป์ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
http://stackoverflow.com/questions/37020413/android-dex-cannot-parse-version-52-byte-code?answertab=votes#tab-top
ํน์ ํด๊ฒฐํ์ จ๋์? ์ ๋ ๋์ผํ ๋ฌธ์ ๊ฐ ์๋ค์ ใ ใ
์๋ ํ์ธ์?
๋น๋๋ apk ๊ฐ ์ค์น๋์ง ์๋ค์.
ํน์ ์ค์ ๊ณผ์ ์ด ์๋ต๋๊ฒ์ด ์๋์?
ํ์ฌ ์ ํ๋ฐ์ค ๋ฐ์ฒ์ดํ์ ๋ง๋ค๊ณ ์์ต๋๋ค.
framework.jar ํ์ผ์ ์ ํ๋ฐ์ค์์ ๋ณต์ฌํด์ ์์ ์๋ ค์ฃผ์ ๋ฐฉ๋ฒ์ผ๋ก ๋น๋๋ฅผ ํ๋๋
์ค์น๊ฐ ๋์ง ์๋ค์. ใ .ใ
๋น๋๊ฐ ์ ์์ ์ผ๋ก ๋์ด์ APK ํ์ผ์ด ํ์ธ ๋์๋๋ฐ ์ค์น๊ฐ ์๋๋ค๋ฉด ๋ค๋ฅธ ๋ฌธ์ ๊ฐ ์๊ฒ ๋ค์.
๊ธฐ์กด์ ์ค์น๋ ํจํค์ง๋ ํจํค์ง๋ช ์ด๋ ๋ฒ์ ์ด ๊ฐ๋ค๋์ง, ์์คํ ์ฑ์ด๋ผ๋ฉด signkey๊ฐ ํ๋ฆฌ๋ค๋์ง…
์ค์น๊ณผ์ ์ ์๋ต์ด ๋๊ฒ ๋ง์ต๋๋ค.
์๋๋ก์ด๋ ์คํ๋์ค๋ฅผ ํตํ์ฌ ์ฑ ๋น๋๊ฐ ์ ์์ ์ผ๋ก ํ๋ ๊ฒ์ ๋ํ ๋ด์ฉ ์ ๋๋ค.
๋ง์ํ์ ๋๋ก ํ๋๋ฐ, ์ ๊ฐ ์ง์ด๋ฃ์ framework.jar์ ์๋ class๋ฅผ ์ฐพ์ง๋ฅผ ๋ชปํ๋ค์. ใ .ใ ก
dependencies ์ค์ ์์ provided๋ฅผ complieOnly๋ก (Android Studio ์ต์ ๋ฒ์ ์ฌ์ฉ์)
Compile bootstrap classpath์ framework-net.jar๋ฅผ framework.jar๋ก… (์คํ๋ค์ ใ ใ )
ํน์ ํ์ธ ํ์ จ๋์?
์๋ ํ์ธ์?
์๋ ๋ถ๋ถ์์ You cannot create an instance from the abstract interface ‘org.w3c.dom.Node’์ด๋ ๊ฒ ์๋ฌ๊ฐ ๋๋๋ฐ ์๊ทธ๋ด๊น์?
new Node(parsedXml.component[1], ‘orderEntry’, [‘type’: ‘jdk’, ‘jdkName’: sdkString, ‘jdkType’: ‘Android SDK’])
ํด๊ฒฐ๋์์ต๋๋ค.
org.w3c.dom.node๊ฐ ์๋ import ๋์ด ์์์ต๋๋ค.
๊ฐ์ฌํฉ๋๋ค.
์ ํด๊ฒฐ๋์๋ค๋ ๋คํ์ด๋ค์~
๊นํ์ด ๋ถ์ฒ๋ผ framework.jar ์์ ์๋ ๊ฑธ ์ฐพ์ง ๋ชปํ๋ค์.. error:cannot find symbol class ..
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ ๊ฐ ์ด์ ๋ฃ๊ณ ์๊ธด ํ์ง๋ง.. ์์ฑํ์ ๋๋ก ๋๊ฐ์ด ๋ค ์ ์๋๋ฐ๋
์๋ํฐ์์๋ ์๋๋๋ฐ ๋น๋๋ง ํ๋ฉด ์ ๊ฒ ์ ๋จ๋์ง๋ฅผ ๋ชจ๋ฅด๊ฒ์ด์ฉ..
options.compilerArgs.add(‘-Xbootclasspath/p:app\\libs\\framework.jar:app\\libs\\framework2.jar:app)
์์์ :app ์ ์๋ชป์ ์์ต๋๋น.
options.compilerArgs.add(โ-Xbootclasspath/p:app\\libs\\framework.jar:app\\libs\\framework2.jar’)
๋์ป๊ณ ์ฐพ์๋ ์คํ๋ ์๋๊ฒ ๊ฐ์๋ฐ ์ ๋น๋๋ง ํ๋ฉด ์ปดํ์ผ์๋ฌ์ ๋์์ ์ฌ๋ณผ์ ์ฐพ์์ ์๋ค๊ณ ๋๋ฆฌ์ธ์ง.. ์๋ํฐ์๋ ์๋ฌ๊ฐ ์๋จ๋๋ฐ ใ ใ
๋ jar ์ฌ์ด๋ฅผ :(์ฝ๋ก )์ด ์๋๋ผ ;(์ธ๋ฏธ์ฝ๋ก )์ผ๋ก ํด๋ณด์ จ๋์?
windows์ ๊ฒฝ์ฐ separator๋ฅผ ;(์ธ๋ฏธ์ฝ๋ก )์ผ๋ก ์๊ณ ์๋ค์. linux๊ฐ :(์ฝ๋ก )์ด๊ตฌ์.
-Xbootclasspath/p:app\\libs\\framework.jar;app\\libs\\framework2.jar
๋ด์ผ ํ๋ฒ ํด๋ณด๊ฒ ์ต๋๋ค. ๊ณ ๋ง์ต๋๋ค^^
๊ณ ๋ง์ต๋๋ค. ์๋ฉ๋๋ค. ์ฝ๋ก ์ด ๋ฌธ์ ์๊ตฐ์^^