ãããžã§ã¯ã ãã¡ã€ã« ãªãã¡ã¬ã³ã¹
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãPreEmptive Protection - DashO ã® XML ãããžã§ã¯ã ãã¡ã€ã«ã«ã€ããŠèª¬æããŸãããŠãŒã¶ãŒ ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠãã¡ã€ã«ãçæããŠããå Žåã«ããªãã¡ã¬ã³ã¹ãšããŠåœ¹ç«ã€ããã«ãåãªãã·ã§ã³ã詳ãã解説ããŸãã
- <dasho>
- <propertylist> ã»ã¯ã·ã§ã³
- <global> ã»ã¯ã·ã§ã³
- <inputpath> ã»ã¯ã·ã§ã³
- <globalProcessingExclude> ã»ã¯ã·ã§ã³
- <classpath> ã»ã¯ã·ã§ã³
- <entrypoints> ã»ã¯ã·ã§ã³
- <report> ã»ã¯ã·ã§ã³
- <output> ã»ã¯ã·ã§ã³
- <removal> ã»ã¯ã·ã§ã³
- <methodCallRemoval> ã»ã¯ã·ã§ã³
- <renaming> ã»ã¯ã·ã§ã³
- <optimization> ã»ã¯ã·ã§ã³
- <controlflow> ã»ã¯ã·ã§ã³
- <stringencrypt> ã»ã¯ã·ã§ã³
- <make-synthetic> ã»ã¯ã·ã§ã³
- <premark> ã»ã¯ã·ã§ã³
- <includenonclassfiles> ã»ã¯ã·ã§ã³
- <preverifier> ã»ã¯ã·ã§ã³
- <signjar> ã»ã¯ã·ã§ã³
- <injection> ã»ã¯ã·ã§ã³
- <runtime> ã»ã¯ã·ã§ã³
- <shelflife> ã»ã¯ã·ã§ã³
- <checks> ã»ã¯ã·ã§ã³
- ãœãŒã¹ããã³æäœã®æå®
- <includelist> ããã³ <excludelist> èŠå
- ååïŒãªãã©ã«ããã¿ãŒã³ãããã³æ£èŠè¡šçŸ
PreEmptive Protection - DashO ãããžã§ã¯ã ãã¡ã€ã«ã«ã¯ãã©ã®ãããªååãæ¡åŒµåãä»ããŠãããŸããŸããããåªå
ãããæ¡åŒµå㯠.dox
ã§ãããããžã§ã¯ã ãã¡ã€ã«ã«ã¯ãæå®ããã¢ããªã±ãŒã·ã§ã³ãã©ã®ããã«é£èªååŠçããããã«ã€ããŠã®æ
å ±ãå«ãŸããŠããŸãããããžã§ã¯ã ãã¡ã€ã«ã¯ãDashO ãšäžç·ã«é
åžããã dasho.xsd
ã«æºæ ãã XML ããã¥ã¡ã³ãã§ãã
ã¡ã¢ïŒ
ã»ãšãã©ã®å ŽåãèŠçŽ ãå±æ§ã®å é ãšæ«å°Ÿã«ãã空çœã¯åé€ãããŸãã
<dasho>
<dasho>
ã¿ã°ã¯ã.dox
ãã¡ã€ã«ã®æãå€åŽã®ã¿ã°ã§ãã
Version å±æ§
ãã¡ã€ã« ããŒãžã§ã³ã¯å¿
èŠãªå±æ§ã§ãããããžã§ã¯ã ãã¡ã€ã«ãèªã¿åãããšãã§ããæãå€ã DashO ã®ããŒãžã§ã³ãæå®ããŸããããšãã°ãversion="6.9"
ãããžã§ã¯ãã¯ããããžã§ã¯ããç·šéããªããŠããããŒãžã§ã³ 7.2 ã® DashO ã§äœ¿çšããããšãã§ããŸãã
<dasho version="7.2.0">
ã¡ã¢ïŒ
DashO ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ããŒãžã§ã³ãšç°ãªãããŒãžã§ã³ã§ãããžã§ã¯ã ãã¡ã€ã«ãäœæããããšãã§ããŸãããã¡ã€ã« ããŒãžã§ã³ã¯ããããžã§ã¯ã ãã¡ã€ã«ã䜿çšããããšãã§ãã DashO ã®æå°ããŒãžã§ã³ãè¡šããŸãã
<propertylist> ã»ã¯ã·ã§ã³
çç¥å¯èœãª <propertylist>
ïŒãããã㣠ãªã¹ãïŒã»ã¯ã·ã§ã³ã§ã¯ãããããã£ãšåŒã°ããå€æ°ã®å®çŸ©ããã³å€ã®ä»£å
¥ãè¡ãããšãã§ããŸãããããã¯ããããžã§ã¯ã ãã¡ã€ã«ã§äœ¿çšããããä»ã®ããããã£ã®å€ãå®çŸ©ããããã«äœ¿çšãããããããšãã§ããŸãã
<propertylist>
<property name="projectname" value="myproject">
<property name="projectdir" value="c:\myprojects">
</propertylist>
ãããžã§ã¯ã ãã¡ã€ã«ãååšãããã£ã¬ã¯ããªã瀺ããdasho.basedir
ãšåŒã°ããçµã¿èŸŒã¿ã®å€éšããããã£ããããŸããä¿åãããŠããªãæ°ãããããžã§ã¯ãã§ã¯ãdasho.basedir
ã¯é©çšã§ããŸããã
ããããã£ã¯ããããžã§ã¯ã ãã¡ã€ã«ã®äœæã«åœ¹ç«ã¡ãŸãããã®ãããžã§ã¯ã ãã¡ã€ã«ã¯ãè€æ°ã®ãããžã§ã¯ããåããããžã§ã¯ãã®ããŸããŸãªããŒãžã§ã³ããããã¯ããŸããŸãªãã«ãç°å¢éã§ã®ç§»æ€ã容æã«ãããã³ãã¬ãŒããšããŠã®åœ¹å²ãæãããŸãã
ããããã£åç §
ããããã£ã¯ã次ã®æ§æã§åç §ãããŸãã
${property_name}
ããããã£åç
§ã¯å€§æåãšå°æåãåºå¥ããã®ã§ã${MyProjectDir}
㯠${myprojectdir}
ãšã¯ç°ãªãããããã£ãåç
§ããŸããå®çŸ©ãããŠããªãããããã£ãåç
§ããå Žåã¯ããã®ãªãã©ã«å€ã䜿çšãããŸããããããã£ã¯ãä»ã®ããããã£ã®æ¡ä»¶ã«åºã¥ããŠå®çŸ©ããããšãã§ããŸããããããã£ã®å€ã¯ãç°å¢å€æ°ãžã®åç
§ãå«ãã1 ã€ãŸãã¯è€æ°ã®ããããã£åç
§ã䜿çšããŠæå®ã§ããŸãããã®ããããã£åç
§ãšããŠãæ¢å®å€ãéæ¥åç
§ã眮ææ§æãæããããŸããååž°çãªå€æ°ãå®çŸ©ããããšã¯ã§ããŸããã
DashO ã¯ãããããã£ãåç §ããããã®æè»ãªæ¹æ³ãå€æ°æäŸããŠããŸãã
${prop} |
åçŽãªçœ®æãprop ã®å€ãå®çŸ©ãããŠããªãã空çœã®å Žåã眮æã¯è¡ãããã${prop} ã¯å€æŽãããŸããã |
---|---|
${prop:-default} |
æ¢å®å€ã«ãã眮æãprop ãå®çŸ©ãããŠããã空çœã§ãªãå Žåã¯ããã®å€ã䜿çšããŸããããã§ãªãå Žåã¯ãå€ãšããŠæ¢å®å€ã䜿çšããŸãã |
${prop:+value} |
å®çŸ©ãããŠããå Žåã¯çœ®æãprop ãå®çŸ©ãããŠããã空çœã§ãªãå Žåã¯ããã®å€ã䜿çšãããŸãããã以å€ã§ prop ãå®çŸ©ãããŠããå Žåã¯ã空çœã®æååã代çšãããŸãã |
${prop:?message} |
èšå®ãããŠããªãå Žåã«ãšã©ãŒãçæãprop ãå®çŸ©ãããŠããã空çœã§ãªãå Žåã¯ããã®å€ã䜿çšãããŸããããã§ãªãå Žåã¯ãã¡ãã»ãŒãžã®ããã¹ããå«ããšã©ãŒãçæããããã«ããçµäºããŸãã |
${prop/pattern/replace} |
ãã¿ãŒã³ä»£å ¥åŸã«çœ®æãæ£èŠè¡šçŸ pattern ã®æåã®åºçŸç®æã眮æããã¹ã replace ã§çœ®ãæããŸããreplace ã空çœã®å Žåã¯ãäžèŽããããã¹ããåé€ãããŸãã |
${prop//pattern/replace} |
ãã¿ãŒã³ä»£å ¥åŸã«çœ®æãæ£èŠè¡šçŸ pattern ã®ãã¹ãŠã®åºçŸç®æã眮æããã¹ã replace ã§çœ®ãæããŸããreplace ã空çœã®å Žåã¯ãäžèŽããããã¹ããåé€ãããŸãã |
${prop/#pattern/replace} |
ãã¿ãŒã³ä»£å ¥åŸã«çœ®æãå é ã®æ£èŠè¡šçŸ pattern ã眮æããã¹ã replace ã§çœ®ãæããŸããreplace ã空çœã®å Žåã¯ãäžèŽããããã¹ããåé€ãããŸãã |
${prop/%pattern/replace} |
ãã¿ãŒã³ä»£å ¥åŸã«çœ®æãæ«å°Ÿã®æ£èŠè¡šçŸ pattern ã眮æããã¹ã replace ã§çœ®ãæããŸããreplace ã空çœã®å Žåã¯ãäžèŽããããã¹ããåé€ãããŸãã |
${prop#pattern} |
ãã¿ãŒã³åé€åŸã«çœ®æãå é ã®æ£èŠè¡šçŸ pattern ãåé€ããŸãã |
${prop%pattern} |
ãã¿ãŒã³åé€åŸã«çœ®æãæ«å°Ÿã®æ£èŠè¡šçŸ pattern ãåé€ããŸãã |
${!prop} |
éæ¥çãªçœ®æãprop ãå®çŸ©ãããŠããã空çœã§ãªãå Žåã¯ããã®å€ãããããã£åãšããŠäœ¿çšãããŸãããã®åŸããã®ããããã£ã®å€ã¯çœ®æå€ãšããŠäœ¿çšãããŸããéæ¥çãªçœ®æã«ç¶ããŠãåè¿°ã®åç §ã®ãã¡ã©ãã§ã䜿çšããããšãã§ããŸãã |
ã¡ã¢ïŒ
prop
ãå®çŸ©ãããŠããªãã空çœã®å Žåã¯ã${prop:-}
ã䜿çšããŠç©ºã®æååãä»£å ¥ããããšãã§ããŸãã
åçããããã£
ãããžã§ã¯ã ãã¡ã€ã«ã®ããã€ãã®å Žæã§ãåçããããã£ã䜿çšããããšãã§ããŸãããã®ããããã£ã®å€ã«ã¯ãåŠçãããŠããã¯ã©ã¹ãã¡ãœããã«é¢ããæ å ±ãå«ãŸããŸãã
${CLASS_NAME}
â ããã±ãŒãžåãå«ããçŸåšã®ã¯ã©ã¹ã®å®å šãªååã${CLASS_SIMPLENAME}
â ã¯ã©ã¹ã®ç°¡æåãã€ãŸããããã±ãŒãžåã®ãªãã¯ã©ã¹åã${CLASS_PACKAGE}
â æ«å°Ÿã®ããªãªããå«ããã¯ã©ã¹ã®ããã±ãŒãžåãããã¯ãæ¢å®ã®ããã±ãŒãžã®ã¯ã©ã¹ã§ã¯ç©ºã®æååã«ãªããŸããããããã£ãå±éãããããã«ããã«ã¯ã${CLASS_PACKAGE:-}
ã䜿çšããŸãã${METHOD_NAME}
â çŸåšã®ã¡ãœããã®ååãã³ã³ã¹ãã©ã¯ã¿ãŒã®å Žåãããã¯${CLASS_SIMPLENAME}
ãšåãã§ãã${PROP_NAME}
â ã¡ãœããã setter ãŸã㯠getter ã§ããå Žåã¯ãé¢é£ããããããã£ã®ååãã³ã³ã¹ãã©ã¯ã¿ãŒã®å Žåãããã¯${CLASS_SIMPLENAME}
ãšåãã§ãã
以äžã®ããããã£å€ã¯ããããžã§ã¯ã ãã¡ã€ã«ã®å Žæãšååã«ãã£ãŠç°ãªããŸãã
${dasho.file}
â ãããžã§ã¯ã ãã¡ã€ã«ã®çµ¶å¯Ÿãã¹ã${dasho.basedir}
â ãããžã§ã¯ã ãã¡ã€ã«ããããã£ã¬ã¯ããªãžã®çµ¶å¯Ÿãã¹ã${dasho.project}
â ãããžã§ã¯ã ãã¡ã€ã«ã®ããã¹ãæ¡åŒµåããªãååã
useJDKHome
ãæå¹ã«ããŠããŠãæå¹ãª JDKHome
å€ãèšå®ããã〠setJDKHomeProperties
ãæå¹ã«ããŠããå Žåã¯ã以äžã®ããããã£ãæå®ãã JDKHome
å€ãšããŠè©äŸ¡ãããŸãã
${JDK_HOME}
${JAVA_HOME}
以äžã®ããããã£ã®å€ã¯ãæå®ãã JDKHome
å€ãååšããŠããŠãã€æå¹ãªå Žåã«ã¯ãæå®ãã JDKHome
å€ã«ãã£ãŠæ±ºãŸãã®ã«å¯Ÿããããã§ãªãå Žåã«ã¯ãDashO ãå®è¡ããç°å¢ã«ãã£ãŠæ±ºãŸããŸãã
${jce.jar}
â Java Cryptography Extension jar ã®çµ¶å¯Ÿãã¹ã éæšå¥šã§ãããJava 9 以éã§ã¯å©çšã§ããŸããã ãã® jar ãã¡ã€ã«ã«å«ãŸããã¯ã©ã¹ã¯ã"Include JDKïŒJDK ã®å°å ¥ïŒ" ãæå¹ã«ãããã³ã«ãµããŒã察象ãšããŠè¿œå ãããŸãã${jsse.jar}
â Java Secure Socket Extension jar ã®çµ¶å¯Ÿãã¹ãéæšå¥šã§ãããJava 9 以éã§ã¯å©çšã§ããŸããããã® jar ãã¡ã€ã«ã«å«ãŸããã¯ã©ã¹ã¯ã"Include JDKïŒJDK ã®å°å ¥ïŒ" ãæå¹ã«ãããã³ã«ãµããŒã察象ãšããŠè¿œå ãããŸãã${javaws.jar}
â Java Web Start jar ã®çµ¶å¯Ÿãã¹ã
以äžã®ããããã£ã®å€ã¯ãDashO ãå®è¡ããç°å¢ã«ãã£ãŠæ±ºãŸããŸãã
${dasho.java.version}
â "1.7"ã"1.8" ãŸã㯠"9"ïŒã€ãŸããDashO ãå®è¡ãã JVM ã®ããŒãžã§ã³ïŒãéæšå¥šã
ã¿ã€ã ã¹ã¿ã³ã ããããã£
DashO ã§ã¯ãçŸåšã®æ¥ä»ããã³æå»ã«é¢ããæ
å ±ãæ¿å
¥ã§ããããã«ãtstamp
ããããã£ãçšæãããŠããŸããtstamp
ããããã£ã¯ã次㮠2 ã€ã®ç°ãªãæ¹æ³ã§äœ¿çšã§ããŸãã
${tstamp}
â ãã±ãŒã«ã®æ¢å®ã®æžåŒã䜿çšããŠãæ¥ä»ã®æ å ±ãæ¿å ¥ããŸãã${tstamp[pattern]}
â æžåŒæå®ã䜿çšããŠãæ¥ä»ã®æ å ±ãæ¿å ¥ããŸããpattern
ã¯ãJava ã®SimpleDateFormat
ã¯ã©ã¹ã§äœ¿çšããããã®ãšåãã§ãã
ããããã£ã®åªå é äœ
ãããžã§ã¯ã ãã¡ã€ã«ã«å®çŸ©ãããŠããããããã£ãJava ã®ã·ã¹ãã ããããã£ããŸãã¯ç°å¢ããããã£ã®å€ãåç §ããããšãã§ããŸããããããã£ã®å€ã解決ããããã«ãDashO ã¯æ¬¡ã®é åºã§ãœãŒã¹ã調ã¹ãŸãã
DashO ã®åçããããã£
Java ã®ã·ã¹ãã ããããã£
ç°å¢ããããã£
ãããžã§ã¯ã ãã¡ã€ã«ã®ããããã£
Java ã³ãã³ã ã©ã€ã³ã® -D
ãªãã·ã§ã³ãDashO ã³ãã³ã ã©ã€ã³ã® --properties <filename>
ãªãã·ã§ã³ã䜿çšããããGradle çµ±åãŸã㯠Ant çµ±åãä»ãã°ããããžã§ã¯ã ãã¡ã€ã«ã«å®çŸ©ãããŠããããããã£ããªãŒããŒã©ã€ãããããšãã§ããŸãã
ã¡ã¢ïŒ
--properties
åŒæ°ã«ãã£ãŠèšå®ãããããããã£ã¯ã-D
ãªãã·ã§ã³ã«ãã£ãŠèšå®ãããããããã£ããªãŒããŒã©ã€ãããŸãã
ããããã£ã¯ã次ã®ã¿ã°ãšå ±ã«äœ¿çšããããšãã§ããŸãã
<classpath>
ã®JDKHome
å±æ§<entrypoints>/<applet>
ã®name
å±æ§<entrypoints>/<ejb>
ã®name
å±æ§<entrypoints>/<iappli>
ã®name
å±æ§<entrypoints>/<library>/<jar>
ããã³<entrypoints>/<library>/<dir>
ã®path
å±æ§<entrypoints>/<midlet>
ã®name
å±æ§<entrypoints>/<android>
ã®name
å±æ§<entrypoints>/<publics>
ã®name
å±æ§<entrypoints>/<servlet>
ã®name
å±æ§<entrypoints>/<unconditional>
ã®name
å±æ§<global>/<exclude>
ã®classname
å±æ§<includenonclassfiles>/<copy>
ã®source
ããã³relativedest
å±æ§<inputpath>/<pathelement>
ããã³<classpath>/<pathelement>
ã®location
å±æ§<mapping>/<mapinput>
ã®suffix
å±æ§<mapping>/<mapinput>
ã®path
å±æ§<mapping>/<mapoutput>
ã®path
ããã³proguardMap
å±æ§<mapping>/<mapreport>
ã®path
å±æ§<output>/<dir>
ã®path
å±æ§<output>/<jar>
ã®path
ããã³manifest
å±æ§<output>/<constpooltag>
ã®å€<output>/<sourcefile>
ã®å€<premark>/<passphrase>
ã®å€<premark>/<watermark>
ã®å€<preverifier>
ã®å€<rename>/<class-options>
ã®prefix
å±æ§<rename>/<class-options>
ã®alphabet
å±æ§<rename>/<member-options>
ã®alphabet
å±æ§<report>
ã®path
å±æ§<shelflife>
ã®period
ãwarningperiod
ãdate
ãããã³warningdate
å±æ§<shelflife>/<property>
ã®name
ããã³value
å±æ§<tamperCheck>
ã®action
å±æ§<tamperCheck>/<signerInfo>
ã®alias
ãkeystore
ãstorepass
ãããã³storetype
å±æ§<tamperResponse>
ã®source
å±æ§<debugEnabledCheck>
ã®action
å±æ§<debugEnabledResponse>
ã®source
å±æ§<debuggingCheck>
ã®action
å±æ§<debuggingResponse>
ã®source
å±æ§<shelfLifeCheck>
ã®action
ãexpirationDate
ãwarningDate
ãstartDateSource
ãexpirationPeriod
ãwarningPeriod
ãããã³tokenSource
å±æ§<signJar>
ã®å€ãšãã®keystore
ãstoretype
ãstorepass
ãalias
ãkeypass
ãsigfile
ãããã³addArgs
å±æ§
<global> ã»ã¯ã·ã§ã³
<global>
ã»ã¯ã·ã§ã³ã¯çç¥å¯èœã§ãããå®è¡å
šäœã«ããã£ãŠé©çšãããªãã·ã§ã³ãå®çŸ©ããããã«ãããŸãããã®ã»ã¯ã·ã§ã³ã«ã¯ãã°ããŒãã« ãªãã·ã§ã³ãšã°ããŒãã«é€å€ãå«ãŸããŠããŸãã
ã¡ã¢ïŒ
ã°ããŒãã« ãªãã·ã§ã³ã¯ã倧æåãšå°æåãåºå¥ããŸããã
Fornamedetection ã°ããŒãã« ãªãã·ã§ã³
fornamedetection
ãªãã·ã§ã³ã¯ãåçã«å¯Ÿè±¡éžæãããã¯ã©ã¹ãæ€çŽ¢ãããDashO ã®çµã¿èŸŒã¿æ©èœããªã³ã«ããŸããããã«ãããå®è¡ã«ããªãã®åŠçæéãè¿œå ãããŸããæåã«ããã®ãªãã·ã§ã³ãåããã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããã®åŸããããã®ã¯ã©ã¹ããšã³ã㪠ãã€ã³ããšããŠãã¡ã€ã«ã«è¿œå ããããšããå§ãããŸãã
å Žåã«ãã£ãŠã¯ãDashO ã¯ãã©ã®ã¯ã©ã¹ãåçã«èªã¿èŸŒãŸããã®ããå€æã§ããŸãããããã°ã©ã ã¯ãã¯ã©ã¹ã®ååããŠãŒã¶ãŒå ¥åãšããŠèªã¿èŸŒããããŸãã¯å€éšãã¡ã€ã«ã§æå®ããããèŠæ±ããããšãã§ããŸããããããã»ãšãã©ã®å¯Ÿè±¡éžæã¯ããã»ã©ãããŸããªãã®ã§ã¯ãªããããDashO ã¯ããããäœã§ããããå®å šã«å€æã§ããŸããã¬ããŒã ãã¡ã€ã«ã¯ãæå®ãããã¯ã©ã¹ã®å¯Ÿè±¡éžæã®æ€åºã«é¢é£ä»ããããŠããä¿¡é ŒåºŠãå ±åããŸããHIGH ã®ä¿¡é ŒåºŠã¯ãã»ãŒç¢ºå®ã«æ£ããã§ããã€ãŸããDashO ã¯æ¬¡ã®ãããªãã®ãæ€åºããŸãã
Class a = Class.forName("java.awt.Rectangle");
POSSIBLE ã®ä¿¡é ŒåºŠã¯ãçµéšã«åºã¥ããæšæž¬ã§ããDashO ã¯æ¬¡ã®ãããªã³ãŒããæ€åºããŸãã
String s = getUnknownString();
Class a = Class.forName(s);
Rectangle r = (Rectangle)a.newInstance();
ãã®å ŽåãDashO ã¯æ£ç¢ºã«ã©ã®ã¯ã©ã¹ãèªã¿èŸŒãŸããã®ããæ€åºã§ããŸãããããããèªã¿èŸŒãŸããã¯ã©ã¹ã Rectangle ã«ãã£ã¹ããããããšã¯ãææ¡ããŠããŸããããããã£ãŠãDashO 㯠Rectangle ã®ãã¹ãŠã®ãµãã¯ã©ã¹ãæ€åºããããããå¯èœæ§ãããïŒPOSSIBLEïŒãšããä¿¡é ŒåºŠã§å¯Ÿè±¡ãšããŠéžæããŸãã
fornamedetection
ãªãã·ã§ã³ã䜿çšãã匷å¶ïŒforceïŒã¢ãŒãã§å®è¡ããããšã§ãæ€åºãããã®ãèªåçã«å¯Ÿè±¡ãšããŠéžæãããã DashO ã«æ瀺ããŸããããã¯ãDashO ã®æ±ºå®ã«èªä¿¡ãæã£ãŠããå Žåã«ã®ã¿è¡ã£ãŠãã ããã
匷å¶ã¢ãŒãã§å®è¡ãããšãæå®ããã forName()
åŒã³åºãã«ã€ããŠåçã«èªã¿èŸŒãŸããã¯ã©ã¹ãå€æã§ããªãå Žåã§ããå®è¡ãåæ¢ããŸããã
<global>
<option>fornamedetection</option>
</global>
Ignorenotfoundclasses ã°ããŒãã« ãªãã·ã§ã³
ignorenotfoundclasses
ãªãã·ã§ã³ã¯ãDashO ãã¯ã©ã¹ãã¹ã«ååšããªãã¯ã©ã¹ãžã®åç
§ã«ééããå Žåã§ããã¢ããªã±ãŒã·ã§ã³ãåŠçã§ããããã«ããŸããDashO ã¯ãèŠã€ãããªããã¹ãŠã®ã¯ã©ã¹ãç¡èŠã§ããããã§ã¯ãããŸãããã¹ãŒã㌠ã¯ã©ã¹ãã¹ãŒã㌠ã€ã³ã¿ãŒãã§ã€ã¹ãèŠã€ãããªãå Žåã¯ãç¶è¡ã§ããŸããã
ãã®ãªãã·ã§ã³ã¯ãå®è¡ããã®æ å ±ãåéã§ããããã«ãDashO ãçµäºããããšãå¯èœã«ããããã®æ段ãšããŠã®ã¿äœ¿çšããå¿ èŠããããŸãããã¹ãŠã®ã¯ã©ã¹ã«ã¢ã¯ã»ã¹ããã«ãå¿ èŠãªãã¹ãŠã®äŸåé¢ä¿ãå®å šã«å€æããããšã¯ã§ããŸããã
<global>
<option>ignorenotfoundclasses</option>
</global>
Ignorebrokencalls ã°ããŒãã« ãªãã·ã§ã³
ignorebrokencalls
ãªãã·ã§ã³ã¯ãDashO ãèŠã€ããããšãã§ããªãã¯ã©ã¹ã®ã¡ãœãããžã®åç
§ã«ééããå Žåã§ããã¢ããªã±ãŒã·ã§ã³ãåŠçã§ããããã«ããŸããããã¯ãã¯ã©ã¹ãã¹å
ã®ãšã©ãŒã«ãã£ãŠããŸãã¯ææ°ã®ãã®ã§ãªã jar ãã¡ã€ã«ã«ãã£ãŠçºçããå ŽåããããŸããDashO ãã¯ã©ã¹ãåŠçã§ãããšããŠããã¯ã©ã¹ãã¹ãš jar ã«æåŸ
ããã¯ã©ã¹ãå«ãŸããŠããããšã確ãããããã«ããããããã§ãã¯ããããšæãã§ãããã
<global>
<option>ignorebrokencalls</option>
</global>
Force ã°ããŒãã« ãªãã·ã§ã³
DashO ã¯ãã¯ã©ã¹ã®ãªãã¬ã¯ã·ã§ã³ã®äœ¿çšãæ€åºãããšããªãã¬ã¯ã·ã§ã³ ã³ãŒãã®å Žæãšã¿ãŒã²ãããã¡ã¢ããŠããããã®åæãç¶è¡ããŸããåæã®çµããã«ããªãã¬ã¯ã·ã§ã³ ã¬ããŒããåºåããŠããã«ãåŠçãäžæ¢ããŸãããããžã§ã¯ãå
ã®ãã¹ãŠã®ãªãã¬ã¯ã·ã§ã³åé¡ã«å¯ŸåŠããããDashO ããã«ããå®äºã§ããããã«ãforce
ãªãã·ã§ã³ãè¿œå ããããšãã§ããŸããforce
ãªãã·ã§ã³ã¯ããããžã§ã¯ã ãã¡ã€ã«ã§æå®ãããããŸãã¯ã³ãã³ã ã©ã€ã³ã® --force
ãªãã·ã§ã³ãä»ã㊠DashO ã«æž¡ãããšãã§ããŸãã é£èªåã UI ããã«ã ã·ã¹ãã çµ±åãä»ããŠå®è¡ã§ããããã.dox
ãã¡ã€ã«ã«ãã®å€ãèšå®ããããšããå§ãããŸãã--force
㯠DashO ã³ãã³ã ã©ã€ã³ã§ã®ã¿åäœããŸãã
ã¡ã¢ïŒ
å·®ã蟌ãŸããã³ãŒãããªãã¬ã¯ã·ã§ã³ã䜿çšããããšãããããããã®ãªãã·ã§ã³ãªãã§å®è¡ãããšãã«ã¯ãã§ãã¯ãç¡å¹ã«ããå¿ èŠããããããããŸããã
<global>
<option>force</option>
</global>
Makepublic ããã³ Nomakepublic ã°ããŒãã« ãªãã·ã§ã³
æ¢å®ã§ã¯ãDashO ã¯ãã£ã¹ã¯ã«æžã蟌ãåã«ãå ¬éãããã¹ãŠã®ã¯ã©ã¹ãéå ¬éã§ãªãã¡ãœãããããã³éå ¬éã§ãªããã£ãŒã«ãã®ã¢ã¯ã»ã¹ä¿®é£Ÿåãå€æŽããŸããããã«ã¯ããã€ãã®åœ±é¿ããããŸãã
ããã¯ãããã±ãŒãžã®ã¡ã³ããŒã·ãããå€æŽããä¿è·ãããã¢ã¯ã»ã¹ä¿®é£ŸåãŸãã¯æ¢å®ã®ïŒpackage-privateïŒã¢ã¯ã»ã¹ä¿®é£Ÿåã䜿çšããã¯ã©ã¹ã®åé¡ã解決ããŸãã
äžè¬ã«ãDashO ã¯ããã°ã©ã ã«ã¡ãœããåŒã³åºããçµã¿èŸŒãŸãªãã®ã§ãããã¯å±éºã§ã¯ãããŸãããçµå±ã®ãšãããã³ã³ãã€ã©ãã³ã³ãã€ã«æã«ã¢ã¯ã»ã¹å¶éã匷å¶ããŸãã
éœåããããããªã㯠ã¡ãœããã®åçãªã³ã¯ã¯ãããå¶éãããã¢ã¯ã»ã¹ ã¬ãã«ãããé«éã§ãããããããããªãã¯ã«ã¯å¶éããªãã®ã§ãçžåœããããã±ãŒãžãã¯ã©ã¹ã®ã¡ã³ããŒã·ãããæ€èšŒããã©ã³ã¿ã€ã ã¯å¿ èŠãããŸããã
ãã®åäœãæ¢ããã«ã¯ãnomakepublic
ãªãã·ã§ã³ã䜿çšããŸãããã®åäœã匷å¶ããã«ã¯ãmakepublic
ãªãã·ã§ã³ã䜿çšããŸããæ¢å®ã®åäœã䜿çšãããã€ãŸããã©ã®ããã«åäœãããã DashO ã«æ±ºããããã«ã¯ãã©ã¡ãã®ãªãã·ã§ã³ãå«ããªãã§ãã ããã
ã¡ã¢ïŒ
nomakepublic
ã䜿çšãããšãã¯ã©ã¹ãã¡ãœããããŸãã¯ãã£ãŒã«ãã®ä¿è·ããã/æ¢å®ã®ïŒpackage-privateïŒã¢ã¯ã»ã¹ä¿®é£Ÿåã§ã¢ã¯ã»ã¹ ãšã©ãŒãçºçãããããããŸãããã€ãŸããæå®ãããããã±ãŒãžã«ãã£ãã¯ã©ã¹ã¯çŸåšãååãå€æŽãããæ°ããããã±ãŒãžã«ããå¯èœæ§ããããŸããããããããã§ããŸã ãã¢ã¯ã»ã¹ã®äŸå€ãåŒãèµ·ããå ã®ããã±ãŒãžãããããªãã¯ã§ãªãã¯ã©ã¹ãã¡ãœããããŸãã¯ãã£ãŒã«ããžã®ã¢ã¯ã»ã¹ãè©Šã¿ãããšãã§ããŸãã
DashO ã®æ¢å®ã®åäœã¯ããã®åé¡ãããããåé¿ããŠãããã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠå®å šãšèŠãããŠããŸãã
<global>
<option>nomakepublic</option>
</global>
Renameforname ã°ããŒãã« ãªãã·ã§ã³
renameforname
ãªãã·ã§ã³ã¯ãåçã«èªã¿èŸŒãã ã¯ã©ã¹ã®ååãå€æŽã§ããããã«ããŸããDashO ãã¯ã©ã¹ãèªã¿èŸŒãããã«äœ¿çšãããæååãæçœã«å€æã§ããªãå Žåã«ã¯ããã®ã¯ã©ã¹ã <entrypoints> ã»ã¯ã·ã§ã³ã«åæããå¿
èŠããããŸãããããããããŸããªå Žåã¯ãfornamedetection
ãªãã·ã§ã³ã possible ã®ä¿¡é ŒåºŠã§å ±åãããã®ã«å¯Ÿå¿ããŸãã
ã¡ã¢ïŒ
ã³ãŒãã®äžã§ Java ã® assert ããŒã¯ãŒãã䜿ã£ãŠã¢ãµãŒã·ã§ã³ã䜿çšãããšãã¯ã©ã¹ãå ççã«ãªããŸããrenameforname ãªãã·ã§ã³ã䜿çšããªãéããDashO ã¯ãã®ã¯ã©ã¹ã®ååãå€æŽäžèœã«ããŸãã
<global>
<option>renameforname</option>
</global>
ã°ããŒãã« <exclude>
exclude
ãªãã·ã§ã³ã§ã¯ãå
¥åã¯ã©ã¹ã®äžéšãšããŠè¡šç€ºãããããDashO ã®æçµåºåã«å«ããŠã¯ãããªãã¯ã©ã¹ãŸãã¯ã¡ãœãããæå®ã§ããŸããã°ããŒãã« exclude ã®æ£èŠè¡šçŸã«äžèŽããã¯ã©ã¹ã¯ãåŠçããããæçµåºåã®å¯Ÿè±¡ãšããŠéžæãããŸããã
ããšãã°ããµãŒã ããŒãã£è£œã® jar ãã¡ã€ã«å ã«ååšãããã¹ãããµã³ãã«ã察象ããé€å€ããããšãã§ããŸãã
<global>
<exclude classname="com\.thirdparty\.tests\..*"/>
<exclude classname="com\.thirdparty\.sample\..*"/>
</global>
ã¡ã¢ïŒé€å€ãããã¯ã©ã¹ã®ååã¯ãåžžã«æ£èŠè¡šçŸãšããŠæå®ãããŸãã
Bypassdasho ã°ããŒãã« ãªãã·ã§ã³
bypassdasho
ãªãã·ã§ã³ã¯ãå
¥åãåŠçããªãããã« DashO ãæ§æããŸããå
¥å jar ãã¡ã€ã«ãšãã£ã¬ã¯ããªã¯ãçŽæ¥åºåã«ã³ããŒãããããã«ãªããŸãããã®ãªãã·ã§ã³ã¯ãåºåã§ã® merge å±æ§ã false ã«èšå®ãããŠããå ŽåããŸã㯠APK ãåºåããå Žåã«ã®ã¿äœ¿çšããããšãã§ããŸãã
<global>
<option>bypassdasho</option>
</global>
<inputpath> ã»ã¯ã·ã§ã³
<inputpath>
ã»ã¯ã·ã§ã³ã«ã¯ãDashO ãåŠçããã¯ã©ã¹ã®å Žæãå«ãŸããŸããDashO ã¯ããã£ã¬ã¯ããªãzip ãã¡ã€ã«ãããã³ jar ãã¡ã€ã«ãåŠçããããšãã§ããŸãããŸããlocation ã«è€æ°ã®ãšã³ããªãå«ããããšãã§ããŸããåãšã³ããªã¯ãOS åºæã®ã¯ã©ã¹ãã¹ã®åºåãæåã§åºåããŸãã
<inputpath>
<pathelement location="c:\test\app.jar"/>
<pathelement location="c:\test\classes"/>
<pathelement location="c:\test\one.jar;c:\test\two.jar"/>
</inputpath>
ã¡ã¢ïŒ
c:\test\classes
ã¯ãããã±ãŒãžæå®ã®ã©ã®éšåã«ããªããŸãããããã±ãŒãžã®ã«ãŒã ãã£ã¬ã¯ããªã«ãªããŸãã
<globalProcessingExclude> ã»ã¯ã·ã§ã³
<globalProcessingExclude>
ã»ã¯ã·ã§ã³ã«ã¯ããã¹ãŠã®åŠçããé€å€ããå¿
èŠã®ããã¯ã©ã¹ã®å Žæãå«ãŸããŸããããã¯ãControlFlow ã Renaming ãªã©åã
ã®é åã®é€å€ã»ã¯ã·ã§ã³ã«å«ããã®ãšåãå¹æããããŸãã
<globalProcessingExclude>
<classes name="android**"/>
<classes name="com.example.ExcludeMe"/>
</globalProcessingExclude>
<classpath> ã»ã¯ã·ã§ã³
<classpath>
ã»ã¯ã·ã§ã³ã«ã¯ãå
¥åã¯ã©ã¹ãåæããéã« DashO ãå¿
èŠãšãããããããªãã¯ã©ã¹ã®å Žæãå«ãŸããŸãããããã®ã¯ã©ã¹ã¯ãéåžžããµãŒã ããŒãã£è£œã®ããã±ãŒãžã§ãããããŸã㯠Java ã©ã³ã¿ã€ã ç°å¢ã®äžéšã§ãã jar ãã¡ã€ã«ã§ããDashO ã¯ãã¯ã©ã¹ãã¹å
ã®ãã£ã¬ã¯ããªãzip ãã¡ã€ã«ãJava ã¢ãžã¥ãŒã«ãããã³ jar ãã¡ã€ã«ãåŠçããããšãã§ããŸãããŸããlocation ã«è€æ°ã®ãšã³ããªãå«ããããšãã§ããŸããåãšã³ããªã¯ãOS åºæã®ã¯ã©ã¹ãã¹ã®åºåãæåã§åºåããŸãã
<classpath>
<pathelement location="c:\test\app.jar"/>
<pathelement location="c:\test\classes"/>
<pathelement location="c:\test\one.jar;c:\test\specialModule.jmod"/>
</classpath>
ãã£ã¬ã¯ããªïŒäŸïŒc:\test\classes
ïŒãæå®ããå Žåã¯ã以äžã®ã©ã¡ããã«ããŠãã ããã
- Java ã¢ãžã¥ãŒã«ïŒäŸïŒ
myFirstModule.jmod
ãanotherModule.jmod
ïŒãæ ŒçŽãããã£ã¬ã¯ã㪠.class
ãã¡ã€ã«ã®ã«ãŒã ãã£ã¬ã¯ããªããã©ã«ããŒã¯ããã±ãŒãžéå±€ãè¡šããŸãïŒäŸïŒcom\example\MyClass.class
ãcom\example\util\MyUtilities.class
ïŒ
ã¡ã¢ïŒ
ãã®ãã£ã¬ã¯ããªã«.jmod
ãã¡ã€ã«ãå«ãŸããå Žåã«ã¯ã.class
ãã¡ã€ã«ã¯æ€çŽ¢ãããŸããã
JDKHomeãuseJDKHomeãããã³ setJDKHomeProperties å±æ§
useJDKHome
ãèšå®ãããšãDashO ãäŸåé¢ä¿ãè©äŸ¡ããéãåœè©²ã® JDK ã«å«ãŸããã©ã³ã¿ã€ã ã¯ã©ã¹ã䜿çšãããŸãã
JDKHome
å±æ§ã§ã¯ããã®ãããžã§ã¯ãã§äœ¿çšãã JDK ã®å Žæãæå®ã§ããŸãã
setJDKHomeProperties
ãèšå®ãããšãJDKHome
ã«æå®ãããå€ããããã㣠JDK_HOME
ãš JAVA_HOME
ã®å€ãšã㊠DashO ã«ãã£ãŠäœ¿çšãããŸãã
<classpath useJDKHome="true" JDKHome="c:\Program Files\Java\jdk-9.0.4" setJDKHomeProperties="true">
<pathelement location="c:\test\classes"/>
âŠ
</classpath>
ã¡ã¢ïŒ
JDK ã®å Žæã®åç §ã¯ãappendrtjar
ãäžæžãããã®ã§ãappendrtjar
ãsystemclasspath
ãšäžç·ã«äœ¿çšããããšã¯ã§ããŸããã
Android API ãŸã㯠J2ME ã䜿çšãããããžã§ã¯ãã§ã¯ãJDK ã®å Žæãåç §ããªãã§ãã ããã ãã®ãããªãããžã§ã¯ãã¯ããããç¹å®ã®ç°å¢çšã®ã©ã³ã¿ã€ã jar ãã¡ã€ã«ãããšãã°Android.jar
ãmidpapi10.jar
ãå¿ èŠãšããŸãã
systemclasspath å±æ§ïŒéæšå¥šïŒ
ä»»æã§ã<classpath>
ã»ã¯ã·ã§ã³ã§æå®ããããã£ã¬ã¯ããªãš jar ãã¡ã€ã«ã«å ããã·ã¹ãã ã¯ã©ã¹ãã¹ ã append
ãŸã㯠prepend
ããããšãã§ããŸãã次ã®ãªãã·ã§ã³ã¯ã<classpath>
ã»ã¯ã·ã§ã³ã§æå®ããããã£ã¬ã¯ããªãš jar ãã¡ã€ã«ã®äžèŠ§ã®æ«å°Ÿã«ãã·ã¹ãã ã¯ã©ã¹ãã¹ãè¿œå ããŸãã
<classpath systemclasspath="append">
<pathelement location="c:\test\classes"/>
âŠ
</classpath>
ã¡ã¢ïŒ
- ãã®å±æ§ã¯ãéæšå¥šã«ãªã£ãŠãããããJava 9 以é㧠DashO ãå®è¡ããå Žåã«ã¯äœ¿çšã§ããŸããã
ã·ã¹ãã ã¯ã©ã¹ãã¹ã¯ãsun.boot.class.path
ããããã£ãšãå©çšå¯èœãªCLASSPATH
ç°å¢å€æ°å ã®å€ã§æ§æãããŠããŸãã
appendrtjar å±æ§ïŒéæšå¥šïŒ
DashO ã¯ãJava ã¢ããªã±ãŒã·ã§ã³ãé£èªåããå ŽåãJava ã©ã³ã¿ã€ã ã¯ã©ã¹ã«ã¢ã¯ã»ã¹ããå¿
èŠããããŸãã
ãã®å±æ§ã true
ã«èšå®ãããšãDashO ã¯ãèªèº«ã§äœ¿çšããŠããã©ã³ã¿ã€ã ã¯ã©ã¹ãå©çšããŸãã
false
ã«èšå®ããå Žåã¯ããŠãŒã¶ãŒãèªåã§ã©ã³ã¿ã€ã ã¯ã©ã¹ãçšæããå¿
èŠããããŸãã
<classpath appendrtjar="false">
<pathelement location="c:\Java\jre1.7.0_80\lib\rt.jar"/>
</classpath>
ã¡ã¢ïŒ
- ãã®å±æ§ã¯ã
UseJDKHome
ã«çœ®ãæãããããããJava 9ïŒä»¥éïŒJRE 㧠DashO ãå®è¡ããå Žåã«ã¯äœ¿çšã§ããŸããã
Android API ãŸã㯠J2ME ã䜿çšãããããžã§ã¯ãã§ã¯ãappendrtjar
ãfalse
ã«èšå®ããå¿ èŠããããŸãã ãã®ãããªãããžã§ã¯ãã¯ããããç¹å®ã®ç°å¢çšã®ã©ã³ã¿ã€ã jar ãã¡ã€ã«ãããšãã°Android.jar
ãmidpapi10.jar
ãå¿ èŠãšããŸãã
<entrypoints> ã»ã¯ã·ã§ã³
ãšã³ã㪠ãã€ã³ããšã¯ãDashO ãã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšãããŠããã¯ã©ã¹ããã¡ãœãããããã³ãã£ãŒã«ããå€æããããã«è¡ãäŸåé¢ä¿ã®åæã®éå§ç¹ã§ããèšãæããã°ãããããã¢ããªã±ãŒã·ã§ã³ã®ãšã³ã㪠ãã€ã³ãã§ãã
ãšã³ã㪠ãã€ã³ã㯠DashO ã«ãã£ãŠåæãããã¯ã©ã¹ãæ©èœããã«ã¯ã©ã®ã¯ã©ã¹ãã¡ãœãããããã³ãã£ãŒã«ããå¿ èŠã§ããããå€æããŸããããšãã°ããšã³ã㪠ãã€ã³ããåŒã³åºããã¹ãŠã®ã¡ãœãããããã³ãããã®ã¡ãœãããåŒã³åºãåŸç¶ã®ã¡ãœããã¯ãDashO ã§å¿ èŠã§ãããšå€æãããŸããã€ãŸããDashO ã«å¯ŸããŠç¹å®ã® Main ã¡ãœãããå¿ èŠã§ãããšéç¥ããå Žåã¯ããã® Main ã¡ãœãããåŒã³åºããã¹ãŠã®ã¡ãœãããå¿ èŠã§ãããšããããšã§ãã
<method> ããã³ <field> ãšã³ããªãã€ã³ã
ãšã³ã㪠ãã€ã³ã ã¡ãœããã¯ãã¢ããªã±ãŒã·ã§ã³ãã©ãããéå§ããã®ãã瀺ããŠããŸããããã³ãŒããèŠãŠããŠã誰ãã«ãã®ã³ãŒããã©ããªåŠçããããã®ããå°ãããããããŸãæåã«ã©ãã«æ³šç®ããã§ããããïŒããããããã®ã³ãŒãã« main ã¡ãœãããå«ãŸããŠãããã©ããããã§ãã¯ããã§ãããããã® main ã¯ããã®ã¢ããªã±ãŒã·ã§ã³ã«ããããšã³ããªãŒ ãã€ã³ã ã¡ãœããã§ããäžè¬ã«ãæå®ãããã¯ã©ã¹ã® main ã䜿çšããŸãã
<entrypoints>
<classes name="test.MyApplication">
<method name="main" signature="java.lang.String[]"/>
</classes>
</entrypoints>
ã¡ãœããã®çœ²åãæå®ãããšãã¯ãäžèšã®äŸã®ããã«ãString[]
ã§ã¯ãªã java.lang.String[]
ãçšããŠãå®å
šä¿®é£Ÿã®ã¯ã©ã¹åã䜿çšããŸããè€æ°ã®ãã©ã¡ãŒã¿ãŒã¯ãã¹ããŒã¹ãå
¥ããã«ã«ã³ãã§åºåãå¿
èŠããããŸãããŸããã¡ãœããåãšããŠç¹å¥ãª <init>
è¡šèšæ³ã䜿çšãããšãã³ã³ã¹ãã©ã¯ã¿ãŒããšã³ã㪠ãã€ã³ããšããŠæå®ããããšãã§ããŸãããããžã§ã¯ã ãã¡ã€ã«ã¯ XML ãªã®ã§ãå¿ããã« <
ãš >
ã䜿çšããŠãã ããã
ã¯ã©ã¹ãã¡ã³ããŒãããã³ã¡ãœããã®çœ²åã®ååã¯ããªãã©ã«ããã¿ãŒã³ããããã¯æ£èŠè¡šçŸãšããŠæå®ããããšãã§ããŸãã詳现ã«ã€ããŠã¯ãååïŒãªãã©ã«ããã¿ãŒã³ãããã³æ£èŠè¡šçŸãåç §ããŠãã ããã
Rename å±æ§
ãšã³ã㪠ãã€ã³ãã¯ãããã€ãã®å€éšã¡ã«ããºã ã«ãã£ãŠåç
§ãããŠãããããæ¢å®ã§ã¯ååãå€æŽã§ããŸãããå Žåã«ãã£ãŠã¯ããšã³ã㪠ãã€ã³ãã®ååãå€æŽããããšãã§ããŸããããšãã°ãDashO ã¯ãååãå€æŽãããã¯ã©ã¹ã䜿ã£ãŠ jar ãã¡ã€ã«ã®ãããã§ã¹ãã® Main-Class
å±æ§ãæŽæ°ããŸãããã®å Žåãã¯ã©ã¹ã®ååã¯å€æŽã§ããŸãããmain ã¡ãœããã®ååã¯å€æŽã§ããŸããã<classes>
ã<method>
ãããã³ <field>
ã¿ã°ã¯ãã¹ãŠãé
ç®ã®ååå€æŽæ©èœãå¶åŸ¡ãã rename
å±æ§ãæã£ãŠããŸãã
<entrypoints>
<classes name="test.OtherApplication" rename="true">
<method name="main" signature="java.lang.String[]"/>
</classes>
</entrypoints>
<publics> ãšã³ã㪠ãã€ã³ã
<classes>
ãšã³ã㪠ãã€ã³ããšåæ§ãname
å±æ§ã«ã¯ãªãã©ã«ããã¿ãŒã³ããŸãã¯æ£èŠè¡šçŸãæå®ã§ããŸãããšãã«ã¯ãã¯ã©ã¹ãã¢ããªã±ãŒã·ã§ã³ãžã®ã€ã³ã¿ãŒãã§ã€ã¹ã§ããå ŽåããããŸãããã®ã¯ã©ã¹ã¯ãã¢ããªã±ãŒã·ã§ã³ãžã®ãšã³ã㪠ãã€ã³ãã§ããå€ãã®ã¡ãœãããå«ãã§ãããããããŸãããæå®ããã¯ã©ã¹ã®ãã¹ãŠã®ãããªã㯠ã¡ãœããããšã³ã㪠ãã€ã³ããšããŠæå®ãããå Žåã¯ããããããåå¥ã«æå®ããããããã㯠<publics>
ã¿ã°ã䜿çšããããšãã§ããŸãã
<entrypoints>
<publics name="test.MyApplet"/>
</entrypoints>
<publics>
ã§æå®ãããã¯ã©ã¹ãã¡ã³ããŒããrename-class
ããã³ rename-members
å±æ§ã䜿çšããŠãååãå€æŽå¯èœã«ããããšãã§ããŸããã©ã¡ãã®å±æ§ãçç¥å¯èœã§ãæ¢å®å€ã¯ false
ã§ãã
<entrypoints>
<publics name="com.yoyodyne.**Bean" rename-class="true" rename-members="false"/>
</entrypoints>
<library> ãšã³ã㪠ãã€ã³ã
API ã©ã€ãã©ãªã§ã¯ãlibrary ãªãã·ã§ã³ã䜿çšããããšã«ããããã£ã¬ã¯ããªãŸã㯠jar ãã¡ã€ã«å ã®ãã¹ãŠã®ã¯ã©ã¹ã®ãã¹ãŠã®ãããªã㯠ã¡ãœããããã³ä¿è·ãããã¡ãœãããæå®ã§ããŸãã
<entrypoints>
<library public="off">
<dir path="myAPIDirectory"/>
</library>
</entrypoints>
ã¡ã¢ïŒ
ãã£ã¬ã¯ããªãŸã㯠jar ãã¡ã€ã«ãã©ã€ãã©ãªãšããŠè¿œå ããå Žåã¯ãããã <classpath> ã«è¿œå ããå¿ èŠã¯ãããŸãããDashO ã¯ãããèªåçã«è¡ããŸãã
<entrypoints>
<library public="off">
<jar path="myAPI.jar"/>
</library>
</entrypoints>
public
ã®å€ã¯ on
ãŸã㯠off
ã«ãªããŸããçç¥ããå Žåã¯ãon
ãšèŠãªãããŸãã
myAPIDirectory
äžã«ãããã¹ãŠã®ãã£ã¬ã¯ããªã®ãååž°äžéã«ãã£ãŠèŠã€ãã£ããã¹ãŠã®ã¯ã©ã¹ã®å
šãããªã㯠ã¡ãœããã¯ãããªã¬ãŒãšããŠäœ¿çšãããŸããmyAPIDirectory
ã¯ãããã±ãŒãžæå®ã®äžéšã§ãã£ãŠã¯ãªããŸãããããã¯ãããã±ãŒãžãååšãããã£ã¬ã¯ããªã«ãªããšããããšã§ããã€ãŸããã¯ã©ã¹ãã¹ã«çœ®ããã®ãšåããã£ã¬ã¯ããªã«ãªããŸããjar ãã¡ã€ã«ã䜿çšãããšç°¡åã§ããjar ã§èŠã€ãã£ããã¹ãŠã®ã¯ã©ã¹ã䜿çšãããŸããpath å€ã«ç€ºãå Žæã«ã¯ãè€æ°ã®ãšã³ããªãå«ããããšãã§ããŸãããããã㯠OS åºæã®ã¯ã©ã¹ãã¹ã®åºåãæåã§åºåããŸãã
ãããªã㯠ã¡ãœããã®ã¿ããšã³ã㪠ãã€ã³ããšããŠäœ¿çšãããå Žåã¯ãlibrary
ã¿ã°ã® public
ã on
ã«èšå®ããŠäœ¿çšããŸãã
<classes> ãšã³ã㪠ãã€ã³ã
å«ãŸããã¡ãœãããããããæšæž¬ããã«ã¯ã©ã¹ã察象ãšããŠéžæããããšãå¯èœã§ããäžéšã®ã¢ããªã±ãŒã·ã§ã³ãæ£ç¢ºã«ããã±ãŒãžåããããã«ãããã«æåã§ã¯ã©ã¹ãæå®ããããšã¯æ¥µããŠéèŠã§ããã¢ããªã±ãŒã·ã§ã³ã§ Class.forName()
ã³ã³ã¹ãã©ã¯ãã䜿çšããŠããå ŽåãDashO ã¯å¿
èŠãšãããå¯èœæ§ã®ãããã¹ãŠã®ã¯ã©ã¹ãå€æããããšãã§ããŸããããã®ãããªå ŽåãDashO 㯠forName(s)
ã®å Žæãç¥ãããŠãçµäºããŸãããã®åŸãæåã§ããã«ãããã®ã¯ã©ã¹ãå
¥åããforce ãªãã·ã§ã³ãèšå®ã㊠DashO ãåå®è¡ããå¿
èŠããããŸããããã§æå®ããããã¹ãŠã®ã¯ã©ã¹ã¯ãã¡ãœããããã³ãã£ãŒã«ãã®é€å»ã«å©çšã§ããŸãã
<entrypoints>
<classes name="com.yoyodyne.Application"/>
</entrypoints>
ããã«ãããDashO 㯠com.yoyodyne.Application
ãèªã¿èŸŒãããã«ãªããŸãããã©ã®ã¡ãœããããã£ãŒã«ãããšã³ã㪠ãã€ã³ããšããŠäœ¿çšããªããªããŸãããã®ã¯ã©ã¹ãã·ã¹ãã ã¡ãœããããŠãŒã¶ãŒãäœæããä»ã®ã¡ãœããããªãŒããŒã©ã€ãããå Žåã¯ãã¯ã©ã¹ã®ã¡ãœããã察象ãšããŠéžæãããŸãããã®æ¹æ³ã§å
¥åãããã¯ã©ã¹ã¯ãã°ããŒãã« renameforname ãªãã·ã§ã³ããªã³ã«ãªã£ãŠããå Žåã«ã¯ãååãå€æŽå¯èœã«ãªããŸãã
<unconditional> ãšã³ã㪠ãã€ã³ã
ãšãã«ã¯ãä»ã®ã¯ã©ã¹ããæ瀺çã«åç
§ãããŠããªãã¯ã©ã¹ã§ãã£ãŠãã察象ãšããŠéžæããå¿
èŠãçããããšããããŸããããã¯ç¡æ¡ä»¶ã®ãšã³ã㪠ãã€ã³ããä»ããŠè¡ãããŸãããã®å Žåã¯ãã¯ã©ã¹ã®ãã¹ãŠã®ã¡ã³ããŒããšã³ã㪠ãã€ã³ããšããŠäœ¿çšãããåºåã«çŸããŸããä»ã®ãšã³ã㪠ãã€ã³ããšåæ§ãname å±æ§ã«ã¯ãªãã©ã«ããã¿ãŒã³ããŸãã¯æ£èŠè¡šçŸãæå®ã§ããŸããæ¢å®ã§ãã¯ã©ã¹ãšã¡ã³ããŒã®ååã¯å€æŽäžèœã§ãããrename-class
ããã³ rename-members
å±æ§ã䜿çšããããšã«ãããååãå€æŽå¯èœã«ããããšãã§ããŸãã
ç¹æ®ãªã¢ããªã±ãŒã·ã§ã³ã®ãšã³ã㪠ãã€ã³ã
DashO ã«ã¯ãããã€ãã®ç°ãªãåã® Java ã¢ããªã±ãŒã·ã§ã³æ§æãçµã¿èŸŒãŸããŠããŸãã䟿å®äžãDashO ã¯ããããã®ã¢ããªã±ãŒã·ã§ã³ã®ãã¡ã®äžéšã«ã€ããŠããšã³ã㪠ãã€ã³ããæå®ããããã®ç¹å¥ãªæ§æãå®çŸ©ããŠããŸããååã¯ããªãã©ã«ããã¿ãŒã³ããŸãã¯æ£èŠè¡šçŸãšããŠæå®ã§ããŸããååïŒãªãã©ã«ããã¿ãŒã³ãããã³æ£èŠè¡šçŸãåç
§ããŠãã ãããæ¢å®ã§ãã¯ã©ã¹ãšã¡ã³ããŒã®ååã¯å€æŽäžèœã§ãããã¹ãŠã®çš®é¡ã rename-class
å±æ§ã䜿çšããäžéšã®çš®é¡ã rename-members
å±æ§ããµããŒãããŠããŸãã
<applet>
ã¢ãã¬ããã® init()
ããã³ paint()
ã¡ãœããã¯ç¹ã«ãèªåçã«å¯Ÿè±¡ãšããŠéžæãããŸããã¢ãã¬ããããªãŒããŒã©ã€ããããã¹ãŠã®ã¡ãœããã¯ãèªåçã«ãšã³ã㪠ãã€ã³ãã«ãªããŸããããããã©ã®ãããªã¢ãã¬ãã ã¯ã©ã¹ããšã³ã㪠ãã€ã³ã ã¯ã©ã¹ã§ãããã«ã€ããŠãå®å
šãªåœ¢åŒã®æ瀺ãæå®ããå¿
èŠããããŸãã
<entrypoints>
<applet name="test.MyApplet"/>
</entrypoints>
<applet>
ã¿ã°ã§ã¯ãrename-class
å±æ§ïŒæ¢å®ã§ false
ïŒã¯äœ¿çšããŸãããrename-members
å±æ§ã¯äœ¿çšããŸãããã€ãŸãããšã³ã㪠ãã€ã³ã ã¡ã³ããŒã¯ã€ã³ã¿ãŒãã§ã€ã¹ã«ãã£ãŠå®çŸ©ãããŠãããååãå€æŽã§ããŸãããã¯ã©ã¹å
ã®ä»ã®ã¡ãœããã¯ååãå€æŽã§ããŸãã
<servlet>
ãµãŒãã¬ããã®ãšã³ã㪠ãã€ã³ãã¯æ¬¡ã®ããã«æå®ããããšãã§ããŸãã
<entrypoints>
<servlet name="test.MyServlet"/>
</entrypoints>
<servlet>
ã¿ã°ã§ã¯ãrename-class
å±æ§ïŒæ¢å®ã§ false
ïŒã¯äœ¿çšããŸãããrename-members
å±æ§ã¯äœ¿çšããŸãããã€ãŸãããšã³ã㪠ãã€ã³ã ã¡ã³ããŒã¯åºæ¬ã¯ã©ã¹ã«ãã£ãŠå®çŸ©ãããŠãããååãå€æŽã§ããŸãããã¯ã©ã¹å
ã®ä»ã®ã¡ãœããã¯ååãå€æŽã§ããŸãã
<ejb> Enterprise Java Beans
Enterprise Java Beans ã¯ãç¹å®ã® EJB ã«é¢é£ããã¯ã©ã¹ãæå®ããããã®ç¬èªã®è¡šèšæ³ãæã£ãŠããŸãã
<entrypoints>
<ejb name="MyEntityBean"/>
<ejb name="MyRemoteInterface"/>
<ejb name="MyHomeInterface"/>
<ejb name="MySessionBean"/>
<ejb name="MyPrimaryKey"/>
</entrypoints>
<ejb>
ã¿ã°ã¯ãrename-class
å±æ§ïŒæ¢å®ã§ false
ïŒãš rename-members
å±æ§ïŒæ¢å®ã§ false
ïŒã®äž¡æ¹ã䜿çšããŸãã
ã¡ã¢ïŒ
ãã 1 ã€ã®æ¹æ³ãšããŠãEJB ã§ã¯ãããã®ãšã³ã㪠ãã€ã³ããæå®ããããã«<publics>
è¡šèšã䜿çšããããšãã§ããŸãã
<midlet> ãš <iappli>
DashO ã¯ãMobile Information Device ProfileïŒMIDPïŒä»æ§ïŒMIDletïŒã§æžãããã¢ããªã±ãŒã·ã§ã³ã®æ瀺çãªãµããŒããæäŸããŠããŸããmidlet ã¯ã©ã¹ã¯ãäŸåé¢ä¿ã®ä»»æã®ã¬ãã«ã§ javax.microedition.midlet.Midlet
ã®ãµãã¯ã©ã¹ã«ããããšãã§ããŸãã
<entrypoints>
<midlet name="test.MyMidlet"/>
</entrypoints>
åæ§ã«ãDashO ã¯ãNTT ãã³ã¢ã® iã¢ã㪠ãã¬ãŒã ã¯ãŒã¯çšã«æžãããã¢ããªã±ãŒã·ã§ã³ãæ瀺çã«ãµããŒãããŠããŸããiappli
ã¯ã©ã¹ã¯ãäŸåé¢ä¿ã®ä»»æã®ã¬ãã«ã§ com.nttdocomo.ui.IApplication
ã®ãµãã¯ã©ã¹ã«ããããšãã§ããŸãã
<entrypoints>
<iappli name="test.MyIappli"/>
</entrypoints>
ã¿ã°ã¯äž¡æ¹ãšããrename-class
å±æ§ïŒæ¢å®ã§ false
ïŒã¯äœ¿çšããŸãããrename-members
å±æ§ã¯äœ¿çšããŸããããšã³ã㪠ãã€ã³ã ã¡ã³ããŒã¯åºæ¬ã¯ã©ã¹ã«ãã£ãŠå®çŸ©ãããŠãããååãå€æŽã§ããŸãããã¯ã©ã¹å
ã®ä»ã®ã¡ãœããã¯ååãå€æŽã§ããŸãã
MIDlet ãããžã§ã¯ãã®æ§æ
Java ã©ã³ã¿ã€ã Jar ã JDK ãå«ããªãã§ãã ããã代ããã«ãç°å¢å€æ°ãŸãã¯ããããã£ã Oracle ã® Wireless Toolkit ã®ã€ã³ã¹ããŒã«ãæãããã«èšå®ããŸãã
ã¡ã¢ïŒ
WTK_HOME
ã»ããã¢ãããšåŒã°ããç°å¢å€æ°ãããå Žåã¯ããããçŽæ¥äœ¿çšãããããŸãã¯ãã®èšå®ã䜿çšãã DashO ããããã£ãäœæããããšãã§ããŸãã
<propertylist>
<!-- To force the environment variable to be set -->
<property name="wtk.home" value="${WTK_HOME:?WTK_HOME not defined}"/>
<!-- To use a default if not set -->
<property name="wtk.home" value="${WTK_HOME:-C:\WTK2.5.1}"/>
</propertylist>
ã¯ã©ã¹ãã¹ã« cldcapi
ãš midpapi
ã® jar ãè¿œå ããŸãããããã® jar ãã¡ã€ã«ã¯ãOracle ã® Wireless Toolkit ã®äžéšã§ãã
<classpath>
<jar path="${wtk.home}/lib/cldcapi10.jar"/>
<jar path="${wtk.home}/lib/midpapi10.jar"/>
</classpath>
ãããžã§ã¯ãã®äºåæ€èšŒãèšå®ããŸãã
<preverifier run="true">
${wtk.home}/bin/preverify.exe
</preverifier>
<android>
DashO ã¯ãandroid ã¯ã©ã¹ã®ãµããŒããæäŸããŠããŸããã¯ã©ã¹ã¯ãandroid.app.Application
ãandroid.app.Activity
ãandroid.app.Service
ãandroid.content.BroadcastReceiver
ããŸã㯠android.content.ContentProvider
ã®ãµãã¯ã©ã¹ã«ããããšãã§ããŸãããšã³ã㪠ãã€ã³ãã¯ãAndroidManifest.xml
ã«æããããŠããã¯ã©ã¹ã§ããååã®å€æŽã¯ãã¢ããªã±ãŒã·ã§ã³ã®å€éšã§åç
§ãããªãã¯ã©ã¹ã«ã€ããŠã®ã¿è¡ãããã¹ãã§ãã
<entrypoints>
<android name="com.example.myApp.MyActivity"/>
<android name="com.example.myApp.MyIntActivity" rename-class="true"/>
</entrypoints>
<android>
ã¿ã°ã¯ãrename-class
å±æ§ïŒæ¢å®ã§ false
ïŒãš rename-members
å±æ§ïŒæ¢å®ã§ true
ïŒã®äž¡æ¹ã䜿çšããŸãã
<springbean>
DashO 㯠Spring Beans ããµããŒãããŠããŸãããããã¯ãbeans.xml
ãã¡ã€ã«ã§åç
§ãããã¯ã©ã¹ã«ãªããŸããä»ã®ç¹æ®ã¯ã©ã¹ã«ã¯ååšããªãã<springbean>
ã§ãµããŒããããè¿œå å±æ§ããããŸãã
entrypoints
â 以äžã®ãããªå±æ§ã® bean å®çŸ©ã§äœ¿çšããããã¡ãœããåã®ã«ã³ãåºåãã®äžèŠ§ãinit-method
â bean ãäœæããåŸã« Spring ãã¬ãŒã ã¯ãŒã¯ã«ãã£ãŠåŒã³åºãããã¡ãœãããdestroy-method
â bean ãç Žæ£ããåã« Spring ãã¬ãŒã ã¯ãŒã¯ã«ãã£ãŠåŒã³åºãããã¡ãœãããfactory-method
â bean ãã€ã³ã¹ã¿ã³ã¹åãããšãã« Spring ãã¬ãŒã ã¯ãŒã¯ã«ãã£ãŠåŒã³åºãããã¡ãœããã
renamePropertyMethods
âTrue/False
ïŒæ¢å®ã§false
ïŒïŒãããã㣠ã¡ãœããã®ååãå€æŽããŸãïŒget*()
ãset*(*)
ãããã³is*()
ïŒããã³ããããã®ã¡ãœããã§è¡šããããã£ãŒã«ãïŒãrenameEntryPoints
âTrue/False
ïŒæ¢å®ã§false
ïŒïŒentrypoints
äžã«æããããŠãããšã³ã㪠ãã€ã³ã ã¡ãœããã®ååãå€æŽããŸãã
<entrypoints>
<springbean name="com.example.spring.beans.MyBean"
entrypoints="initBean,destroyBean,createBeanOne,createBeanTwo"
rename-class="false" renamePropertyMethods="true" renameEntryPoints="true"/>
</entrypoints>
<springbean>
ã¿ã°ã¯ãrename-class
å±æ§ïŒæ¢å®ã§ true
ïŒãš rename-members
å±æ§ïŒæ¢å®ã§ true
ïŒã®äž¡æ¹ã䜿çšããŸããããã bean ã®ãããªã㯠ã³ã³ã¹ãã©ã¯ã¿ãŒã¯ãã¹ãŠä¿æãããŸãã
<report> ã»ã¯ã·ã§ã³
ã¬ããŒã ãã¡ã€ã«ãæå®ãããŠããå Žåã¯ãDashO ã¯é€å»ããããã¹ãŠã®ã¡ãœãããšãã£ãŒã«ãã瀺ãã¬ããŒããäœæããŸãããŸãã¬ããŒãã«ã¯ãå šäœã®ã¡ãœããããã£ãŒã«ããããã³å®æ°ããŒã« ãšã³ããªã®é€å»ãå«ãããããžã§ã¯ãå šäœã®ç·æ°ããŸãšããããŠããŸãã
<report path="c:\output\dasho-report.txt"/>
èŠåãšãšã©ãŒã¯ã³ã³ãœãŒã«ã«æž¡ãããŸãã
ã¬ããŒãããã®æç²ã¯æ¬¡ã®ããã«ãªããŸãã
Removal Option : Remove all unused Dependency Report for Entry Points: GifWiz.Editor.main(java.lang.String[]) ------------------------------------------------------------------------ gifwiz.ConsoleMessage ======================================================================== Removable Method display() Removable Method outline(int) Removable Field n Removable Field z1 gifWiz.Arc ======================================================================== Removable Method round(double) Removable Method update_scp() Removable Method update_scp(int) Removable Method corners() Removable Field ccw Removable Field cw Removable Field dalpha21 Removable Field dalpha10
å Removable ã¡ãœããã¯ãããã°ã©ã ã®å®è¡ã«ãããŠäžå¿ èŠã§ãããš DashO ãå€æãããã®ã§ãã
DashO ã¯ãå®è¡ã«é¢ããŠèŠçŽããçµæãåºåããŸãã
Statistics In Out Change ======================================================================== Classes 612 596 -2.6% Methods 8975 7095 -20.9% Fields 4953 2792 -43.6% Constants 103306 90756 -21.9% Processing Time: 4:46.977 min
ãã® DashO ã®å®è¡ã§ããã¹ãŠã®ã¡ãœããã®ã»ãŒ 21% è¿ããé€å»ããããšãã§ããŸãããããããããã¯ã¢ããªã±ãŒã·ã§ã³ã®ãµã€ãºã 21% çž®å°ããããšããããã§ã¯ãããŸãããé€å»ãããã¡ãœããã®ããŒã»ã³ããŒãžã¯ãã¢ããªã±ãŒã·ã§ã³ã®ãµã€ãºã®ããã 1% ãããããŸããã
<output> ã»ã¯ã·ã§ã³
<output>
ã¿ã°ã¯ãDashO ã§åºåããã£ã¬ã¯ããªãjar ãã¡ã€ã«ããŸã㯠APK ãã¡ã€ã«ãžæžã蟌ãããã«ãããã©ããã瀺ããŸããåºåã®åœ¢åŒã¯ãååã®å€æŽãªãã·ã§ã³ã«äŸåããŸãããŸããè€æ°ã®çµæã 1 ã€ã®åºåã«ãŸãšããããå
¥åãšåãããã±ãŒãžãä¿æãããã©ãããå¶åŸ¡ããŸããååã®å€æŽãæå®ããªãå Žåã¯ãçŸåšååšãããã£ã¬ã¯ããª/ããã±ãŒãžæ§é ã¯æå®ããããã£ã¬ã¯ããªã«åäœæãããã®ã§ãåºåå
ããœãŒã¹ãšåãã«ãªããªãããã«ããŠãã ãããååãå€æŽããå Žåã¯ãããã±ãŒãžã®æŠå¿µãåé€ããããšãã§ãããã¹ãŠã®ã¯ã©ã¹ãæå®ããããã£ã¬ã¯ããªã«çœ®ãããŸãã
<output merge="true">
<dir path="c:\output\"/>
</output>
ä»»æã§ãjar ãã¡ã€ã«ã®åºå㧠manifest
ãæå®ããããšãã§ããŸããDashO ã¯ãåºå jar ãã¡ã€ã«ã«ãããã§ã¹ã ãã¡ã€ã«ãã³ããŒããŸãããããã§ã¹ãã® jar ãã¡ã€ã«ãæå®ããå Žåã¯ãããããããã§ã¹ãã®ãœãŒã¹ãšããŠäœ¿çšãããŸãã
<output merge="true">
<jar path="c:\output\dashoed.jar" manifest="c:\misc\Manifest.mf"/>
</output>
APK ã«åºåããå Žåã¯ãå ¥åãšã㊠APK ãæã£ãŠããå¿ èŠããããŸããAPK ãæŽåããããã©ãããæå®ããããšãã§ããŸããããã¯ãAPK ã眲åãããŠããå Žåã«ã®ã¿ãtrue ã«èšå®ããå¿ èŠããããŸãã
<output zipAlign="true">
<apk path="c:\output\myApp.apk"/>
</output>
ã¡ã¢ïŒ
path
ãšmanifest
ã®äž¡æ¹ã®å±æ§ã¯ãããããã£ããµããŒãããŠããŸãã
Jar å±æ§
DashO ã <jar>
ã¿ã°ã䜿çšã㊠1 ã€ä»¥äžã® jar ãã¡ã€ã«ãäœæããå Žåãããã㯠merge=false ã§ããå Žåã«ã¯ãjar ãã¡ã€ã«ã®äœæãã«ã¹ã¿ãã€ãºããå±æ§ãæå®ããããšãã§ããŸãã
compress
="boolean" â jar ãã¡ã€ã«å ã®ãšã³ããªãå§çž®ãããã©ããã決å®ããŸããæ¢å®å€ã¯true
ã§ããlevel
="0-9" â jar ãã¡ã€ã«ã®ãšã³ããªã®å§çž®ã¬ãã«ãæ¢å®å€ã¯6
ã§ããå€ã倧ããã»ã©ãããé«ãå§çž®çãäžããŸããfilesonly
="boolean" â jar ã«å«ãããšã³ããªãããã¡ã€ã«ã®ã¿ãšãããããã£ãŒã«ããšãã£ã¬ã¯ããªã®äž¡æ¹ãšãããã©ããã決å®ããŸããæ¢å®å€ã¯true
ã§ããincludenonclassjars
="boolean" â æ®ãã®ã¯ã©ã¹ãäœãå«ãŸããŠããªã jar ãã¡ã€ã«ãåºåã«å«ããå¿ èŠããããã©ããã決å®ããŸããæ¢å®å€ã¯false
ã§ãã
<output merge="false" compress="true" level="4" filesonly="false">
<dir path="c:\output\"/>
</output>
ãã®ãµã³ãã«ã§ã¯ããã¡ã€ã«ãšãã®ãã£ã¬ã¯ããªæ§é ã®äž¡æ¹ã®ãšã³ããªãå«ã jar ãã¡ã€ã«ããäžçšåºŠã®å§çž®ã¬ãã«ã§çæãããŸãã
APK å±æ§
DashO 㧠<apk>
ã¿ã°ã䜿çšã㊠APK ãäœæããå Žåã«ã¯ãAPK ãæŽåãããå¿
èŠããããã©ãããæå®ã§ããŸãã
zipAlign
="boolean" âzipalign
ã䜿çšããŠãAPK ãæŽåãããå¿ èŠããããã©ããã決å®ããŸããæ¢å®å€ã¯false
ã§ããããã¯ãAPK ã眲åãããŠããå Žåã«ã®ã¿ãtrue ã«èšå®ããå¿ èŠããããŸãã
Merge å±æ§
DashO ã¯ãé£èªåãããçµæãçµåããŠåäžã®ãã£ã¬ã¯ããªãŸã㯠jar ã«å
¥ãããããŸãã¯å
¥åã¯ã©ã¹ã®å
ã®ããã±ãŒãžãä¿æããããšãã§ããŸãã
ãã®åäœã¯ã<output>
ã¿ã°ã® merge
å±æ§ã䜿çšããŠå¶åŸ¡ãããŸãã
merge
å±æ§ã®å€ã¯ãtrue
ãŸã㯠false
ã§ãã
merge
å±æ§ãæå®ãããŠããªãå Žåã¯ãæ¢å®å€ã® true
ã«ãªããŸãã
merge="true"
ããã DashO ã®æ¢å®ã®ã¢ãŒãã§ãã
merge="true"
ã®å Žåã¯ã<dir path="..."/>
ãŸã㯠<jar path="..."/>
ã®ãããããåºåã«äœ¿çšã§ããŸãã
DashO ã¯ãé£èªåããããã¹ãŠã®ã¯ã©ã¹ãçµåããŠãæ瀺ããã jar ãã¡ã€ã«ãŸãã¯åºåãã£ã¬ã¯ããªãžå
¥ããŸãã
merge="false"
merge="false"
ãæå®ãããå Žåã¯ã<dir path="..."/>
ã®ã¿åºåã«äœ¿çšã§ããŸãã
DashO ã¯ãåºåãã£ã¬ã¯ããªã«å
¥åã¯ã©ã¹ã®å
ã®ããã±ãŒãžãä¿æããŸãã
jar ãã¡ã€ã«ã«ãã£ãŠããããããã¯ã©ã¹ã¯ãåºåãã£ã¬ã¯ããªã®åãååã® jar ãã¡ã€ã«ã«é
眮ãããŸãã
ãŸããjar ãã¡ã€ã«ã«ãã£ãŠãããããããããã§ã¹ã ãã¡ã€ã«ãšéã¯ã©ã¹ ãã¡ã€ã«ã¯ãé£èªåããã jar ãã¡ã€ã«ã«ã³ããŒãããŸãã
ãã£ã¬ã¯ããªã«ãã£ãŠããããããã¯ã©ã¹ã¯ãåºåãã£ã¬ã¯ããªå
ã®ãµããã£ã¬ã¯ããªã«é
眮ãããŸãã
å
¥åãã£ã¬ã¯ããªã«çŸããéã¯ã©ã¹ ãã¡ã€ã«ãã³ããŒãããããšã¯ãããŸããã
DashO ã¯ãå
±éã®ã«ãŒãã®å Žæãåºãšãããjar ãã¡ã€ã«ãšãã£ã¬ã¯ããªéã®çžå¯Ÿãã¹ãä¿æããããšããŸãã
ãã®èšå®ã¯ã<dir>
åºåããã³ <jar>
åºåã«ã®ã¿é©çšãããŸãã
ã¡ã¢ïŒ
merge="false"
ãªãã·ã§ã³ã¯ã<dir path="âŠ"/>
ã¿ã°ãåºåã«äœ¿çšããå¿ èŠããããŸãã<jar path="âŠ"/>
ãŸãã¯<apk path="âŠ"/>
ã¿ã°ãæå®ãããŠããå Žåã¯ãmerge="false"
ã®èšå®ã¯ç¡èŠãããŸãã
Autocopy å±æ§
merge="true"
ãæå®ãããŠããïŒãŸãã¯ãåºåã®çš®é¡ã <jar>
ã§ããïŒå Žåã¯ãautocopy
å±æ§ãæå®ããããšãã§ããŸãã
autocopy="true"
ãæå®ãããŠããå Žåãå
¥å jar ãã¡ã€ã«ããã³ãã£ã¬ã¯ããªå
ã®éã¯ã©ã¹ ãã¡ã€ã«ã¯ãèªåçã«åºåã«ã³ããŒãããŸãã
autocopy="false"
ãæå®ãããŠããå Žåãå
¥å jar ãã¡ã€ã«ããã³ãã£ã¬ã¯ããªå
ã®éã¯ã©ã¹ ãã¡ã€ã«ã¯ãåºåã«ã³ããŒãããŸããã
ãã®èšå®ã¯ã<dir>
åºåããã³ <jar>
åºåã«ã®ã¿é©çšãããŸãã
<output merge="true" autocopy="true">
<dir path="obfuscated"/>
</output>
<constpooltag>
ã¯ã©ã¹ ãã¡ã€ã«ãããŒã¯ããããã«ãããçšã®å®æ°ããŒã« ãšã³ããªãé ããç¶æ ã§è¿œå ããããšãã§ããŸãããã®æååã¯ãDashO ãåºåãããã¹ãŠã®ã¯ã©ã¹ã«é 眮ãããŸãããäžæçãŠãŒã¶ãŒã«å¯Ÿãå°å·ç©ã«ããŠå ¬è¡šãããããšã¯ãªããæããã«ãããŸãããã¯ã©ã¹ã®éã¢ã»ã³ãã« ããŒã«ã䜿çšãããã®ã ããããã®æååãèŠãããšãã§ããŸããvalue å±æ§ã«ã¯ãã¯ã©ã¹ã®åçããããã£ãå«ããããããã£åç §ãå«ããããšãã§ããŸãã
<output>
<constpooltag value="Copyright 1984 Yoyodyne Engineering, Inc."/>
</output>
ã¡ã¢ïŒ
å€ã¯ã«ã¹ã¿ã ã¯ã©ã¹å±æ§ãšããŠåç §ããããããäºçŽãããŠããå±æ§åãæå®ããããšã¯ã§ããŸããã
<sourcefile>
ãã®ã¿ã°ã§ã¯ãã¹ã¿ã㯠ãã¬ãŒã¹ã§äœ¿çšããã Java ã® SourceFile
å±æ§ã®å€ãèšå®ã§ããŸããvalue å±æ§ã«ã¯ãã¯ã©ã¹ã®åçããããã£ãå«ããããããã£åç
§ãå«ããããšãã§ããŸãã
<output>
<sourcefile value="${CLASS_SIMPLENAME}-v${ver}"/>
</output>
<removal> ã»ã¯ã·ã§ã³
<removal>
ãªãã·ã§ã³ã§ã¯ãã¯ã©ã¹ãã¡ãœãããããã³ãã£ãŒã«ãã®é€å»ããã¡ã¿ããŒã¿ã®é€å»ã«äœ¿çšãã粟床ã®ã¬ãã«ãæå®ã§ããŸããã¯ã©ã¹ãšã¡ã³ããŒã®é€å»ã«ã€ããŠã¯ãã¿ã°ã« 2 ã€ã®å±æ§ classes
ãš members
ããããŸãããããã®ãªãã·ã§ã³ã¯æ¬¡ã®ãšããã§ãã
none
â é€å»ããªãunused-non-public
â 䜿çšãããŠããªãé ç®ã§ããããªãã¯ã§ãªããã®ã ããé€å»ããunused
â 䜿çšãããŠããªããã¹ãŠã®é ç®ãé€å»ãã
å±æ§ã 2 ã€ãšãçç¥ãããŠãããã<removal>
ãæå®ãããŠããªãå Žåã«ã¯ãé€å»ã¯è¡ãããŸããã
æ¬åœã®ã¢ããªã±ãŒã·ã§ã³ïŒä»ã®ã¯ã©ã¹ãããµãã¯ã©ã¹ã«æå®ãããããåŒã³åºãããããããã®ã§ã¯ãªãïŒãããã±ãŒãžåããŠããå Žåã¯ãunused
ãªãã·ã§ã³ãæè¯ã®éžæã§ãã
䜿çšãããµãŒã ããŒãã£è£œã® API ã©ã€ãã©ãªã«ä»å±ãã䜿çšèš±è«Ÿå¥çŽæžã«åŸã£ãŠãã¢ããªã±ãŒã·ã§ã³ãå¿ èŠãšãããã¹ãŠã®ã¯ã©ã¹ã DashO ã«çµã¿èŸŒããããã«ããããšãæè¯ã®æ¹æ³ã§ãããã®ããã«ãçµæãšããŠçããåºåã¯ãã¢ããªã±ãŒã·ã§ã³ãå ·äœçã«ãããã©ã®ããã«äœ¿çšãããã«åãããã¢ããªã±ãŒã·ã§ã³ãå¿ èŠãšãããã¹ãŠã®ã¯ã©ã¹ãå«ã 1 ã€ã® jar ãã¡ã€ã«ãŸãã¯ãã£ã¬ã¯ããªã«ãªããŸãã
removal 㯠<excludelist>
èŠçŽ ããµããŒãããŠããŸãããã®èŠçŽ ã«ã¯ãé€å»ãããªãã¯ã©ã¹ãã¡ãœãããããã³ãã£ãŒã«ããéžæããèŠåãå«ããããšãã§ããŸãããã®èŠçŽ ã«ã€ããŠã¯ã<includelist> ããã³ <excludelist> èŠåã»ã¯ã·ã§ã³ã§èª¬æããŸãã
<removal classes="unused-non-public" members="unused"/>
<debug> ã»ã¯ã·ã§ã³
ãã®ã»ã¯ã·ã§ã³ã¯ãã³ã³ãã€ã©ã«ãã£ãŠã¯ã©ã¹ ãã¡ã€ã«ã«æ¿å
¥ããããããã°æ
å ±ãåé€ãããã DashO ã«æ瀺ããŸããtype
å±æ§ã¯ãåé€ããæ
å ±ã®çš®é¡ãæå®ããããã«äœ¿çšãããŸãã次ã®çš®é¡ãåé€ããããšãã§ããŸãã
SourceFile
â ã¯ã©ã¹ãã³ã³ãã€ã«ããããœãŒã¹ ãã¡ã€ã«ã®ååãSourceDir
â ã¯ã©ã¹ãã³ã³ãã€ã«ããããœãŒã¹ ãã¡ã€ã«ã®å ŽæãSourceDebugExtension
â æ¡åŒµãããã°æ å ±ãšããŠè§£éãããããŒã«ç¹æã®æååãLineNumberTable
â å ã®ãœãŒã¹ ãã¡ã€ã«å ã®ç¹å®ã®è¡çªå·ã«å²ãåœãŠããããã€ã ã³ãŒãããããã¬ãŒãšã¹ã¿ã㯠ãã¬ãŒã¹ã«ãã£ãŠäœ¿çšãããŸããLocalVariableTable
â ã¡ãœããã®å®è¡äžã«ããŒã«ã«å€æ°ã®ååãšåãå€æããããã«ããããã¬ãŒã«ãã£ãŠäœ¿çšãããŸããLocalVariableTypeTable
â ãžã§ããªãã¯ã䜿çšããããŒã«ã«å€æ°ã®çœ²åã
è€æ°ã®é ç®ã¯ã¹ããŒã¹ã§åºåãããŸãã
2 ã€ã®ç¹å¥ãªããŒã¯ãŒãããµããŒããããŸãã
All
â ãããã°æ å ±ã¯ãã¹ãŠåé€ãããŸããNone
â ãããã°æ å ±ã¯äœãåé€ãããŸããã
<debug>
ã»ã¯ã·ã§ã³ãååšããªãå Žåã¯ããã¹ãŠã®ãããã°æ
å ±ãä¿æãããŸããã»ã¯ã·ã§ã³ã¯ãã£ãŠã type å±æ§ãååšããªãå Žåã¯ããã¹ãŠã®ãããã°æ
å ±ãåé€ãããŸãã
<debug/>
<debug types="None" />
<debug types="SourceDir SourceDebugExtension" />
ã¡ã¢ïŒ
å¶åŸ¡ãããŒã®é£èªåã®å€æåŠçã§ã¯ãã»ã¯ã·ã§ã³ã§ããŒã«ã«å€æ°æ å ±ã®åé€ãèŠæ±ããŠããªãå Žåã§ãããããã®åé€ãå¿ èŠãšããŸãã
<attributes> ã»ã¯ã·ã§ã³
ã³ã³ãã€ã©ã¯ãã¯ã©ã¹ ãã¡ã€ã«å
ã®å±æ§ã«è¿œå ã®ã¡ã¿ããŒã¿ãæ ŒçŽããŸããDashO ã§ã¯ããããã®å±æ§ã®åŠåïŒãã£ã¹ããžã·ã§ã³ïŒãåå¥ã«æ±ºå®ããããšãã§ããŸããã¿ã°ã® type
å±æ§ã¯ãåé€ããå±æ§ã®çš®é¡ãæå®ããããã«äœ¿çšãããŸãã次ã®çš®é¡ãåé€ããããšãã§ããŸãã
Exceptions
â ã¡ãœãããã¹ããŒããããã§ãã¯ãããäŸå€ã瀺ããŸããSignature
â ãžã§ããªãã¯åããžã§ããªãã¯ãå«ãã¡ãœãã宣èšãããã³ãã©ã¡ãŒã¿ãŒåãããåã瀺ããŸããDeprecated
â ã¯ã©ã¹ãã€ã³ã¿ãŒãã§ã€ã¹ãã¡ãœããããŸãã¯ãã£ãŒã«ãã眮ãæããããŠããããšã瀺ããŸããSynthetic
â ãœãŒã¹ ã³ãŒãã«çŸããªãã¯ã©ã¹ ã¡ã³ããŒã瀺ããŸããEnclosingMethod
â ããŒã«ã« ã¯ã©ã¹ãŸãã¯å¿åã¯ã©ã¹ãå²ãæ¹æ³ã瀺ããŸããRuntimeVisibleAnnotations
â ã¯ã©ã¹ãã¡ãœããããŸãã¯ãã£ãŒã«ãã®ããªãã¬ã¯ã·ã§ã³ã§èŠãããšãã§ããã¢ãããŒã·ã§ã³ãä¿æããŸãïŒäŸïŒ@Deprecated
ã@FunctionalInterface
ãããã³@SafeVarargs
ïŒãRuntimeInvisibleAnnotations
â ã¯ã©ã¹ãã¡ãœããããŸãã¯ãã£ãŒã«ãã®ããªãã¬ã¯ã·ã§ã³ã§èŠãããšãã§ããªãã¢ãããŒã·ã§ã³ãä¿æããŸããRuntimeVisibleParameterAnnotations
â ã¡ãœããã«å¯Ÿãããã©ã¡ãŒã¿ãŒã®ããªãã¬ã¯ã·ã§ã³ã§èŠãããšãã§ããã¢ãããŒã·ã§ã³ãä¿æããŸããRuntimeInvisibleParameterAnnotations
â ã¡ãœããã«å¯Ÿãããã©ã¡ãŒã¿ãŒã®ããªãã¬ã¯ã·ã§ã³ã§èŠãããšãã§ããªãã¢ãããŒã·ã§ã³ãä¿æããŸããAnnotationDefault
â ã¢ãããŒã·ã§ã³èŠçŽ ã®æ¢å®å€ãInnerClasses
â å éšã¯ã©ã¹ãšå€éšã¯ã©ã¹éã®é¢ä¿ã瀺ããŸããUnknown
â ãã®ä»ãã¹ãŠã®å±æ§ã®çš®é¡ïŒMethodParameters
å±æ§ãå«ãïŒã
è€æ°ã®é ç®ã¯ã¹ããŒã¹ã§åºåãããŸãã
2 ã€ã®ç¹å¥ãªããŒã¯ãŒãããµããŒããããŸãã
All
â å±æ§ã¯ãã¹ãŠåé€ãããŸããNone
â å±æ§ã¯äœãåé€ãããŸããã
<attributes>
ã»ã¯ã·ã§ã³ãååšããªãå Žåã¯ããã¹ãŠã®å±æ§ãä¿æãããŸããã»ã¯ã·ã§ã³ã¯ãã£ãŠã type
å±æ§ãååšããªãå Žåã¯ã次ã®å±æ§ãåé€ãããŸãïŒDeprecated
ãSynthetic
ãRuntimeInvisibleAnnotations
ãããã³ RuntimeInvisibleParameterAnnotations
ã
<attributes/>
<attributes types="All" />
<attributes types="Deprecated Synthetic" />
ã¡ã¢ïŒ
TypeAnnotations å±æ§ã¯åžžã«åé€ãããŸããããã¯ããŒãã³ãŒããããŠããŠæ§æããããšãã§ããŸããã
<methodCallRemoval> ã»ã¯ã·ã§ã³
ãã°ãã³ã³ãœãŒã«åºåãªã©ã®ãããªãçµæã®åºåã«ååšããŠã»ãããªãã¡ãœããã®åŒã³åºãããããžã§ã¯ãã®å ¥åã«å«ãŸããŠããå Žåã¯ãDashO ã䜿çšããŠããããé€å»ããããšãã§ããŸããããã«ãããããšãã°ããã¹ãçã«ã¯ãã° ã¹ããŒãã¡ã³ããååšãããã補åçããã¯åã³ã³ãã€ã«ããªããŠããã° ã¹ããŒãã¡ã³ããé€å»ãããããã«ããããšãå¯èœã§ãã
<methodCallRemoval>
èŠçŽ ã®å±æ§ã¯ãããŸããããã¹ãŠã®æ§æã¯ã<method>
ãµãèŠçŽ ã«å«ãŸããŠããŸãã
<method> èŠçŽ
ãããã®èŠçŽ ã¯ãé€å»ããã¡ãœããã®åŒã³åºããå®çŸ©ããŸããåŒã³åºãã¯ãããããããžã§ã¯ãã®å ¥åå ããå®è¡ããããã©ããã«ãããããé€å»ãããŸããããã¯ãååã®å€æŽãæååã®æå·åãªã©ãã©ã®ã¡ãœãããã¯ã©ã¹ãå€æŽãããããæ瀺çã«å¶åŸ¡ã§ãããDashO ã®ä»ã®æ©èœãšã¯å¯Ÿç §çã§ãã
ãã®èŠçŽ ã®å±æ§ã¯ãã¯ã©ã¹åãã¡ãœããåãããã³çœ²åã«ãã£ãŠã¡ãœãããèå¥ããŸãããã®ããããªãŒããŒããŒããããã¡ãœããã®å Žåãåã¡ãœããã«å¯Ÿã㊠1 ã€ã®ãšã³ããªãäœæããå¿ èŠããããŸãã
className
â ãã® string å±æ§ã¯ãã¡ãœãããå«ãã§ããã¯ã©ã¹ã®ååãæå®ããŸããmethodName
â ãã® string å±æ§ã¯ãã¡ãœããã®ååãæå®ããŸããsignature
â ãã® string å±æ§ã¯ãã¡ãœããã®ãã©ã¡ãŒã¿ãŒäžèŠ§ãæå®ããŸãã
className å±æ§
className
æååå±æ§ã«ã¯ãã¡ãœãããå«ãã§ããã¯ã©ã¹ã®å®å
šä¿®é£Ÿåãå«ãŸããŠããŸãããã®ã¯ã©ã¹ã®ã¡ãœããã«å¯ŸããçŽæ¥ã®åŒã³åºãã®ã¿ãé€å»ãããŸãã
ã¡ãœããåŒã³åºãã®é€å»ã¯ãåŒã³åºããµã€ãã«èšé²ãããæ
å ±ïŒã¯ã©ã¹åãã¡ãœããåãããã³çœ²åïŒã«åºã¥ããŠè¡åããŸãããµãã¯ã©ã¹ã«ããåãã¡ãœããåã眲åã«å¯ŸããåŒã³åºãã¯é€å»ãããŸãããããã¯ããµãã¯ã©ã¹ãå®éã«ã¯ã¡ãœãããå®è£
ããŠããªããŠãåœãŠã¯ãŸããŸããç¶æ¿ãããã¡ãœããã®è§£æ±ºã¯ãå®è¡æã« JVM ã«ãã£ãŠè¡ãããŸãããããã£ãŠããã®æ©èœã¯ final
ãšããŒã¯ãããã¯ã©ã¹ã§æãå¹æçã§ãïŒfinal ã§ããå¿
èŠã¯ãããŸããïŒã
ã¡ã¢ïŒ
ã¡ãœããåŒã³åºãã®é€å»ã¯ãããã°ã©ã ã®åäœã«åœ±é¿ãäžããŸããåäœãžã®åœ±é¿ãåç §ããŠãã ããã
æ§ããŒãžã§ã³ã® DashO ã§ã¯ãããããã¯ã©ã¹ãšäžèŽãã**
ã®äœ¿çšããµããŒããããŠããŸããããã®æ©èœã¯å±éºã§ãã䜿çšããããšã¯çŸåšæšå¥šãããŠããããå°æ¥åé€ãããŸãã
methodName å±æ§
methodName
æååå±æ§ã«ã¯ãã¡ãœããã®ååãå«ãŸããŸããã³ã³ã¹ãã©ã¯ã¿ãŒ ã¡ãœãããŸãã¯ã¯ã©ã¹ã®åæåã¡ãœããã¯æå®ã§ããŸããã
signature å±æ§
signature
æååå±æ§ã«ã¯ãã¡ãœããã®ãã©ã¡ãŒã¿ãŒäžèŠ§ãå«ãŸããŸãããã©ã¡ãŒã¿ãŒã¯ã«ã³ãã§åºåããŸããããªããã£ãåã®ãã©ã¡ãŒã¿ãŒã¯ãint
ã char
ãªã©ã®ååã«ãã£ãŠæå®ãããŸããåç
§åã®ãã©ã¡ãŒã¿ãŒã¯ãå®å
šä¿®é£Ÿåã䜿ã£ãŠæå®ããå¿
èŠããããŸããããšãã°ãjava.lang.String
ã path.to.some.CustomClass
ã®ããã«æå®ããŸããé
åãã©ã¡ãŒã¿ãŒã¯ãååã®åŸã«æ¬¡å
ãè¡šã []
ã 1 次å
ã«ã€ã 1 ã€è¿œå ããããšã«ããæå®ãããŸãã倧æåãšå°æåãã¹ãã«ã¯æ£ç¢ºã§ããå¿
èŠããããŸããdouble
ã doubel
ãšééã£ãŠå
¥åãããšããã®ãã©ã¡ãŒã¿ãŒã¯ããªããã£ãã® double
åã§ã¯ãªããæ¢å®ã®åå空éã® doubel
ãšããååã®ãªããžã§ã¯ãåç
§ãšããŠæ±ãããŠããŸããŸãã
signature
æååå±æ§ã«ã¯ãæ»ãå€ã®åã¯å«ãŸããŸããããã®ãããæ»ãå€ã®åã«é¢ä¿ãªããäžèŽãé©çšãããŸãã
<methodCallRemoval>
<method className="com.example.methodCallRemoval.SubSubClassOne"
methodName="method2" signature="java.lang.String, int, double, float[][]"/>
<method className="com.example.logging.SSNLogger"
methodName="logAndReturnNumberOfBytesWritten" signature="com.example.pii.SSN"/>
</methodCallRemoval>
Android ãã°ã®é€å»
æ©å¯æ§ã®é«ãæ å ±ãæå³ããããŠãã°ã«èšé²ãããããšãé²ãããã«ãAndroid ã®ãã°åŒã³åºããé€å»ããããšãã§ããŸããããã¯ããããžã§ã¯ãå ¥åã®ãã¹ãŠã«é©çšãããŸããããã«ããããµããŒã ã©ã€ãã©ãªã Android ã©ã³ã¿ã€ã èªäœã«ããæ å ±é瀺ã®ãªã¹ã¯ã軜æžããããšã¯ã§ããŸããã
Android ã®ãã°åŒã³åºããé€å»ããã«ã¯ããããžã§ã¯ã ãã¡ã€ã«ã® <dasho>
ã®äžã«ãã <methodCallRemoval/>
ã®ä»£ããã«ã次㮠XML ãã©ã°ã¡ã³ããè¿œå ããŸãã
<methodCallRemoval>
<method className="android.util.Log" methodName="v"
signature="java.lang.String, java.lang.String"/>
<method className="android.util.Log" methodName="v"
signature="java.lang.String, java.lang.String, java.lang.Throwable"/>
<method className="android.util.Log" methodName="i"
signature="java.lang.String, java.lang.String"/>
<method className="android.util.Log" methodName="i"
signature="java.lang.String, java.lang.String, java.lang.Throwable"/>
<method className="android.util.Log" methodName="d"
signature="java.lang.String, java.lang.String"/>
<method className="android.util.Log" methodName="d"
signature="java.lang.String, java.lang.String, java.lang.Throwable"/>
<method className="android.util.Log" methodName="w"
signature="java.lang.String, java.lang.String"/>
<method className="android.util.Log" methodName="w"
signature="java.lang.String, java.lang.Throwable"/>
<method className="android.util.Log" methodName="w"
signature="java.lang.String, java.lang.String, java.lang.Throwable"/>
<method className="android.util.Log" methodName="e"
signature="java.lang.String, java.lang.String"/>
<method className="android.util.Log" methodName="e"
signature="java.lang.String, java.lang.String, java.lang.Throwable"/>
<method className="android.util.Log" methodName="wtf"
signature="java.lang.String, java.lang.String"/>
<method className="android.util.Log" methodName="wtf"
signature="java.lang.String, java.lang.Throwable"/>
<method className="android.util.Log" methodName="wtf"
signature="java.lang.String, java.lang.String, java.lang.Throwable"/>
<method className="android.util.Log" methodName="println"
signature="int, java.lang.String, java.lang.String"/>
</methodCallRemoval>
<renaming> ã»ã¯ã·ã§ã³
DashO ã¯ãã¯ã©ã¹ãã¡ãœãããããã³ãã£ãŒã«ãã®ååãçãæå³ã®ãªãååã«å€æŽããããšãã§ããŸããããã¯ãã¯ã©ã¹ã®ãµã€ãºã®çž®å°ã«ãšã£ãŠããŸãé£èªåææ³ãšããŠéèŠã§ããåŸè¿°ã®ã»ã¯ã·ã§ã³ã䜿çšãããšãååã®å€æŽå¯Ÿè±¡ããç¹å®ã®ã¯ã©ã¹ãã¡ã³ããŒãé€å€ããããšãã§ããŸãã
ã¡ã¢ïŒ
DashO ã®ååã®å€æŽã¢ã«ãŽãªãºã ãšãã®åœ±é¿ã«ã€ããŠã¯ãé«åºŠãªãããã¯ãåç §ããŠãã ããã
次ã®ã¿ã°ã¯ãoption å±æ§ãšã¢ãããŒã·ã§ã³ã®ååã®å€æŽã䜿çšããŠãååã®å€æŽã®ã°ããŒãã«å¶åŸ¡ãå¯èœã«ããŠããŸããæå¹ãªå€ã¯ on
ãš off
ã§ãã
<renaming option="on" renameAnnotations="on"/>
<class-options> ã»ã¯ã·ã§ã³
ãã®ã¿ã°ã®å±æ§ã¯ãã¯ã©ã¹ã®ååã®å€æŽãå¶åŸ¡ããŸãã
rename
â ãã® boolean ãªãã·ã§ã³ã¯ãã¯ã©ã¹ã®ååã®å€æŽããªã³ãŸãã¯ãªãã«ããŸããfalse
ã®å Žåã¯ãã¯ã©ã¹ã¯å ã®ååãä¿æããŸããkeeppackages
â ãã® boolean ãªãã·ã§ã³ã¯ãå ã®ããã±ãŒãžã®ååãšéå±€ãä¿æãããŸãŸãã¯ã©ã¹èªäœã®ååãå€æŽã§ããããã«ããŸããalphabet
â æ°ããã¯ã©ã¹åãäœæããããã«äœ¿çšãããæåãå®çŸ©ããæååãminlength
â æ°ããã¯ã©ã¹åã®æå°ã®é·ããrandomize
â ã¯ã©ã¹ã®æ°ããååã¯ãé 次çãŸãã¯ã©ã³ãã ã«å²ãåœãŠãããšãã§ããŸãããã®ãªãã·ã§ã³ãtrue
ã®å Žåãèå¥åã¯ã©ã³ãã ã«å²ãåœãŠãããŸããprefix
â ãã®å±æ§ã¯ãååãå€æŽããããã¹ãŠã®ã¯ã©ã¹ã«ä»å ããããã¬ãã£ãã¯ã¹ãæå®ããŸãããã¬ãã£ãã¯ã¹ã«ããªãªããå«ãããšãã¯ã©ã¹ã¯å¹æçã«æ°ããããã±ãŒãžã«é 眮ãããŸãã
prefix å±æ§
ãã¬ãã£ãã¯ã¹ã¯ãååãå€æŽããããã¹ãŠã®ã¯ã©ã¹ã«ä»å ãããŸããããªãªããå«ã prefix
ãå®çŸ©ããããšã«ãããååãå€æŽãããã¯ã©ã¹ãã«ã¹ã¿ã ããã±ãŒãžã«å
¥ããããšãã§ããŸãã
<renaming option="on"/>
<class-options prefix="pkg.X_"/>
</renaming>
次ã®è¡šã¯ããã¬ãã£ãã¯ã¹ã䜿ã£ãååã®å€æŽã®å¯èœæ§ã瀺ããŠããŸãã
ãã¬ãã£ãã¯ã¹ | å€æŽåŸã®åå |
---|---|
C |
Ca |
pkg. |
pkg.a |
pkg.X_ |
pkg.X_a |
keeppackage å±æ§
ãã®ãªãã·ã§ã³ã true
ã®å Žåãã¯ã©ã¹ã®ååã¯å€æŽãããŸããããã®ååã®ããã±ãŒãžã®éšåã¯å€æŽãããŸããã
<renaming option="on"/>
<class-options keeppackages="true"/>
</renaming>
以äžã«ããã®ãããªååã®å€æŽã®äŸã瀺ããŸãã
å ã®åå | å€æŽåŸã®åå |
---|---|
yoyodyne.application.Main |
yoyodyne.application.a |
yoyodyne.application.LoadData |
yoyodyne.application.b |
yoyodyne.tools.BinaryTree |
yoyodyne.tools.c |
yoyodyne.tools.LinkedList |
yoyodyne.tools.d |
prefix
ãšäœµããŠäœ¿çšããå Žåãå
ã®ããã±ãŒãžåã¯ãprefix
ã«ãã£ãŠå ããããéšåããåã«çŸããŸãã
<renaming option="on"/>
<class-options keeppackages="true" prefix="x_"/>
</renaming>
ããã¯æ¬¡ã®ãããªçµæã«ãªããŸãã
å ã®åå | å€æŽåŸã®åå |
---|---|
yoyodyne.application.Main |
yoyodyne.application.x_a |
yoyodyne.application.LoadData |
yoyodyne.application.x_b |
yoyodyne.tools.BinaryTree |
yoyodyne.tools.sub.x_c |
yoyodyne.tools.LinkedList |
yoyodyne.tools.sub.x_d |
alphabet å±æ§
çç¥å¯èœãª alphabet
å±æ§ã§ã¯ãæ°ããã¯ã©ã¹åãäœæããããã«äœ¿çšãããæåãå®çŸ©ããŸããçç¥ãããšãæ¢å®ã®æåéåã䜿çšãããŸããæåéåãå®çŸ©ããéã¯ã次ã®å¶éãé©çšãããŸãã
æåéåã®æå°ã®é·ã㯠2 æåã§ãã倧ããªãããžã§ã¯ãã«å¯ŸããŠã¯ã3 æå以äžãæšå¥šãããŸãã
æåéåã®åãã®æåã¯ãJava èå¥åã®éå§æåãšããŠæå¹ã§ãªããã°ãªããŸãããå°ãªããšã 1 ã€ã¯éå§æåãããå¿ èŠããããŸãã
æåéåã®æ®ãã®æåã¯ãJava èå¥åã§æå¹ãªæåã§ãªããã°ãªããŸããã
<member-options> ã»ã¯ã·ã§ã³
ãã®ã»ã¯ã·ã§ã³ã¯ãã¡ãœãããšãã£ãŒã«ãã®ååã®å€æŽãå¶åŸ¡ããŸãã
keeppublics
âtrue
ã«èšå®ãããšããã¹ãŠã®ãããªã㯠ã¡ãœããããã³ãã£ãŒã«ãã¯ãå ã®ååãä¿æããŸãã <entrypoints> ã»ã¯ã·ã§ã³ã®library
ãªãã·ã§ã³ã§ã¯ããã¹ãŠã®ãããªã㯠ã¡ãœããããæ¬è³ªçã«å ã®ååãä¿æãããšã³ã㪠ãã€ã³ããšããŠæ±ããŸãã ãã®ãªãã·ã§ã³ãæå®ãããšåé·ã«ãªããŸããalphabet
â æ°ããã¡ã³ããŒåãäœæããããã«äœ¿çšãããæåãå®çŸ©ããæååã䜿ãæ¹ã¯ã<class-options>
ã¿ã°ã® alphabet å±æ§ã®å Žåãšåãã§ããminlength
â æ°ããã¡ã³ããŒåã®æå°ã®é·ããrandomize
â ã¡ã³ããŒã®æ°ããååã¯ãé 次çãŸãã¯ã©ã³ãã ã«å²ãåœãŠãããšãã§ããŸãããã®ãªãã·ã§ã³ãtrue
ã®å Žåãèå¥åã¯ã©ã³ãã ã«å²ãåœãŠãããŸãã
<renaming> ã®å¯Ÿè±¡é€å€ãªã¹ã
ãã®ã»ã¯ã·ã§ã³ã¯ãå ¥åã¯ã©ã¹ ãã¡ã€ã«ã®ååå€æŽãåçã«åŸ®èª¿æŽããæ¹æ³ãæäŸããŸãããã®ã»ã¯ã·ã§ã³ã«ã¯ãå®è¡æã«é©çšããã "察象é€å€èŠå" ã®ãªã¹ããå«ããããšãã§ããŸããèŠåã§ç¹å®ã®ã¯ã©ã¹ãã¡ãœããããŸãã¯ãã£ãŒã«ããéžæããå Žåããã®é ç®ã®ååã¯å€æŽãããŸããã
ã¡ã¢ïŒ
ãããã®èŠåã¯ããšã³ã㪠ãã€ã³ãã«ãã£ãŠå®çŸ©ãããååã®å€æŽã®å¶éãšäœµããŠé©çšãããŸãã
åèŠåã¯è«ççã« OR
ã§çµåãããŸããã€ãŸãã1 ã€ã§ãèŠåã«ãããããé
ç®ã®ååã¯å€æŽãããŸããã<excludelist>
ã¯ãã¯ã©ã¹ãã¡ãœãããããã³ãã£ãŒã«ãã«ããååã®é€å€ããµããŒãããŠããŸãã
<renaming option="on">
<excludelist>
<classes name="samples.SimpleApp" excludeclass="true"/>
</excludelist>
</renaming>
<mapreport> ã»ã¯ã·ã§ã³
DashO ã¯ãå®è¡ãããã¹ãŠã®ååã®å€æŽã®ã¬ããŒãã ãã§ãªããååãå€æŽãããçµæã«é¢ããçµ±èšæ
å ±ãçæããããšãã§ããŸããããã¯ãå
¥ãåã«ãªã£ã <mapreport>
ã¿ã°ã䜿çšããŠäœæãããŸãã
<renaming option="on">
<mapping>
<mapreport path="c:\workproject-mapreport.txt"/>
</mapping>
</renaming>
ã¡ã¢ïŒ
path
å±æ§ã¯ããããã£ããµããŒãããŸãã
ãªã¹ãã®äŸã¯æ¬¡ã®ãšããã§ãã
one.A (b) ======================================================================== a pub1(int) b def1(int) c pub2(int) two.B (c) ======================================================================== a pub1(int) b pub2(int) c def1(int)
ã¯ã©ã¹ãšã¡ãœããã®æ°ããååã瀺ãããŠããŸããååãå€æŽããåŸã¯ããã°ã®è¿œè·¡ãå°é£ã«ãªããŸããç¹ã«ãã¡ãœããã®ãªãŒããŒããŒããéåžžã«é«ã確çã§çºçããã®ã§ãå²ãåœãŠãã¡ã€ã«ãäžå¯æ¬ ã«ãªããŸãããŸããå²ãåœãŠãã¡ã€ã«ã¯ããªãŒããŒããŒãèªå°ã®çµæã«é¢ããçµ±èšãæäŸããŸãã
Number of Methods : 7095 Renamed to a : 2031 (28.6%) Renamed to b : 786 (11.0%) Renamed to c : 484 (6.8%) Renamed to d : 327 (4.6%) Renamed to e : 230 (3.2%) Renamed to f : 169 (2.4%) Renamed to g : 131 (1.8%) Renamed to h : 120 (1.7%) Renamed to i : 106 (1.5%)
ãããã®çµ±èšã¯ãããããäžããããååã«å€æŽãããã¡ãœããã®ç·æ°ãè¡šããŠããŸãã
<mapoutput> ã»ã¯ã·ã§ã³
<mapoutput>
ãã¡ã€ã« ãªãã·ã§ã³ãæå®ããããšã§ãDashO ã®ååã®å€æŽæ©èœã«å¯Ÿããååã®å€æŽãã©ã®ããã«è¡ããããã远跡èšé²ããããæ瀺ã§ããŸãããã®çµæããŠãŒã¶ãŒã¯ååã®å€æŽç¶æ³ãããã«èª¿æ»ã§ããã»ããä»åŸ DashO ãå®è¡ããéã«å
¥åãšããŠäœ¿çšããããšãã§ããŸãããã®ãªãã·ã§ã³ã§äœæããããã¡ã€ã«ã¯ãå¢åé£èªåãé£èªåãããã¹ã¿ã㯠ãã¬ãŒã¹ã®ãã³ãŒããå®è¡ããéã®ãå
¥åå²ãåœãŠãã¡ã€ã«ãšããŠäœ¿çšãããŸãã
ãã®ãã¡ã€ã«ãäžæ³šæã§å€±ã£ãŠããŸããšãå°æ¥ã®ã¢ããªã±ãŒã·ã§ã³ã®å¢åæŽæ°ã®æ©äŒã倱ãå¯èœæ§ããããŸãããã®ããããã®ãã¡ã€ã«ãé©åã«ããã¯ã¢ããããŠããããšãéåžžã«éèŠã«ãªããŸãããã®ãããªçç±ãããDashO ã¯æ¢åã®ãã¡ã€ã«ãæ€åºãããå Žåã«ã¯ãèªåçã«ãã®ãã¡ã€ã«ãäžæžãããªãããã«ãªã£ãŠããŸãã
çç¥å¯èœãª proguardMap
å±æ§ã«ãProGuard äºæã®å²ãåœãŠãã¡ã€ã«ãåºåããå Žæãæ ŒçŽãããŸãã
å±æ§ overwrite="true"
ã¯ãæ¢åãã¡ã€ã«ã®äžæžããå¯èœã«ãããã DashO ã«æ瀺ããŸãã
ã¡ã¢ïŒ
overwrite
å±æ§ã¯çç¥å¯èœã§ãçç¥ãããšãæ¢å®å€ã®false
ã«ãªããŸãã
<renaming option="on">
<mapping>
<mapoutput path="c:\work\project.map"
proguardMap="c:\work\mapping.txt" overwrite="true"/>
</mapping>
</renaming>
<mapinput> ã»ã¯ã·ã§ã³
<mapinput>
ãªãã·ã§ã³ã§äœæããããã¡ã€ã«ã¯ãå¢åå
¥åãã¡ã€ã« ãªãã·ã§ã³ã§äœ¿çšããããšãã§ããŸãã
<renaming option="on">
<mapping>
<mapinput path="c:\work\project.map"/>
</mapping>
</renaming>
Suffix å±æ§
mapinput
ã«ã¯ãå¢åé£èªåå
šäœã«ããã£ãŠå€æŽã远跡ããããã«çŽã¡ã«å©çšã§ãããä»»æã® suffix ãªãã·ã§ã³ããããŸãïŒã€ãŸããsuffix ã«ã¯ãæ¥ä»ãäœãã»ãã®èå¥æååãæå®ã§ããŸãïŒã
<renaming option="on">
<mapping>
<mapinput suffix="new">
<file path="c:\work\project.map"/>
</mapinput>
</mapping>
</renaming>
<optimization> ã»ã¯ã·ã§ã³
<optimization>
ã»ã¯ã·ã§ã³ã§ã¯ãé
ç®ã察象ãšããŠéžæãããã察象ããé€å€ãããããããã®è©³çŽ°ãªèŠåãªã©ããã€ã ã³ãŒãã®æé©åã«åºæã®ãªãã·ã§ã³ãæå®ã§ããŸããoption
å±æ§ã off
ã«èšå®ãããŠããå Žåã¯ãã»ã¯ã·ã§ã³ã®æ®ãã®éšåã®å
容ã«é¢ä¿ãªããDashO ã¯æé©åããŸã£ããè¡ããŸããã
<optimization option="on"/>
æé©åãè¡ãå Žæã埮調æŽããããã«ã
<optimization option="on">
<includelist>
<classes name="samples.**"/>
</includelist>
<excludelist>
<classes name="samples.SimpleApp"/>
</excludelist>
</optimization>
<controlflow> ã»ã¯ã·ã§ã³
<controlflow>
ã»ã¯ã·ã§ã³ã§ã¯ããŠãŒã¶ãŒã¯é
ç®ã察象ãšããŠéžæãããã察象ããé€å€ãããããããã®è©³çŽ°ãªèŠåãªã©ãå¶åŸ¡ãããŒã®é£èªåã«åºæã®ãªãã·ã§ã³ãæå®ã§ããŸãã
option
å±æ§ã off
ã«èšå®ãããŠããå Žåã¯ãã»ã¯ã·ã§ã³ã®æ®ãã®éšåã®å
容ã«é¢ä¿ãªããDashO ã¯å¶åŸ¡ãããŒã®é£èªåããŸã£ããè¡ããŸããã
tryCatch
å±æ§ã on
ã«èšå®ãããŠããå Žåã¯ãéã³ã³ãã€ã©ãããã«æ··ä¹±ãããããã«è¿œå ã®äŸå€ãã³ãã©ãŒãã³ãŒãã«è¿œå ãããŸãã
catchHandlers
å±æ§ã¯ãã¡ãœããã«è¿œå ããäŸå€ãã³ãã©ãŒã®æ倧æ°ã決å®ããŸãã
tryCatch
ã®æ¢å®å€ã¯ on
ãcatchHandlers
ã®æ¢å®å€ã¯ 1
ã§ãã
blockSplitting
å±æ§ã on
ã«èšå®ãããŠããå Žåã¯ãéã³ã³ãã€ã©ãããã«æ··ä¹±ãããããã«ãããã¯ãåå²ãããå¶åŸ¡ãããŒãè¿œå ãããŸãã
blockSplittingBlockSize
å±æ§ã§ã¯ãæ°ããåãããã¯ã«æäœéãªããã°ãªããªãåœä»€ã®æ°ãèšå®ããããšãã§ããŸãã
䜿çšå¯èœãª blockSplittingBlockSize
ã®æå°å€ã¯ 1
ã§ãã
blockSplitting
ã®æ¢å®å€ã¯ on
ãblockSplittingBlockSize
ã®æ¢å®å€ã¯ 3
ã§ãã
jumbling
å±æ§ã on
ã«èšå®ãããŠããå Žåããããã¯ã®é åºã¯ã©ã³ãã ãªç¶æ
ã«ãªããŸãã
ããã¯ãå®è¡æã«ãããã¯ãåŠçãããé åºã«ã¯åœ±é¿ããŸããã
jumbling
ã®æ¢å®å€ã¯ on
ã§ãã
<controlflow option="on" tryCatch="on" catchHandlers="1" blockSplitting="on" blockSplittingBlockSize="3" jumbling="on" />
å¶åŸ¡ãããŒã®é£èªåã¯ãã³ãŒãã匷åã«ä¿è·ããŸãããåæã«ãã©ã³ã¿ã€ã ã®ããã©ãŒãã³ã¹ãšã³ãŒã ãµã€ãºã«å€å€§ãªåœ±é¿ãåãŒãããšããããŸãã
å¶åŸ¡ãããŒã®é£èªåãè¡ãå Žæã埮調æŽããããã«ã<controlflow>
ã¿ã°ã« <includelist>
ãš <excludelist>
ã®äž¡æ¹ãå«ããŠãã¯ã©ã¹ãšã¡ãœãããéžæããèŠåãå«ãããšãã§ããŸãã
ãããã«ã€ããŠã¯ã<includelist> ããã³ <excludelist> èŠåã»ã¯ã·ã§ã³ã§èª¬æããŸãã
<controlflow option="on">
<excludelist>
<classes name="SimpleApp"/>
</excludelist>
</controlflow>
<stringencrypt> ã»ã¯ã·ã§ã³
<stringencrypt>
ã»ã¯ã·ã§ã³ã§ã¯ããŠãŒã¶ãŒã¯é
ç®ã察象ãšããŠéžæãããã察象ããé€å€ãããããããã®è©³çŽ°ãªèŠåãªã©ãæååã®æå·åã«åºæã®ãªãã·ã§ã³ãæå®ã§ããŸããoption
å±æ§ã off
ã«èšå®ãããŠããå Žåã¯ãã»ã¯ã·ã§ã³ã®æ®ãã®éšåã®å
容ã«é¢ä¿ãªããDashO ã¯æååã®æå·åããŸã£ããè¡ããŸããã
<stringencrypt option="on"/>
æååã®æå·åã¯ãåçŽãªæååæ€çŽ¢ã«ãã£ãŠããã°ã©ã ã®éèŠãªéšåãèŠã€ããããšããã£ãšå°é£ã«ããããšã§ãã³ãŒãã®èª¿æ»ã劚害ããŸããããããå®è¡æã«æååã埩å·ããããšã¯ãããã©ãŒãã³ã¹ã«ããããè² è·ããããŸããæååãæå·åãããå Žæã埮調æŽããããã«ã<stringencrypt>
ã¿ã°ã« <includelist>
ãš <excludelist>
ã®äž¡æ¹ãå«ããŠãã¯ã©ã¹ãšã¡ãœãããéžæããèŠåãå«ãããšãã§ããŸãããããã«ã€ããŠã¯ã<includelist> ããã³ <excludelist> èŠåã»ã¯ã·ã§ã³ã§èª¬æããŸãããã®ã»ã¯ã·ã§ã³ã«ã¯ã<seInput>
ããã³ <seOutput>
ãå«ãããšãã§ããŸãããããã«ã€ããŠã¯ã<seInput> ããã³ <seOutput> ã»ã¯ã·ã§ã³ã§èª¬æããŸãã
<stringencrypt option="on">
<includelist>
<classes name="com.yoyodyne.**"/>
</includelist>
<excludelist>
<classes name="com.yoyodyne.ui.**"/>
</excludelist>
</stringencrypt>
level å±æ§ãš implementations å±æ§
level
ããã³ implementations
å±æ§ã䜿çšãããšãæååã®æå·åããã»ã¹ã®è€éããé«ããããšãã§ããŸããlevel
ã®å€ã¯ãåçŽã ããã©é«éãªåŸ©å·ãçšãã 1
ãããã¢ããªã±ãŒã·ã§ã³ã®äžéšã®é床ãèœãšãå¯èœæ§ãããè€éãªå®è£
ã® 10
ãŸã§ã§ããlevel
ã®æ¢å®å€ã¯ 2
ã§ããå€ãå¢ããã«åŸã£ãŠãæååå€ã®éã³ã³ãã€ã«ããªããŒã¹ ãšã³ãžãã¢ãªã³ã°ã®è€éããé«ããããã«ãå
¥ã亀ãã£ãè¡šçŸæ³ãçšããããŸãããŸãããã倧ããªå€ã«ãããšã埩å·ã¡ãœããã®å®è£
ã«ã©ã³ãã 床ãå°å
¥ãããŠããã€ã ã³ãŒã ãã¿ãŒã³ã«ãã£ãŠæååå€ãèŠã€ããããšãããã«å°é£ã«ãªããŸãã
implementations
å±æ§ã¯ãäžæã®åŸ©å·ã¡ãœãããããã€çæããŠãå
¥åå
ã®ã¯ã©ã¹ã«è¿œå ãããã決å®ããŸããã¡ãœããã®ååãšçœ²åã¯ã©ã³ãã ã«éžæãããŸãã埩å·ã¡ãœããã¯ãã¢ããªã±ãŒã·ã§ã³ ãµã€ãºã®å¢å ãæå°éã«æããããã«ãæãçãååãä»ããããã¯ã©ã¹ã«çœ®ãããŸããååã®é·ããåãã¯ã©ã¹ã«ã€ããŠã¯ãããå€ãã®ã¡ãœãããå«ãã§ããããããè€éããåããã¯ã©ã¹ãæåã«éžæãããŸããæ倧 10 åãŸã§å®è£
ãè¿œå ã§ããŸããimplementations
ã®æ¢å®å€ã¯ 2
ã§ãã
<stringencrypt option="on" level="3" implementations="4">
<decrypter> ã»ã¯ã·ã§ã³
<decrypter>
ã»ã¯ã·ã§ã³ã§ã¯ãå®è¡æã«æååã埩å·ããããã«äœ¿çšãããã¡ãœããã DashO ãã©ãã«çœ®ãããå¶åŸ¡ã§ããŸãããã®ã¿ã°ã¯ã<includelist> ããã³ <excludelist> èŠå ã§äœ¿çšããã <classes>
ã¿ã°ã«äŒŒãŠããŸãã
ãã®ã»ã¯ã·ã§ã³ã§éžæãããã¯ã©ã¹ã¯ãçæãããéçãªå¿åå éšã¯ã©ã¹ã®å€éšã¯ã©ã¹ãšããŠäœ¿çšããã埩å·ã¡ãœãããæ ŒçŽãããŸãã
<decrypter>
èŠçŽ ã«ã¯ãå€éšã¯ã©ã¹ãéžæãã 4 ã€ã®å±æ§ããããŸãã
name
â ã¯ã©ã¹ã®ååãããã¯ãã¯ã©ã¹ã®ååãè€æ°ã®ã¯ã©ã¹ãéžæãããã¿ãŒã³ããŸãã¯æ£èŠè¡šçŸãæå®ã§ããŸããregex
â name å±æ§ã®è§£éã決å®ããŸããtrue ã®å Žåãname ã¯æ£èŠè¡šçŸã§ããmodifiers
â ã¯ã©ã¹ãéžæããããã«äœ¿çšããã修食åã詳现ã«ã€ããŠã¯ãModifiers å±æ§ãåç §ããŠãã ãããexcludedPackages
â decrypter ã¯ã©ã¹ã«çœ®ãããšããé€å€ãããããã±ãŒãžã®ã«ã³ãåºåãã®äžèŠ§ãæ¢å®ã®ã«ãŒã ããã±ãŒãžã®ååã¯ãjavaãjavaxãããã³ android ã§ãã
<decrypter>
ã»ã¯ã·ã§ã³ãçç¥ãããšãDashO ã¯èªåçã«å Žæã決å®ããŸãã
<decrypter modifiers="static class" name="com.yoyodyne.**"/>
<seInput> ã»ã¯ã·ã§ã³
<seInput>
ã»ã¯ã·ã§ã³ã¯ãååã®å®è¡ã«ãããæååã® decrypter ãèšè¿°ãããŠãããã¡ã€ã«ãä¿æããŸããããã¯ãå¢åé£èªåæã«äœ¿çšãããŸãã
<seInput path="c:\example_project\prev_project-se.map" />
<seOutput> ã»ã¯ã·ã§ã³
<seOutput>
ã»ã¯ã·ã§ã³ã¯ãçŸåšã®å®è¡ã«ãããæååã® decrypter ã«é¢ããæ
å ±ãæ ŒçŽããããã®ãã¡ã€ã«ãä¿æããŸãããã®ãã¡ã€ã«ãååšããå Žåã¯ãäžæžããããŸãã
<seOutput path="c:\example_project\project-se.map" />
<customEncryption> ã»ã¯ã·ã§ã³
<customEncryption>
ã»ã¯ã·ã§ã³ã¯ãã«ã¹ã¿ã ã®æå·åã¡ãœããããã³åŸ©å·ã¡ãœããã®äœ¿çšã«é¢ããæ
å ±ãä¿æããŸãã
useCustomEncryption
â ã«ã¹ã¿ã æå·åã䜿çšããå¿ èŠããããã©ãããèšå®ããŸãïŒtrue/falseïŒãencryptionJar
â ã«ã¹ã¿ã æå·åã®ã¯ã©ã¹ããã³ã¡ãœãããå«ãã§ãã jar ãã¡ã€ã«ãžã®ãã¹ãencryptionClass
â ã«ã¹ã¿ã æå·åã¡ãœãããå®è£ ããã¯ã©ã¹ã®å®å šãªååãencryptionMethod
â æååãæå·åããããã«äœ¿çšãããã¡ãœããã®ååãdecryptionClass
â ã«ã¹ã¿ã 埩å·ã¡ãœãããå®è£ ããã¯ã©ã¹ã®å®å šãªååãdecryptionMethod
â æååã埩å·ããããã«äœ¿çšãããã¡ãœããã®ååã
ãŸããã«ã¹ã¿ã æå·åã®äœ¿çšå¯Ÿè±¡ãšãªãã¯ã©ã¹ããã³ã¡ãœãããéžæããããã®èŠåãå«ãã§ããã<includelist>
ãå«ããå¿
èŠããããŸãããããã«ã€ããŠã¯ã<includelist> ããã³ <excludelist> èŠåã»ã¯ã·ã§ã³ã§èª¬æããŸããããã§çæãã¹ãç¹ã¯ããã® <includelist>
ã¯ãæååã®æå·åã®ããã«éžæãããå
šã¯ã©ã¹/ã¡ãœããã®ãµãã»ããã§ããå¿
èŠããããšããããšã§ãã
ã«ã¹ã¿ã æå·åã«é¢ãã詳现ã«ã€ããŠã¯ãã«ã¹ã¿ã æå·åã®äœ¿çšã»ã¯ã·ã§ã³ãåç §ããŠãã ããã
<customEncryption useCustomEncryption="true" encryptionJar="custEncryption.jar"
encryptionClass="com.example.myCustomEncryption.Encrypt" encryptionMethod="myEncrypter" decryptionClass="com.example.myProject.Decrypt" decryptionMethod="myDecrypter" >
<includelist>
<classes name="com.example.mySpecialClasses.**"/>
</includelist>
</customEncryption>
<make-synthetic> ã»ã¯ã·ã§ã³
<make-synthetic>
ã»ã¯ã·ã§ã³ã¯ãMake Syntheticé£èªåãªãã·ã§ã³ãå¶åŸ¡ããŸãããã®ãªãã·ã§ã³ã¯ãã¡ãœãããšãã£ãŒã«ãããJava ã³ã³ãã€ã©ã«ãã£ãŠçæãããåæãšããŠããŒã¯ããŸããããã¯ãäžéšã®éã³ã³ãã€ã©ãæ··ä¹±ãããŸããã¿ã°ã«ã¯ 1 ã€ã®å±æ§ãšå€ãå«ãŸããvalue
ã«ã¯æå®ã§ããèšå®ã 4 ã€ãããŸãã
none
â ã¡ãœããããã£ãŒã«ãã圱é¿ãåããŸãããããã¯ãã»ã¯ã·ã§ã³å šäœãçç¥ããã®ãšåãã§ããprivate
â private ãŸã㯠package-private ã®ã¡ãœãããšãã£ãŒã«ãã¯åæãšãããŸããnon-public
â privateãpackage-privateããŸã㯠protected ã®ã¡ãœãããšãã£ãŒã«ãã¯åæãšãããŸããall
â ãã¹ãŠã®ã¡ãœãããšãã£ãŒã«ããåæãšãããŸããvalue å±æ§ãçç¥ãããå Žåã¯ããããæ¢å®å€ãšãªããŸãã
MakeSynthetic 㯠<excludelist>
èŠçŽ ããµããŒãããŠããŸãããã®èŠçŽ ã«ã¯ãåæãšããŠããŒã¯ãããªãã¯ã©ã¹ãã¡ãœãããããã³ãã£ãŒã«ããéžæããèŠåãå«ããããšãã§ããŸãããã®èŠçŽ ã«ã€ããŠã¯ã<includelist> ããã³ <excludelist> èŠåã»ã¯ã·ã§ã³ã§èª¬æããŸãã
<make-synthetic value="non-public"/>
<premark> ã»ã¯ã·ã§ã³
<premark>
ã»ã¯ã·ã§ã³ã§ã¯ããœãããŠã§ã¢ã®ãŠã©ãŒã¿ãŒããŒã¯åŠçã«åºæã®ãªãã·ã§ã³ãæå®ããæ¹æ³ã«ã€ããŠèª¬æããŸããoption
ã off
ã«èšå®ãããŠããå Žåã¯ãpremark ã»ã¯ã·ã§ã³ã®æ®ãã®éšåã®å
容ã«é¢ä¿ãªããDashO 㯠PreMark ããŸã£ããè¡ããŸãããon
ã«ãªã£ãŠããå Žåã¯ãDashO ã¯æå®ããããšã³ã³ãŒããšãŠã©ãŒã¿ãŒããŒã¯æååã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã«ãŠã©ãŒã¿ãŒããŒã¯ãåã蟌ã¿ãŸãã
<premark option="on"/>
Truncate å±æ§
åºå jar ãã¡ã€ã«ãçæããããŸã§ãDashO ã¯ãŠã©ãŒã¿ãŒããŒã¯æååã®æ倧é·ãäºæž¬ããããšã¯ã§ããŸãããããããDashO ã«å¯Ÿãããã«ãäžã«ãŠã©ãŒã¿ãŒããŒã¯æååãåºå jar ãã¡ã€ã«ã«åãŸããªãã£ãå Žåã©ã察åŠããããæ瀺ããŠããããšã¯ã§ããŸããæ¢å®ã®èšå®ã§ã¯ããšã©ãŒ ã¡ãã»ãŒãžã衚瀺ããŠãã«ããåæ¢ããŸããon
ã«èšå®ãããŠããå Žåã¯ãDashO 㯠jar ã«åãŸãããã«æååãåãè©°ããèŠåã¡ãã»ãŒãžãåºåããŸããã©ã¡ãã®å Žåããã¡ãã»ãŒãžã«ãŠã©ãŒã¿ãŒããŒã¯ã®æ倧ãµã€ãºã瀺ãããŸãã
<premark truncate="on" option="on"/>
<encoding>
DashO ã¯ãæåã®ãšã³ã³ãŒãã«å¿ èŠãªãããæ°ãæå°éã«æããããã«ãæåãšã³ã³ãŒãïŒãæåã³ãŒãããšåŒã¶ïŒã䜿çšããŸããå°ããæåãšã³ã³ãŒãã䜿çšããã°ãããé·ããŠã©ãŒã¿ãŒããŒã¯æååãäœæã§ããŸãã
<premark option="on">
<encoding name="7bit-a"/>
</premark>
DashO ã«ã¯ 5 ã€ã®æåã³ãŒããå®çŸ©ãããŠããããã®äžãããŠã©ãŒã¿ãŒããŒã¯æååããšã³ã³ãŒãããããã®æåã³ãŒããéžæã§ããŸãã
åå | 説æ | 1 æåãããã®ãããæ° |
---|---|---|
6bit-a |
6 ããã 倧æåã®è±æ°åããã³èšå· | 6 |
6bit-b |
6 ããã è±æ°åããã³èšå· | 6 |
7bit-a |
7 ããã è±æ°åããã³èšå· | 7 |
4bit-a |
4 ããã 16 é²æ° | 4 |
utf8 |
ä»»æã®æå | 8 |
ãŠã©ãŒã¿ãŒããŒã¯
æååã«ã¯ãæå®ãããšã³ã³ãŒãã§èªããããäžèšã®æåã®ã¿ãå
¥ããããšãã§ããŸããããšãã°ãæååã«å°æåã®è±åãå«ãŸããŠããå Žåã¯ã6bit-a
ã®ãããªå€§æåã®è±åã®ã¿ãä¿æãããšã³ã³ãŒãã¯äœ¿çšã§ããŸããã
ã¡ã¢ïŒ
ãŠãŒã¶ãŒ ã€ã³ã¿ãŒãã§ã€ã¹ã¯ãåæåã³ãŒãã«å®çŸ©ãããŠããç¹å®ã®æåã衚瀺ããŸãã
<watermark>
<watermark>
ãªãã·ã§ã³ã¯ãåºå jar ãã¡ã€ã«ã«åã蟌ããŠã©ãŒã¿ãŒããŒã¯ãèšå®ããŸãããŠã©ãŒã¿ãŒããŒã¯æååã®æåã¯ãæå®ãããšã³ã³ãŒãã§èš±å¯ãããæåã»ããã«æºæ ããŠããå¿
èŠããããŸãã
ãŠã©ãŒã¿ãŒããŒã¯æååã®æ倧ãµã€ãºã¯ãæ§æãªãã·ã§ã³ãšå¯Ÿè±¡ãšãªã jar ãã¡ã€ã«ã®è€éãã«ãã£ãŠæ±ºå®ãããŸããéåžžãjar ãã¡ã€ã«ã倧ãããã°ããã倧ããæååãå ¥ããããšãã§ããŸãã
<premark option="on">
<watermark>Copyright Yoyodyne Engineering, Inc.</watermark>
</premark>
<passphrase>
ãŸããæå·åã¢ã«ãŽãªãºã ã«ã¯äžå®ã®ãããã¯é·æ å ±ãå¿ èŠã§ãããŠã©ãŒã¿ãŒããŒã¯æååã®æå·åãéžæããå Žåã¯ãããå€ãã®ç©ºãé åãå¿ èŠãšããŸããçµæãšããŠãæå®å¯èœãªãŠã©ãŒã¿ãŒããŒã¯æååã®æ倧é·ããæå·åãããªãå Žåã«æ¯ã¹ãŠçããªãå¯èœæ§ããããŸãã
<premark option="on">
<passphrase>secret</passphrase>
</premark>
<includenonclassfiles> ã»ã¯ã·ã§ã³
DashO ã¯ãé¢é£ããéã¯ã©ã¹ ãã¡ã€ã«ãå®è¡ã®äžéšãšã㊠jar ãã¡ã€ã«ã«ä¿åããããã«ããã®åºåå ãã£ã¬ã¯ããªã«ã³ããŒããããšãã§ããŸããããšãã°ãã¢ããªã±ãŒã·ã§ã³ããjar ã®ãã£ã¬ã¯ããªéå±€äžã« gif ãã¡ã€ã«ãæ£åšãã jar ãã¡ã€ã«å ã«åã蟌ãŸãããšä»®å®ããŸããé£èªåãããã¯ã©ã¹ ãã¡ã€ã«ãåºåå ã«å ¥ããããšã«å ããŠãæå®ããåºåå ã®äžã«ããã®ä»ã®éã¯ã©ã¹ ãã¡ã€ã«ã«å¯Ÿãã gif ãã¡ã€ã«ãã³ããŒããããšãã§ããŸãã
ããã«ãåºåå ãã£ã¬ã¯ããªã®ã«ãŒããããã¯éã¯ã©ã¹ ãã¡ã€ã«ãã³ããŒããã jar ã®ã«ãŒãããã®çžå¯Ÿãã¹ãæå®ããããã«ãéã¯ã©ã¹ ãã¡ã€ã«ãå«ããããšãå¯èœã§ãããã®çžå¯Ÿãã¹ã¯çç¥å¯èœã§ããçžå¯Ÿãã¹ãæå®ãããŠããªãå Žåãåã ã®éã¯ã©ã¹ ãã¡ã€ã«ã¯ãåºåå ãã£ã¬ã¯ããªãŸã㯠jar ã®ã«ãŒãã«ã³ããŒãããŸãã
ã¡ã¢ïŒ
éã¯ã©ã¹ ãã¡ã€ã«ã®åŠçäžã«æ€åºããã XML æ§æãã¡ã€ã«ã¯ãã¯ã©ã¹åãã¡ãœããåãå€æŽã§ããããã«æŽæ°ãããããšããããŸãã
次ã®äŸã§ã¯ãDashO ã¯éã¯ã©ã¹ ãã¡ã€ã«ãåºåå ãã£ã¬ã¯ããªãŸã㯠jar ã®ã«ãŒãã«ã³ããŒããŸãã
<includenonclassfiles>
<copy source="c:\gifs\important.gif"/>
</includenonclassfiles>
次ã®äŸã§ã¯ãDashO 㯠c:\gifs
ãã£ã¬ã¯ããªã® .gif
ãã¡ã€ã«ããåºåå
ãã£ã¬ã¯ããªãŸã㯠jar ã®ã«ãŒãã«ã³ããŒããŸãããœãŒã¹å
ã®å¥ã®ãã£ã¬ã¯ããªã§ .gif ãã¡ã€ã«ã¯æ€çŽ¢ãããŸããã
<includenonclassfiles>
<copy source="c:\gifs\*.gif"/>
</includenonclassfiles>
次ã®äŸã§ã¯ãéã¯ã©ã¹ ãã¡ã€ã«ã¯ c:\test\dashoed\gifs
ãã£ã¬ã¯ããªã«ã³ããŒãããŸãããµããã£ã¬ã¯ããªã® gifs
ã¯ãåºåãã£ã¬ã¯ã㪠c:\test\dashoed
ã«äœæãããŸãã
<output>
<dir path="c:\test\dashoed"/>
</output>
<includenonclassfiles>
<copy source="c:\gifs\important.gif" relativedest="/gifs"/>
</includenonclassfiles>
ãœãŒã¹ãšããŠãã£ã¬ã¯ããªãæå®ãããŠããå Žåãååž°äžéã«ãã£ãŠèŠã€ãã£ããã¹ãŠã®éã¯ã©ã¹ ãã¡ã€ã«ã¯ãéå±€ãä¿æããªããåºåå ã«ã³ããŒãããŸãã
<includenonclassfiles>
<copy source="c:\nonclassfiles\"/>
</includenonclassfiles>
jar ãŸã㯠zip ãã¡ã€ã«ãæå®ãããŠããå Žåãéã¯ã©ã¹ ãã¡ã€ã«ã¯å éšéå±€ãä¿æããªããã³ããŒãããŸãã
<includenonclassfiles>
<copy source="c:\test\nonclassfiles.jar"/>
</includenonclassfiles>
jar ãŸã㯠zip ãã¡ã€ã«ã§çžå¯Ÿãã¹ãæå®ãããŠããå Žåã¯ãæå®ãããçžå¯Ÿãã¹ã®äžã«éå±€ãåäœæãããŸãã
<includenonclassfiles>
<copy source="c:\test\nonclassfiles.jar" relativedest="misc"/>
</includenonclassfiles>
<preverifier> ã»ã¯ã·ã§ã³
J2ME CLDC ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŠããå ŽåãDashO ã§ã¯ãDashO ã«ããã¢ããªã±ãŒã·ã§ã³ã®åŠçãå®äºããåŸã«ãã¯ã©ã¹ ãã¡ã€ã«ã®äºåæ€èšŒãå®è¡ããããšãã§ããŸããrun
å±æ§ã true
ã«èšå®ããŠããå Žåã¯ãäºåæ€èšŒããã°ã©ã ãžã®ãã¹ãæå®ã§ããŸãããã¹ã®ã¿ãæå®ããå Žåãããã°ã©ã å㯠preverify
ã§ãããšèŠãªãããŸãã
ãŸãã
nofinalize
="true
/false
" â äºåæ€èšŒã«-nofinalize
ãæž¡ãïŒãã¡ã€ãã©ã€ã¶ãŒã¯èš±å¯ãããŸãããnonative
="true
/false
" â äºåæ€èšŒã«-nonative
ãæž¡ãïŒãã€ãã£ã ã¡ãœããã¯èš±å¯ãããŸãããnofp
="true
/false
" â äºåæ€èšŒã«-nofp
ãæž¡ãïŒæµ®åå°æ°ç¹æŒç®ã¯èš±å¯ãããŸããã
<preverifier run="true" nonative="true" nofp="true">
${wtk.home}/bin/preverify.exe
</preverifier>
<signjar> ã»ã¯ã·ã§ã³
<signjar>
ã»ã¯ã·ã§ã³ã§ã¯ãDashO ã«ãã£ãŠäœæããã jar ãã¡ã€ã«ãŸã㯠APK ã«å¯Ÿã㊠jarsigner
ãŸã㯠apksigner
ããŒã«ãå®è¡ã§ããŸããjarsigner
ã®è©³çŽ°ã¯ãhttp://docs.oracle.com/javase/7/docs/technotes/tools/solaris/jarsigner.html ã«ãããŸããapksigner
ã®è©³çŽ°ã¯ãhttps://developer.android.com/studio/command-line/apksigner.html ã«ãããŸãã
<signjar>
ã¿ã°ã«ã¯æ¬¡ã®å±æ§ããããŸãã
option
="on
/off
" â 眲åã®ãªã³/ãªããåãæ¿ããŸãããã®å±æ§ãååšããªãå Žåãæ¢å®å€ã¯on
ã§ããkeystore
="âŠ
" â ã㌠ã¹ãã¢ã® URLãçç¥å¯èœã§ãæ¢å®å€ã¯ãŠãŒã¶ãŒã®ããŒã ãã£ã¬ã¯ããªã®.keystore
ã«ãªããŸããURL ã«ãããã³ã«ãå«ãŸããŠããªãå Žåãã㌠ã¹ãã¢ã¯ãã¡ã€ã«ãšèŠãªãããŸãã DashO ããããã£ãåç §ã§ããŸããstorepass
="âŠ
" â ã㌠ã¹ãã¢ã®ãã¹ã¯ãŒããå¿ é ã§ããããã¯ãkeypass
ãæå®ãããŠããªãå Žåã¯éå ¬ééµã®æ¢å®å€ã§ããããŸãããŠãŒã¶ãŒ ã€ã³ã¿ãŒãã§ã€ã¹ã¯ããããšã³ã³ãŒã圢åŒã§æ ŒçŽããŸãããå€ã¯ãã¬ãŒã³ ããã¹ãã§æå®ã§ããŸããDashO ããããã£ãåç §ã§ããŸããstoretype
="âŠ
" â ã㌠ã¹ãã¢ã®ã¿ã€ããçç¥å¯èœã§ãæ¢å®å€ã¯ãJava ã»ãã¥ãªã㣠ãããã㣠ãã¡ã€ã«ã® keystore.type ã«èšå®ãããŠããå€ã«ãªããŸããDashO ããããã£ãåç §ã§ããŸããalias
="âŠ
" â ã㌠ã¹ãã¢ã«éå ¬ééµãæ ŒçŽããããã«äœ¿çšãããå¥åãå¿ é ã§ããDashO ããããã£ãåç §ã§ããŸããkeypass
="âŠ
" â jar ãã¡ã€ã«ã眲åããããã«äœ¿çšãããéå ¬ééµã®ãã¹ã¯ãŒããçç¥å¯èœã§ãæ¢å®å€ã¯ã㌠ã¹ãã¢ã®ãã¹ã¯ãŒãã«ãªããŸãããŠãŒã¶ãŒ ã€ã³ã¿ãŒãã§ã€ã¹ã¯ããããšã³ã³ãŒã圢åŒã§æ ŒçŽããŸãããå€ã¯ãã¬ãŒã³ ããã¹ãã§æå®ã§ããŸããDashO ããããã£ãåç §ã§ããŸããsigfile
="âŠ
" â .SF ããã³ .DSA ãã¡ã€ã«ã®ããŒã¹åãçç¥å¯èœã§ãæ¢å®å€ã¯alias
ãã掟çããå€ã«ãªããŸãã DashO ããããã£ãåç §ã§ããŸããinternalsf
="true
/false
" â.DSA
ã®äžã«çœ²åãã¡ã€ã«ã®ã³ããŒãå«ããŸããçç¥å¯èœã§ãæ¢å®å€ã¯ false ã«ãªããŸããjarsigner
ã«ã®ã¿é©çšãããŸããsectionsonly
="true
/false
" â 眲åãã¡ã€ã«ã«ããããã§ã¹ã ãã¡ã€ã«ã®ããã·ã¥ãå«ãããããŒã¯è¿œå ãããŸãããçç¥å¯èœã§ãæ¢å®å€ã¯false
ã«ãªããŸããjarsigner
ã«ã®ã¿é©çšãããŸããaddArgs
="âŠ
" âjarsigner
ãŸãã¯apksigner
ã®ä»»æã®è¿œå åŒæ°ãçç¥å¯èœã§ããjarsigner
ã䜿çšã㊠APK ã«çœ²åããå Žåã¯ãããã"-sigalg SHA1withRSA -digestalg SHA1"
ã«èšå®ããå¿ èŠããããããããŸãããapksigner
ã䜿çšããå Žåã¯ãAPK ã®çœ²åã¹ããŒã ãèšå®ããããã«ãããã--v1-signing-enabled [true|false] --v2-signing-enabled [true|false]
ãŸãã¯--min-sdk-version nn --max-sdk-version nn
ïŒnn
㯠sdk ããŒãžã§ã³ïŒã«èšå®ããŠãã ããã DashO ããããã£ãåç §ã§ããŸãã
<signjar option="on" keystore="../dev/keystore" storepass="${keystore.psw}"
alias="lazardo">
${JDK_HOME}/bin/jarsigner
</signjar>
<injection> ã»ã¯ã·ã§ã³
<injection>
ã¿ã°ã«ã¯æ¬¡ã®å±æ§ããããŸãã
option
="on
/off
" â DashO ã®ãã§ãã¯å·®ã蟌ã¿æ©èœã®ãªã³/ãªãïŒon
ãŸãã¯off
ïŒãåãæ¿ããŸãããã®å±æ§ãååšããªãå Žåãæ¢å®å€ã¯on
ã§ããhonorAnnotations
="true
/false
" â ã³ã³ãã€ã«ãããã¯ã©ã¹ã«ååšããå·®ã蟌ã¿ã¢ãããŒã·ã§ã³ã䜿çšãããã©ããã決å®ããŸããtrue
ã®å ŽåãDashO ã¯ã¯ã©ã¹å ã®å·®ã蟌ã¿ã¢ãããŒã·ã§ã³ãåŠçããŸãããã®å±æ§ã®æ¢å®å€ã¯true
ã§ããstripAnnotations
="true
/false
" â ã³ã³ãã€ã«ãããã¯ã©ã¹ã«ååšããå·®ã蟌ã¿ã¢ãããŒã·ã§ã³ãåºåã«ä¿æãããã©ããã決å®ããŸããtrue
ã®å ŽåãDashO ã¯ã¢ãããŒã·ã§ã³ãåé€ããŸãããã®å±æ§ã®æ¢å®å€ã¯true
ã§ãã
<injection>
ã¿ã°ãååšããªãå Žåãã³ã³ãã€ã«ãããã¯ã©ã¹å
ã®ã¢ãããŒã·ã§ã³ã¯ç¡èŠãããŸãããåºåã§ä¿æãããŸããoption å±æ§ã off
ã®å Žåã¯ãã¿ã°ã®å
容ã«é¢ä¿ãªãã<injection>
ã¿ã°å
šäœãç¡èŠãããŸãã䜿çšå¯èœãªå±æ§ãšãã®æ¢å®å€ã次ã®ãµã³ãã« XML ã«ç€ºããŸãã
<injection option="on"
honorAnnotations="true"
stripAnnotations="true" />
ã¡ã¢ïŒ
<injection>
ã¿ã°ã¯åã«ãcom.preemptive.annotation.instrumentation
ããã±ãŒãžããã¢ãããŒã·ã§ã³ãåŠçããŸãã¯åé€ããã ãã§ãããããã®ã¢ãããŒã·ã§ã³ã®è©³çŽ°ã«ã€ããŠã¯ãé¢é£ãã javadocs ãåç §ããŠãã ããã
<runtime> ã»ã¯ã·ã§ã³
<injection>
ã¿ã°ã«ã¯ãçç¥å¯èœãª <runtime>
ã¿ã°ãå«ããããšãã§ããŸãã<runtime>
ã¿ã°ã¯ãShelf Life ãã§ãã¯ãå·®ã蟌ãå Žåã«ãã¢ããªã±ãŒã·ã§ã³ã§ã©ã®ãã§ãã¯å®è£
ãå·®ã蟌ãŸããããšãã©ã® Shelf Life ã®å®è£
jar ã䜿çšãããããæå®ããããã«äœ¿çšãããŸãã<runtime>
ã¿ã°ãçç¥ãããšããã® target
å±æ§ã®æ¢å®å€ã䜿çšãããŸãã
target
="java
" â ã¢ããªã±ãŒã·ã§ã³ã®å®è¡ç°å¢ããµããŒããããŠããå€ã¯ãjava
ïŒJava 1.5 以äžïŒãšandroid
ïŒAndroid SDK 1.6 以äžïŒã§ãã
<injection>
<runtime target="java" />
</injection>
<shelflife> ã»ã¯ã·ã§ã³
<injection>
ã¿ã°ã«ã¯ãä»»æã® Shelf Life èšå®ãå«ããããšãã§ããŸãããããã¯ãã¢ããªã±ãŒã·ã§ã³ã«é
眮ãããæéåãããŒã¯ã³ãäœæãã ShelfLifeCheck ã¢ãããŒã·ã§ã³ã§äœ¿çšãããå€ãå®çŸ©ããŸãããã¹ãŠã®å±æ§ããå·®ã蟌ã¿ãè¡ããããšãã«å±éãããããããã£åç
§ãå«ãããšãã§ããããšã«æ³šæããŠãã ããã
key
="file" â PreEmptive Solutions ããå ¥æãã Shelf Life ã㌠ãã¡ã€ã«ãdate
="date" âMM/DD/YYYY
圢åŒã®åºå®ã®æå¹æéãããã¯ãã¢ããªã±ãŒã·ã§ã³ãæéåãã«ãªããšèŠãªãããæ¥ä»ã§ããwarningDate
="date" âMM/DD/YYYY
圢åŒã®åºå®ã®èŠåæ¥ä»ãããã¯ãæéåãã«é¢ããèŠåãéå§ããæ¥ä»ã§ããperiod
="days" â æå¹æéãããã¯ãã¢ããªã±ãŒã·ã§ã³ãæéåãã«ãªããšèŠãªãããéå§æ¥ããã®æ¥æ°ã§ãã æå®ãã shelf life ãã§ãã¯ããšã®éå§æ¥ãæ§æã§ããŸããwarningPeriod
="days" â èŠåæéãããã¯ãæéåãã®èŠåæéãéå§ãããæéãŸã§ã®æ¥æ°ã§ãã
åºå®ã®æ¥ä»ãšæéã®çµã¿åãããèš±å¯ãããŸããåºå®ã®æ¥ä»ãšæéã®äž¡æ¹ã®å€ãååšããŠããå Žåã¯ãåºå®ã®æ¥ä»ã䜿çšãããŸããã¢ããªã±ãŒã·ã§ã³ ã³ãŒãã«çŸããã¢ãããŒã·ã§ã³ã¯ããããã®å€ããªãŒããŒã©ã€ããããå¢å ããããããããšãã§ããŸãã
<injection>
<shelflife key="../yoyodyne.slkey"
date="10/25/${EXP_YR}"
warningperiod="90"/>
</injection>
æéåãããŒã¯ã³ã®ããããã£
ãŠãŒã¶ãŒå®çŸ©ã®ããããã£ãæéåãããŒã¯ã³ã«è¿œå ããããšãã§ããŸãããããã®ããããã£ã¯ãDashO ã®ä»ã®ãããã㣠ã¿ã°ãšåã圢åŒã䜿çšããŸããããããã£ã¯ãShelfLifeCheck
ã¢ãããŒã·ã§ã³ã䜿ã£ãŠãŠãŒã¶ãŒæäœãæå®ãããŠããã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠèª¿ã¹ãããšãã§ããŸãã
<injection>
<shelflife key="âŠ" date="10/25/2016">
<property name="REGION" value="2"/>
<property name="COUNTRY" value="GB"/>
</shelflife>
</injection>
name
ãš value
ã®äž¡æ¹ã®å±æ§ã«ã¯ããããã£åç
§ãå«ããããšãã§ããŸããããã㯠ShelfLifeCheck
ãå·®ã蟌ãŸãããšãã«å±éãããŸãã
<checks> ã»ã¯ã·ã§ã³
ãã®ã»ã¯ã·ã§ã³ã§ã¯ãã³ãŒãã«å·®ã蟌ããã§ãã¯ãšã¬ã¹ãã³ã¹ã«ã€ããŠèª¬æããŸãããããã®ãã§ãã¯ããã³ã¬ã¹ãã³ã¹ã«ã¯ã<locations> ã»ã¯ã·ã§ã³ãå«ãŸããŠããå¿ èŠããããŸãã
ãã§ãã¯
ã»ãšãã©ã®ãã§ãã¯ã«ã¯ã次ã®æšæºå±æ§ããããŸãã
action
â ãã§ãã¯ã®ç¶æ ã䌎ããä»»æã®æäœã®åŒã³åºã/èšå®ã ã»ãšãã©ã®ãã§ãã¯ã§ã¯ãããã¯boolean
åã«ãªããŸãïŒãœãŒã¹ããã³æäœã®æå®ãåç §ããŠãã ããïŒãresponse
â ãã§ãã¯ãããªã¬ãŒããããšãã«å®è¡ããã¬ã¹ãã³ã¹ãexit
â ã©ã³ãã ãªãŒã以å€ã®ãªã¿ãŒã³ ã³ãŒããçæããŠã¢ããªã±ãŒã·ã§ã³ãçµäºãããhang
â çŸåšã®ã¹ã¬ããããã³ã°ããããerror
âjava.lang.Error
ã®ãã©ã³ãã ã«éžæããããµãã¯ã©ã¹ãã¹ããŒãããexception
âjava.lang.Exception
ã®ãã©ã³ãã ã«éžæããããã§ãã¯ãããŠããªããµãã¯ã©ã¹ãã¹ããŒãããnone
â äœãããªãïŒæ¢å®ïŒã
where
â ã³ãŒããå·®ã蟌ãå ŽæãBeginning
â ã¡ãœããã®æåã®éšåïŒæ¢å®ïŒãEnd
â ã¡ãœããã®æåŸã®éšåïŒãã¹ãŠã® exit ãã€ã³ãïŒãBeginningAndEnd
â ã¡ãœããã®æåãšæåŸã®éšåã
ã¬ã¹ãã³ã¹
ã»ãšãã©ã®ã¬ã¹ãã³ã¹ã«ã¯ã次ã®æšæºå±æ§ããããŸãã
source
â ãã§ãã¯ãããªã¬ãŒããããã©ãããå€æãããœãŒã¹ãããã¯boolean
åã«ãªããŸãïŒãœãŒã¹ããã³æäœã®æå®ãåç §ããŠãã ããïŒãresponse
âsource
ãããã§ãã¯ãããªã¬ãŒãããããšã瀺ãå Žåã«ãå®è¡ããã¬ã¹ãã³ã¹ãexit
â ã©ã³ãã ãªãŒã以å€ã®ãªã¿ãŒã³ ã³ãŒããçæããŠã¢ããªã±ãŒã·ã§ã³ãçµäºãããhang
â çŸåšã®ã¹ã¬ããããã³ã°ããããerror
âjava.lang.Error
ã®ãã©ã³ãã ã«éžæããããµãã¯ã©ã¹ãã¹ããŒãããexception
âjava.lang.Exception
ã®ãã©ã³ãã ã«éžæããããã§ãã¯ãããŠããªããµãã¯ã©ã¹ãã¹ããŒãããnone
â äœãããªãïŒæ¢å®ïŒã
probability
âresponse
ïŒã€ãŸãexit
ãhang
ãerror
ããŸãã¯exception
ïŒãçºçãã確çã0.0
ãã1.0
ãŸã§ã®å°æ°ãæå®ã§ããŸãïŒæ¢å®å€ïŒ1.0
ïŒãwhere
â ã³ãŒããå·®ã蟌ãå ŽæãBeginning
â ã¡ãœããã®æåã®éšåïŒæ¢å®ïŒãEnd
â ã¡ãœããã®æåŸã®éšåïŒãã¹ãŠã® exit ãã€ã³ãïŒãBeginningAndEnd
â ã¡ãœããã®æåãšæåŸã®éšåã
<debuggingCheck> ã»ã¯ã·ã§ã³
ãããã° ãã§ãã¯ã¯ãã¢ããªã±ãŒã·ã§ã³ããããã°ãããŠãããã©ãããå€æããŸãïŒãããã° ãã§ãã¯ãšã¬ã¹ãã³ã¹ãåç §ããŠãã ããïŒããããã° ãã§ãã¯ã¯æšæºå±æ§ãåããŠããŸãã
<debuggingCheck action="myBoolean" response="none" where="End">
<locations>
<classes name="com.example.MyClass">
<method name="runCalculation" signature="int,int"/>
</classes>
</locations>
</debuggingCheck>
<debuggingResponse> ã»ã¯ã·ã§ã³
ãããã°ã®ã¬ã¹ãã³ã¹ã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã¯ããã§ãã¯èªäœãçºçããå Žæããé¢ããé åã§ãããã° ãã§ãã¯ã«å¯Ÿå¿ã§ããããã«ãªããŸãïŒãããã° ãã§ãã¯ãšã¬ã¹ãã³ã¹ãåç §ããŠãã ããïŒããããã°ã®ã¬ã¹ãã³ã¹ã¯æšæºå±æ§ãåããŠããŸãã
<debuggingResponse source="myBoolean" response="error" where="Beginning"
probability="0.5">
<locations>
<classes name="com.example.MyOtherClass">
<method name="runOtherCalculation" signature="double"/>
</classes>
</locations>
</debuggingResponse>
<debugEnabledCheck> ã»ã¯ã·ã§ã³
ãããã°æå¹åãã§ãã¯ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ãããã°ãæå¹ã«ãªã£ãŠãããã©ãããå€æããŸãïŒãããã° ãã§ãã¯ãšã¬ã¹ãã³ã¹ãåç §ããŠãã ããïŒããããã°æå¹åãã§ãã¯ã¯æšæºå±æ§ãåããŠããŸãã
<debugEnabledCheck action="myBoolean" response="none" where="End">
<locations>
<classes name="com.example.MyClass">
<method name="runCalculation" signature="int,int"/>
</classes>
</locations>
</debugEnabledCheck>
<debugEnabledResponse> ã»ã¯ã·ã§ã³
ãããã°æå¹åã®ã¬ã¹ãã³ã¹ã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã¯ããã§ãã¯èªäœãçºçããå Žæããé¢ããé åã§ãããã°æå¹åãã§ãã¯ã«å¯Ÿå¿ã§ããããã«ãªããŸãïŒãããã° ãã§ãã¯ãšã¬ã¹ãã³ã¹ãåç §ããŠãã ããïŒããããã°æå¹åã®ã¬ã¹ãã³ã¹ã¯æšæºå±æ§ãåããŠããŸãã
<debugEnabledResponse source="myBoolean" response="error"
where="Beginning" probability="0.5">
<locations>
<classes name="com.example.MyOtherClass">
<method name="runOtherCalculation" signature="double"/>
</classes>
</locations>
</debugEnabledResponse>
<emulatorCheck> ã»ã¯ã·ã§ã³
ãšãã¥ã¬ãŒã¿ãŒ ãã§ãã¯ã¯ããšãã¥ã¬ãŒã¿ãŒã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããŠãããã©ãããå€æããŸãïŒãšãã¥ã¬ãŒã¿ãŒ ãã§ãã¯ãšã¬ã¹ãã³ã¹ãåç §ããŠãã ããïŒã ãšãã¥ã¬ãŒã¿ãŒ ãã§ãã¯ã¯æšæºå±æ§ãåããŠããŸãã
<emulatorCheck action="myBoolean" response="none" where="End">
<locations>
<classes name="com.example.MyClass">
<method name="runCalculation" signature="int,int"/>
</classes>
</locations>
</emulatorCheck>
ã¡ã¢ïŒ
ãšãã¥ã¬ãŒã¿ãŒ ãã§ãã¯ã¯ Android ã§ã®ã¿ãµããŒããããŸãã
<emulatorResponse> ã»ã¯ã·ã§ã³
ãšãã¥ã¬ãŒã¿ãŒã®ã¬ã¹ãã³ã¹ã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã¯ããã§ãã¯èªäœãçºçããå Žæããé¢ããé åã§ãšãã¥ã¬ãŒã¿ãŒ ãã§ãã¯ã«å¯Ÿå¿ã§ããããã«ãªããŸãïŒãšãã¥ã¬ãŒã¿ãŒ ãã§ãã¯ãšã¬ã¹ãã³ã¹ãåç §ããŠãã ããïŒã ãšãã¥ã¬ãŒã¿ãŒã®ã¬ã¹ãã³ã¹ã¯æšæºå±æ§ãåããŠããŸãã
<emulatorResponse source="myBoolean" response="error"
where="Beginning" probability="0.5">
<locations>
<classes name="com.example.MyOtherClass">
<method name="runOtherCalculation" signature="double"/>
</classes>
</locations>
</emulatorResponse>
ã¡ã¢ïŒ
ãšãã¥ã¬ãŒã¿ãŒã®ã¬ã¹ãã³ã¹ã¯ Android ã§ã®ã¿ãµããŒããããŸãã
<hookCheck> ã»ã¯ã·ã§ã³
ãã㯠ãã§ãã¯ã¯ãã¢ããªã±ãŒã·ã§ã³ãããã¯ãããŠãããã©ãããå€æããŸãïŒãã㯠ãã§ãã¯ãšã¬ã¹ãã³ã¹ãåç §ããŠãã ããïŒã ãã㯠ãã§ãã¯ã¯æšæºå±æ§ãåããŠããŸãã
<hookCheck action="myBoolean" response="none" where="End">
<locations>
<classes name="com.example.MyClass">
<method name="runCalculation" signature="int,int"/>
</classes>
</locations>
</hookCheck>
ã¡ã¢ïŒ
ãã㯠ãã§ãã¯ã¯ Android ã§ã®ã¿ãµããŒããããŸãã
<hookResponse> ã»ã¯ã·ã§ã³
ããã¯ã®ã¬ã¹ãã³ã¹ã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã¯ããã§ãã¯èªäœãçºçããå Žæããé¢ããé åã§ãã㯠ãã§ãã¯ã«å¯Ÿå¿ã§ããããã«ãªããŸãïŒãã㯠ãã§ãã¯ãšã¬ã¹ãã³ã¹ãåç §ããŠãã ããïŒã ããã¯ã®ã¬ã¹ãã³ã¹ã¯æšæºå±æ§ãåããŠããŸãã
<hookResponse source="myBoolean" response="error"
where="Beginning" probability="0.5">
<locations>
<classes name="com.example.MyOtherClass">
<method name="runOtherCalculation" signature="double"/>
</classes>
</locations>
</hookResponse>
ã¡ã¢ïŒ
ããã¯ã®ã¬ã¹ãã³ã¹ã¯ Android ã§ã®ã¿ãµããŒããããŸãã
<rootCheck> ã»ã¯ã·ã§ã³
ã«ãŒã ãã§ãã¯ã¯ãã«ãŒãåãããããã€ã¹ã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããŠãããã©ãããå€æããŸãïŒã«ãŒã ãã§ãã¯ãšã¬ã¹ãã³ã¹ãåç §ããŠãã ããïŒãã«ãŒã ãã§ãã¯ã¯æšæºå±æ§ãåããŠããŸãã
<rootCheck action="myBoolean" response="none" where="End">
<locations>
<classes name="com.example.MyClass">
<method name="runCalculation" signature="int,int"/>
</classes>
</locations>
</rootCheck>
ã¡ã¢ïŒ
ã«ãŒã ãã§ãã¯ã¯ Android ã§ã®ã¿ãµããŒããããŸãã
<rootResponse> ã»ã¯ã·ã§ã³
ã«ãŒãã®ã¬ã¹ãã³ã¹ã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã¯ããã§ãã¯èªäœãçºçããå Žæããé¢ããé åã§ã«ãŒã ãã§ãã¯ã«å¯Ÿå¿ã§ããããã«ãªããŸãïŒã«ãŒã ãã§ãã¯ãšã¬ã¹ãã³ã¹ãåç §ããŠãã ããïŒãã«ãŒãã®ã¬ã¹ãã³ã¹ã¯æšæºå±æ§ãåããŠããŸãã
<rootResponse source="myBoolean" response="error"
where="Beginning" probability="0.5">
<locations>
<classes name="com.example.MyOtherClass">
<method name="runOtherCalculation" signature="double"/>
</classes>
</locations>
</rootResponse>
ã¡ã¢ïŒ
ã«ãŒãã®ã¬ã¹ãã³ã¹ã¯ Android ã§ã®ã¿ãµããŒããããŸãã
<shelfLifeCheck> ã»ã¯ã·ã§ã³
Shelf Life ãã§ãã¯ã¯ãæå¹æéãã©ã¡ãŒã¿ãŒã«åºã¥ããŠãã¢ããªã±ãŒã·ã§ã³ã®æå¹æéãåããŠãããããŸãã¯éããªãåãããã©ãããå€æããŸãïŒShelf Life ãåç
§ããŠãã ããïŒãShelf Life ãã§ãã¯ã¯ãresponse
ãé€ããã¹ãŠã®æšæºå±æ§ãåããŠããã»ãã«ã6 ã€ã®è¿œå å±æ§ããããŸãã
expirationDate
â ã¢ããªã±ãŒã·ã§ã³ã®æå¹æéãåãã絶察æ¥ä»ãMM/DD/YYYY
圢åŒã§ããwarningDate
â æéåãã«é¢ããèŠåãéå§ãã絶察æ¥ä»ãMM/DD/YYYY
圢åŒã§ããstartDateSource
â å®è¡æã«java.util.Date
ãšããŠæäŸãããéå§æ¥ã®ãœãŒã¹ãexpirationPeriod
â çžå¯Ÿçãªæå¹æéãéå§æ¥ããã®æ¥æ°ã瀺ããŸããwarningPeriod
â çžå¯ŸçãªèŠåæéãæå¹æéãŸã§ã®æ¥æ°ã瀺ããŸããtokenSource
â Shelf Like ããŒã¯ã³ãå€éšã§ç®¡çããå Žåã«ãjava.io.Reader
ãšããããŒã¯ã³ã®ãœãŒã¹ã
ã¡ã¢ïŒãã®å Žåãæšæºã®
action
å±æ§ã¯ãToken
åŒæ°ãåãå ¥ããvoid ãè¿ãã¡ãœãããå¿ èŠãšããŸãïŒæ¢å®ïŒShelfLifeCheck ã§èª¬æãããŠããæ¢å®ã®æäœïŒã
<shelfLifeCheck action="customShelfLifeAction()" where="End"
expirationDate="11/01/2016" warningDate="10/01/2016">
<locations>
<classes name="com.example.Main">
<method name="earlySetupMethod" signature="java.lang.String"/>
</classes>
<classes name="com.example.MyOtherClass">
<method name="infrequentButCriticalCalculation" signature="double"/>
</classes>
</locations>
</shelfLifeCheck>
<tamperCheck> ã»ã¯ã·ã§ã³
æ¹ãããã§ãã¯ã¯ãã¢ããªã±ãŒã·ã§ã³ãå€æŽããããã©ãããå€æããŸãïŒæ¹ãããã§ãã¯ãšã¬ã¹ãã³ã¹ãåç §ããŠãã ããïŒãæ¹ãããã§ãã¯ã¯æšæºå±æ§ãåããŠããŸãã
æ¹ãããã§ãã¯ã«ã¯ãä»»æã§ã眲åæ
å ±ãæ§æãã signerInfo
èŠçŽ ãå«ããããšãã§ããŸãã ããã¯ã<signjar> ã«èšå®ãããŠããæ
å ±ããªãŒããŒã©ã€ãããŸãã
alias
â ã㌠ã¹ãã¢ã«éå ¬ééµãæ ŒçŽããããã«äœ¿çšãããå¥åãDashO ããããã£ãåç §ã§ããŸããkeystore
â ã㌠ã¹ãã¢ã® URLãæ¢å®å€ã¯ãŠãŒã¶ãŒã®ããŒã ãã£ã¬ã¯ããªã®.keystore
ã«ãªããŸããURL ã«ãããã³ã«ãå«ãŸããŠããªãå Žåãã㌠ã¹ãã¢ã¯ãã¡ã€ã«ãšèŠãªãããŸããDashO ããããã£ãåç §ã§ããŸããstorepass
â ã㌠ã¹ãã¢ã®ãã¹ã¯ãŒãããŠãŒã¶ãŒ ã€ã³ã¿ãŒãã§ã€ã¹ã¯ããããšã³ã³ãŒã圢åŒã§æ ŒçŽããŸãããå€ã¯ãã¬ãŒã³ ããã¹ãã§æå®ã§ããŸããDashO ããããã£ãåç §ã§ããŸããstoretype
â ã㌠ã¹ãã¢ã®çš®é¡ãæ¢å®å€ã¯ãJava ã»ãã¥ãªã㣠ãããã㣠ãã¡ã€ã«ã® keystore.type ã«èšå®ãããŠããå€ã«ãªããŸããDashO ããããã£ãåç §ã§ããŸãã
<tamperCheck action="myBoolean" response="none" where="End">
<locations>
<classes name="com.example.MyClass">
<method name="runCalculation" signature="int,int"/>
</classes>
</locations>
<signerInfo alias="correct_cert" storepass="[SbJlvHrFg8s4GblvgMcQ4w==]"
keystore="keystore.ks"/>
</tamperCheck>
<tamperResponse> ã»ã¯ã·ã§ã³
æ¹ããã®ã¬ã¹ãã³ã¹ã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã¯ããã§ãã¯èªäœãçºçããå Žæããé¢ããé åã§æ¹ãããã§ãã¯ã«å¯Ÿå¿ã§ããããã«ãªããŸãïŒæ¹ãããã§ãã¯ãšã¬ã¹ãã³ã¹ãåç §ããŠãã ããïŒãæ¹ããã®ã¬ã¹ãã³ã¹ã¯æšæºå±æ§ãåããŠããŸãã
<tamperResponse source="myBoolean" response="error"
where="Beginning" probability="0.5">
<locations>
<classes name="com.example.MyOtherClass">
<method name="runOtherCalculation" signature="double"/>
</classes>
</locations>
</tamperResponse>
<locations> ã»ã¯ã·ã§ã³
ãã¹ãŠã®ãã§ãã¯ããã³ã¬ã¹ãã³ã¹ã§ã¯ãå Žæãèšå®ããå¿ èŠããããŸããlocations ã¿ã°ã¯ããã®åãšã㊠<classes> ãå¿ èŠãšããŸãã
ãœãŒã¹ããã³æäœã®æå®
ãã§ãã¯ãšã¬ã¹ãã³ã¹ã«ã¯ããœãŒã¹ããã³æäœãæå®ã§ããŸãããœãŒã¹ã§ã¯ãå®è¡æã«å·®ã蟌ãŸããã³ãŒãã«ããã£ãŒã«ããšããŠã®ããŒã¿ããŸãã¯ã¡ãœããåŒã³åºãã®çµæãšããŠã®ããŒã¿ãæäŸããŸããæäœã§ã¯ãå·®ã蟌ãŸããã³ãŒãã«ãã£ãŠåŒã³åºãããã«ã¹ã¿ã åäœãæäŸãããããŸãã¯çµæãèšé²ãããã£ãŒã«ããæå®ããŸãããœãŒã¹ãšæäœã§ã¯ãçŸåšã®ã¯ã©ã¹ã«å®çŸ©ãããŠãããã£ãŒã«ããã¡ãœããããŸãã¯å¥ã®ã¯ã©ã¹ã®éçã¡ãœãããéçãã£ãŒã«ããåç §ã§ããŸãã
éçãã£ãŒã«ãããã³ã¡ãœããã¯ãã©ã®ã¡ãœããããã§ã䜿çšã§ããŸããã€ã³ã¹ã¿ã³ã¹ ãã£ãŒã«ãããã³ã¡ãœããã¯ãåãã¯ã©ã¹å ã®ã€ã³ã¹ã¿ã³ã¹ ã¡ãœããããã®ã¿äœ¿çšã§ããŸãããã£ãŒã«ãã¯ãã¢ãããŒã·ã§ã³ãæ±ããå¿ èŠãªåã§ãªããã°ãªããŸãããã¡ãœããã¯ãã¢ãããŒã·ã§ã³ãæ±ããå¿ èŠãªæ»ãå€ã®åãšãã©ã¡ãŒã¿ãŒãæã£ãŠããªããã°ãªããŸãããæå®ããããã£ãŒã«ãããã³ã¡ãœããã¯ãå®è¡æã«å·®ã蟌ã¿å Žæããã¢ã¯ã»ã¹ã§ããå¿ èŠããããŸãã
ãã£ãŒã«ããã¡ãœããã¯ã次ã®åœ¢åŒã䜿çšããŠæå®ããŸãã
field
â çŸåšã®ã¯ã©ã¹ã® ãã£ãŒã«ã field ããœãŒã¹ãšããŠäœ¿çšããŸãããœãŒã¹ãéçã¡ãœãããã䜿çšãããå ŽåããœãŒã¹ã¯éçã§ãªããã°ãªããŸãããããã§ãªãå Žåã¯ãã€ã³ã¹ã¿ã³ã¹ ãã£ãŒã«ããŸãã¯éçãã£ãŒã«ããæå®ã§ããŸãã@field
â çŸåšã®ã¯ã©ã¹ã®éçãã£ãŒã«ã field ããœãŒã¹ãšããŠäœ¿çšããŸããããã¯ãéçã¡ãœãããŸãã¯ã€ã³ã¹ã¿ã³ã¹ ã¡ãœãããã䜿çšã§ããŸããclass.field
â ã¯ã©ã¹ class ã®éçãã£ãŒã«ã field ããœãŒã¹ãšããŠäœ¿çšããŸããclass ã¯ãå®å šä¿®é£Ÿããã Java ã¯ã©ã¹åã§ããããã¯ãéçã¡ãœãããŸãã¯ã€ã³ã¹ã¿ã³ã¹ ã¡ãœãããã䜿çšã§ããŸããmethod()
â çŸåšã®ã¯ã©ã¹ã®ã¡ãœãã method ããœãŒã¹ãšããŠäœ¿çšããŸãããœãŒã¹ãéçã¡ãœãããã䜿çšãããå ŽåããœãŒã¹ã¯éçã§ãªããã°ãªããŸãããããã§ãªãå Žåã¯ãã€ã³ã¹ã¿ã³ã¹ ã¡ãœãããŸãã¯éçã¡ãœãããæå®ã§ããŸãã@method()
â çŸåšã®ã¯ã©ã¹ã®éçã¡ãœãã method ããœãŒã¹ãšããŠäœ¿çšããŸããããã¯ãéçã¡ãœãããŸãã¯ã€ã³ã¹ã¿ã³ã¹ ã¡ãœãããã䜿çšã§ããŸããclass.method()
â ã¯ã©ã¹ class ã®éçã¡ãœãã method ããœãŒã¹ãšããŠäœ¿çšããŸããclass ã¯ãå®å šä¿®é£Ÿããã Java ã¯ã©ã¹åã§ããããã¯ãéçã¡ãœãããŸãã¯ã€ã³ã¹ã¿ã³ã¹ ã¡ãœãããã䜿çšã§ããŸãã
ã¡ã¢ïŒ
@
ã¯ãå¥ã®ã¯ã©ã¹ã®éçã¡ãœãããŸãã¯éçãã£ãŒã«ããåç §ããå Žåã«ã¯äœ¿çšã§ããŸãããåãã¯ã©ã¹ã®éçã¡ãœãããŸãã¯éçãã£ãŒã«ããåç §ããå Žåã@
ã¯çç¥å¯èœã§ãã
ãã®ãœãŒã¹ãŸãã¯æäœããè€æ°ã®å Žæã«å·®ã蟌ãããæ§æãããŠãããã§ãã¯ãŸãã¯ã¬ã¹ãã³ã¹ãã䜿çšãããŠããå Žåã«ã¯ãæå®ããããœãŒã¹ãŸãã¯æäœã¯ãããããã®å·®ã蟌ã¿å Žæãšçžå¯ŸããŠããªããã°ãªããŸããã
ãœãŒã¹ãŸãã¯æäœãæ£ããæå®ãããŠããªããšããšã©ãŒãçºçããŸãã
<includelist> ããã³ <excludelist> èŠå
ãããžã§ã¯ã ãã¡ã€ã«ã®äžéšã®ã¿ãã¯ã<includelist>
ããã³ <excludelist>
ã䜿çšããŠãæäœãé©çšãããé
ç®ã埮調æŽããŸãããããã®ã¿ã°ã¯ãç¹å®ã®ã¯ã©ã¹ãã¡ãœããããŸãã¯ãã£ãŒã«ããéžæããããã«é©çšãããèŠåã®ãªã¹ããæå®ããŸãã
察象éžæãšå¯Ÿè±¡é€å€ã®äž¡æ¹ã䜿çšããŠããã¿ã°ã§ã¯ãæåã«å¯Ÿè±¡éžæã決å®ãããŸãã<includelist>
ã空ã®å Žåã¯ã*ãã¹ãŠã®é
ç®ã察象ãšããŠéžæãããŸããé
ç®ãéžæããããã次ã«å¯Ÿè±¡é€å€èŠåã調ã¹ãããŸãã<excludelist>
ã空ã®å Žåã¯ãã©ã®é
ç®ã察象ããé€å€ãããŸãããåãªã¹ãå
ã®èŠåã¯ããããããããžã§ã¯ã ãã¡ã€ã«ã§æå®ãããŠããé åºã§é©çšãããŸãããŸãã<excludelist>
ã«å ããŠäœ¿çšãããç¹å®ã®æ©èœã«ã€ããŠæ§æããã <globalProcessingExclude> ã»ã¯ã·ã§ã³ããããŸããããã«ãDashO ã®å
éšèŠåããã®ä»ã®ãªãã·ã§ã³ã®èŠä»¶ãããã³ã¯ã©ã¹èªäœã«ãã£ãŠãé
ç®ãé€å€ãããå¯èœæ§ããããŸãã
ã¯ã©ã¹ãã¡ã³ããŒãšåæ§ã«ã¡ãœããã®çœ²åã®ååãããªãã©ã«ããã¿ãŒã³ããããã¯æ£èŠè¡šçŸãšããŠæå®ããããšãã§ããŸãã詳现ã«ã€ããŠã¯ãååïŒãªãã©ã«ããã¿ãŒã³ãããã³æ£èŠè¡šçŸãåç §ããŠãã ãããé ç®ã®ä¿®é£Ÿåãæ¡ä»¶ãšããŠäœ¿çšã§ããŸãã詳现ã«ã€ããŠã¯ãModifiers å±æ§ãåç §ããŠãã ããã
<classes> ã¿ã°
<classes>
ã¿ã°ã¯ã1 ã€ä»¥äžã®ã¯ã©ã¹ãéžæããèŠåãå®çŸ©ããããã«äœ¿çšãããŸããã¯ã©ã¹åã¯å®å
šä¿®é£Ÿåã§ããå¿
èŠããããå
éšã¯ã©ã¹ã¯ãå€éšãšå
éšã®ã¯ã©ã¹åã®éã« $
ãåºåãæåãšããŠäœ¿çšããŠæå®ãããããšã«æ³šæããŠãã ããã
<classes>
ã¿ã°ã¯ããã£ãŒã«ããšã¡ãœãããéžæããããã®è¿œå èŠåãæå®ããããã«ãã¯ã©ã¹ãéžæããŸããã¿ã°ã« <field>
ã¿ã°ã <method>
ã¿ã°ãå«ãŸããŠããªããã°ããã®ã¿ã°ãã¯ã©ã¹ã®ãã¹ãŠã®ã¡ã³ããŒããããã¯ã¯ã©ã¹èªäœã«é©çšããããã«äœ¿çšã§ããŸãããã®åäœã¯ãèŠåã䜿çšããŠãããªãã·ã§ã³ã«ãã£ãŠæ±ºãŸããŸãã
ããã€ãã®å¯Ÿè±¡é€å€ãªã¹ãã§ã¯ã<classes>
åãã¯ã©ã¹ã®ã¡ã³ããŒã§ã¯ãªãã¯ã©ã¹èªäœã«é©çšãããããã«ããããšãã§ããŸããããã¯ãçç¥å¯èœãª excludeclass
å±æ§ã«ãã£ãŠå¶åŸ¡ãããŸããexcludeclass
å±æ§ã®æ¢å®å€ã¯ true
ã§ããexcludeclass
å±æ§ããã®ãªãã·ã§ã³ã§äœ¿çšãããŠãããã©ããã確èªããããã«ã<excludelist>
ã䜿çšããåã
ã®ã¿ã°ã調ã¹ãŠãã ããã
<classes name=".*" regex="true"/>
<classes name="library.Class1$NestedClass"/>
<classes name="myco.Test.MyOtherTest" excludeclass="false">
<method> ã¿ã°
<method>
ã¿ã°ã¯ <classes>
ã¿ã°å
ã§äœ¿çšãããŸããã¡ãœããã¯ãååïŒname
ïŒãšçœ²åïŒsignature
ïŒãæå®ããŠéžæã§ããŸãã<method>
ã® regex ã®èšå®ã¯ <classes>
ã¿ã°ããç¶æ¿ãããŸããå²ã£ãŠãã <classes>
ã® regex ã®å€ã true
ã§ããã°ãname
å±æ§ãš signature
å±æ§ã¯æ£èŠè¡šçŸã§ãã次ã®äŸã¯ãæ£èŠè¡šçŸã䜿çšããŠãä»»æã®æ°ã®ãã©ã¡ãŒã¿ãŒãæ〠set
ã§å§ãŸãã¡ãœããããã¹ãŠéžæããŸãã
<classes name=".*" regex="true">
<method name="set.*" signature=".*"/>
</classes>
signature
å±æ§ãéžæã®æ¡ä»¶ãšããŠäœ¿çšããããšãã§ããŸããsignature
å±æ§ã¯ãã¡ãœããã®ãã©ã¡ãŒã¿ãŒäžèŠ§ã®åãšäžèŽãã Java åã®ã«ã³ãåºåãã®äžèŠ§ã§ãããã©ã¡ãŒã¿ãŒã®ã¯ã©ã¹åã¯å®å
šä¿®é£Ÿåã§ãªããã°ãªããŸããããã©ã¡ãŒã¿ãŒã®ãªãã¡ãœãããæå®ããã«ã¯ã空ã®æååã䜿çšããŸãã
<classes name=".*" regex="true">
<method name="get[A-Z].*" signature=""/>
</classes>
<classes name=".*">
<method name="set*" signature="int,MyClass,MyClass[]"/>
</classes>
<classes name="AnalysisEngine">
<method name="compute" signature="int,java.util.List,float[]"/>
</classes>
<field> ã¿ã°
<field>
ã¿ã°ã¯ <classes>
ã¿ã°å
ã§äœ¿çšãããŸããå²ã£ãŠãã <classes>
ã® regex
ã®å€ã true ã§ããã°ãname
å±æ§ã¯æ£èŠè¡šçŸã§ãªããã°ãªããŸããã
äžéšã®ãªãã·ã§ã³ã®æäœã¯ã¡ãœããã«ã®ã¿é©çšãããã®ã§ã<field>
ã¿ã°ã¯ããã¹ãŠã®å¯Ÿè±¡éžæãªã¹ãããã³å¯Ÿè±¡é€å€ãªã¹ãã«ã¯é©çšã§ããŸããã<field>
ã¿ã°ã䜿çšå¯èœãã©ããã確èªããããã«ã察象éžæãªã¹ããŸãã¯å¯Ÿè±¡é€å€ãªã¹ãã䜿çšããåã
ã®ã¿ã°ã調ã¹ãŠãã ããã次ã®äŸã¯ãæ£èŠè¡šçŸã䜿çšããŠãcounter
ã§å§ãŸããã£ãŒã«ãããã¹ãŠéžæããŸãã
<classes name=".*" regex="true">
<field name="counter.*"/>
</classes>
<method> ãš <field> ã®çµã¿åãã
<classes>
ã¿ã°ã«è€æ°ã® <method>
ã¿ã°ãš <field>
ã¿ã°ãå«ããããšã§ããããžã§ã¯ãå
ã®å€ãã®é
ç®ãéžæããèŠåãäœæããããšãã§ããŸããããšãã°ã次ã®ãããªäŸã§ãã
<classes name="com\.yoyodyne\.beans\..*" regex="true">
<method name="get[A-Z].*" signature=""/>
<method name="set[A-Z].*" signature=".*"/>
<method name="is[A-Z].*" signature=""/>
<field name="CONST_.*"/>
</classes>
Modifiers å±æ§
<classes>
ã<method>
ãããã³ <field>
ã¿ã°ã¯ãã¹ãŠ modifiers å±æ§ãæã£ãŠããŸãããã®å±æ§ã¯ãé
ç®ãæ〠Java ã®ä¿®é£ŸåãããŒã¯ãŒãã«ãã£ãŠé
ç®ãäžèŽãããããã«äœ¿çšãããŸããè€æ°ã®ä¿®é£Ÿåã¯ãã¹ããŒã¹ã§åºåã£ãŠæå®ã§ããŸããmodifiers ãçç¥ãããå Žåãé
ç®ã®ä¿®é£Ÿåã¯éžææ¡ä»¶ã®äžéšãšããŠäœ¿çšãããŸããã修食åã¯æ¬¡ã®ãšããã§ãã
public
â ãœãŒã¹ ã³ãŒãã«ãããé ç®ã®åç §ç¯å²ã¯public
ã§ããprotected
â ãœãŒã¹ ã³ãŒãã«ãããé ç®ã®åç §ç¯å²ã¯protected
ã§ããprivate
â ãœãŒã¹ ã³ãŒãã«ãããé ç®ã®åç §ç¯å²ã¯private
ã§ããdefault
â ããã¯ããœãŒã¹ ã³ãŒãã§public
ãprotected
ãprivate
ã®ããããæå®ãããŠããªããšãã«ãé ç®ã«äžããããæ¢å®ã®åç §ç¯å²ãè¡šããŸããabstract
â é ç®ã¯ããœãŒã¹ ã³ãŒãã§abstract
ã«èšå®ãããŠããŸãã<field>
ã§äœ¿çšãããŠããå Žåã«ã¯æå³ãæã¡ãŸãããfinal
â é ç®ã¯ããœãŒã¹ ã³ãŒãã§final
ã«èšå®ãããŠããŸããstatic
â é ç®ã¯ããœãŒã¹ ã³ãŒãã§static
ã«èšå®ãããŠããŸããnative
â ã¡ãœããã¯ããœãŒã¹ ã³ãŒãã§native
ã«èšå®ãããŠããŸãã<classes>
ãŸãã¯<field>
ã§äœ¿çšãããŠããå Žåã«ã¯æå³ãæã¡ãŸãããstrictfp
â é ç®ã¯ããœãŒã¹ ã³ãŒãã§strictfp
ã«èšå®ãããŠããŸããsynchronized
â ã¡ãœããã¯ããœãŒã¹ ã³ãŒãã§synchronized
ã«èšå®ãããŠããŸãã<classes>
ãŸãã¯<field>
ã§äœ¿çšãããŠããå Žåã«ã¯æå³ãæã¡ãŸãããtransient
â ãã£ãŒã«ãã¯ããœãŒã¹ ã³ãŒãã§transient
ã«èšå®ãããŠããŸãã<classes>
ãŸãã¯<method>
ã§äœ¿çšãããŠããå Žåã«ã¯æå³ãæã¡ãŸãããvolatile
â ãã£ãŒã«ãã¯ããœãŒã¹ ã³ãŒãã§volatile
ã«èšå®ãããŠããŸãã<classes>
ãŸãã¯<method>
ã§äœ¿çšãããŠããå Žåã«ã¯æå³ãæã¡ãŸãããclass
â é ç®ã¯class
ïŒã¯ã©ã¹ïŒã§ããããã¯ã<classes>
ã§äœ¿çšãããå Žåã«ã®ã¿æå³ãæã¡ãŸããinterface
â é ç®ã¯interface
ïŒã€ã³ã¿ãŒãã§ã€ã¹ïŒã§ããããã¯ã<classes>
ã§äœ¿çšãããå Žåã«ã®ã¿æå³ãæã¡ãŸããenum
â é ç®ã¯enum
ïŒåæåïŒã§ããããã¯ã<classes>
ã§äœ¿çšãããå Žåã«ã®ã¿æå³ãæã¡ãŸããannotation
â é ç®ã¯ Javaannotation
ïŒã¢ãããŒã·ã§ã³ïŒã§ããããã¯ã<classes>
ã§äœ¿çšãããå Žåã«ã®ã¿æå³ãæã¡ãŸããsynthetic
â Java ã³ã³ãã€ã©ã¯ãã®é ç®ãå®è£ æ å ±ã®è©³çŽ°ãšããŠäœæããŠããããããœãŒã¹ ã³ãŒãã®äžéšãšããŠçŸããŸããã
èªèã§ããªã修食åã¯ç¡èŠãããŸãã修食åã®åã« !
ãå ããããšã§ã修食åãåŠå®ãšããŠæå®ããããšãã§ããŸãã修食åã¯å€§æåãšå°æåãåºå¥ããŸããã
<classes modifiers="public class" name="com.yoyodyne.*">
<method modifiers="!private !native" name="*" signature="**"/>
<field modifiers="!public final" name="*"/>
</classes>
<classes modifiers="!default !private !enum !annotation" name="**">
<method modifiers="!default !private" name="*" signature="**"/>
<field modifiers="!default !private" name="*"/>
</classes>
ååïŒãªãã©ã«ããã¿ãŒã³ãããã³æ£èŠè¡šçŸ
ã¯ã©ã¹ãšã¡ã³ããŒã®ååã¯ããªãã©ã«å€ããã¿ãŒã³ããŸãã¯æ£èŠè¡šçŸã®ããããã§æå®ã§ããŸãããªãã©ã«å€ã䜿çšãããšãäžèŽãããé
ç®ãæ£ç¢ºã«æå®ã§ããŸããããã¿ãŒã³ãæ£èŠè¡šçŸã䜿çšãããšã1 ã€ã®ãšã³ããªã«å¯Ÿã㊠1 ã€ä»¥äžã®é
ç®ãäžèŽãããããšãã§ããŸããæ¢å®ã§ã¯ã?
ãŸã㯠*
ãå«ãŸããŠããªãéããååã¯ãªãã©ã«å€ãšããŠæ±ãããŸããæ£èŠè¡šçŸãæå®ããã«ã¯ãã¿ã°ã« regex="true"
å±æ§ãè¿œå ããå¿
èŠããããŸãã
æ£èŠè¡šçŸã®äœ¿çš
å ¥åãããæ£èŠè¡šçŸã¯ãJava æ£èŠè¡šçŸãµããŒãã«ãã£ãŠã³ã³ãã€ã«ã§ããªããã°ãªããŸãããç¡å¹ãªãã¿ãŒã³ã䜿çšãããå Žåã«ã¯ãã«ãã倱æããŸããJava æ£èŠè¡šçŸã§ãµããŒããããæ§æã®è©³çŽ°ã«ã€ããŠã¯ãJava Regular Expression Tutorial ãåç §ããŠãã ããã
ã¡ã¢ïŒ åŒæ°ã®ãªãã¡ãœãã眲åãšäžèŽãããå Žåã¯ãæ£èŠè¡šçŸã«
^$
ãŸãã¯\Q\E
ã䜿çšããŸãã
ãã¿ãŒã³ã®äœ¿çš
ãã¿ãŒã³ã¯ãªãã©ã«å€ã«ãã䌌ãŠããŸããã次ã«æãããã¿ãŒã³ã®ã€ã³ãžã±ãŒã¿ãŒã 1 ã€ä»¥äžå«ãã§ããŸãã
?
â 1 æåãšäžèŽããŸãã*
â å¶éä»ã㧠0 å以äžã®æåãšäžèŽããŸããäžèŽãããããšãã§ãããã®ã¯ãç §åããŠããé ç®ã®çš®é¡ã«ãã£ãŠç°ãªããŸããããã«ã€ããŠã¯ã以éã®ã»ã¯ã·ã§ã³ã§èª¬æããŸãã**
â å¶éãªã㧠0 å以äžã®æåãšäžèŽããŸãã
ã¯ã©ã¹åã®ãã¿ãŒã³
*
ãã¯ã©ã¹åã§äœ¿çšãããŠããå Žåã«ã¯ããµãããã±ãŒãžã§ã¯ãªãåç¬ã®ããã±ãŒãžå
ã®é
ç®ãšäžèŽããŸãã**
ãã¿ãŒã³ã¯ãããã±ãŒãžãããã¯ä»»æã®ãµãããã±ãŒãžå
ã®é
ç®ãšäžèŽããŸãã
ã¡ãœããåãšãã£ãŒã«ãåã®ãã¿ãŒã³
ã¡ãœããåããã£ãŒã«ãåã§äœ¿çšãããŠãã *
ãš **
ã®éã«éãã¯ãããŸãããã©ã¡ãã 0 å以äžã®æåãšäžèŽããŸãã
ã¡ãœãã眲åã®ãã¿ãŒã³
ã¡ãœãã眲åã§ãã¿ãŒã³ã䜿çšãããŠããå Žåã¯ã*
ãš **
ã®éã«éãããããŸãã*
ãã¿ãŒã³ã¯ã¡ãœãããžã® 0 ãŸã㯠1 åã®åŒæ°ãšäžèŽããã®ã«å¯Ÿãã**
ã¯ä»»æã®æ°ã®åŒæ°ãšäžèŽããŸãã
以äžã«ã眲åã®äžèŽã®äŸã瀺ããŸãã
* |
** |
long,* |
long,** |
|
---|---|---|---|---|
() | â | â | ||
(int) | â | â | ||
(java.lang.String) | â | â | ||
(long,int) | â | â | ||
(long,boolean,int) | â | â |
ã¡ã¢ïŒ åŒæ°ã®ãªãã¡ãœãã眲åãšäžèŽãããå Žåã¯ããã¿ãŒã³ã空çœã®ãŸãŸã«ããŠãããŸãã