먼저 BrowserPlugin소스는 아래 경로에서 받을 수 있습니다

준비물
BrowserPlugin 소스
Android Full 소스


1. 소스 받기

http://android.git.kernel.org/?p=platform/development.git;a=tree;f=samples/BrowserPlugin;h=a1285d8c368a1d0b59f66fbb128ac384249bb5b4;hb=28745b4ee52ef4864f9bdaed1d5e1cb9ac849b15

(링크가 안될 수 있으니 android.kernel.org -> platform/development.git -> sample -> history -> 의 히스토리중


해당 history 바로 애래의

tree 선택 (구글에서 의도적으로 Browser Plugin Sample 소스를 삭제 하였습니다.;;;)

-> BrowserPlugin 클릭

2. 빌드를 시도하려면 풀 소스가 필요하다. 풀소스 root 경로에서 아래와 같이 make 실행

make SampleBrowserPlugin

3.   libsamplelibrary.so 파일이 빌드가 되며 out/ 디렉토리를 찾으면 .so파일이 있습니다..

------ 여기까지 알아내는데 2시간 ㅠㅠ ---------
(README 파일을 보면 쉽게 설명이 되어있다)

4.  해당 .so 파일을 이용하여 SampleBrowserPlugin 프로젝트를 이클립스로 Import하여
libs디렉토리에 .so 파일을 넣어서 빌드!!

5. 아래 파일을 HTML로 만들고 열어보자!!!

<object type="application/x-testbrowserplugin" height=50 width=250>
    <param name="DrawingModel" value="Surface" />
    <param name="PluginType" value="Background" />
</object>


.
.
.
.
.

하지만...
작동하지 않습니다..
파란 물음표 레고 박스가 덩그라니 있네요..
 ㅠㅠ

왜 안되는지 다시 분석...........
webkit의 plugin 관련 log도 풀어보고 이것저것 삽질 해본결과...


----------------- 여기까지 2시간... ㅠㅠ ------------------


원인은 프레임워크 webkit관련 소스들.......

확인결과 framework의  PluginManager.java에 아래와 같이 되어있는데.. 이 코드를 보니,....


 private static final String SIGNATURE_1 = "308204c5308203ada003020102020900d7cb412f75f4887e300d06092a864886f70d010105050030819d310b3009060355040613025553311330110603550408130a43616c69666f726e69613111300f0603550407130853616e204a6f736531233021060355040a131a41646f62652053797374656d7320496e636f72706f7261746564311c301a060355040b1313496e666f726d6174696f6e2053797374656d73312330210603550403131a41646f62652053797374656d7320496e636f72706f7261746564301e170d3039313030313030323331345a170d3337303231363030323331345a30819d310b3009060355040613025553311330110603550408130a43616c69666f726e69613111300f0603550407130853616e204a6f736531233021060355040a131a41646f62652053797374656d7320496e636f72706f7261746564311c301a060355040b1313496e666f726d6174696f6e2053797374656d73312330210603550403131a41646f62652053797374656d7320496e636f72706f726174656430820120300d06092a864886f70d01010105000382010d0030820108028201010099724f3e05bbd78843794f357776e04b340e13cb1c9ccb3044865180d7d8fec8166c5bbd876da8b80aa71eb6ba3d4d3455c9a8de162d24a25c4c1cd04c9523affd06a279fc8f0d018f242486bdbb2dbfbf6fcb21ed567879091928b876f7ccebc7bccef157366ebe74e33ae1d7e9373091adab8327482154afc0693a549522f8c796dd84d16e24bb221f5dbb809ca56dd2b6e799c5fa06b6d9c5c09ada54ea4c5db1523a9794ed22a3889e5e05b29f8ee0a8d61efe07ae28f65dece2ff7edc5b1416d7c7aad7f0d35e8f4a4b964dbf50ae9aa6d620157770d974131b3e7e3abd6d163d65758e2f0822db9c88598b9db6263d963d13942c91fc5efe34fc1e06e3020103a382010630820102301d0603551d0e041604145af418e419a639e1657db960996364a37ef20d403081d20603551d230481ca3081c780145af418e419a639e1657db960996364a37ef20d40a181a3a481a030819d310b3009060355040613025553311330110603550408130a43616c69666f726e69613111300f0603550407130853616e204a6f736531233021060355040a131a41646f62652053797374656d7320496e636f72706f7261746564311c301a060355040b1313496e666f726d6174696f6e2053797374656d73312330210603550403131a41646f62652053797374656d7320496e636f72706f7261746564820900d7cb412f75f4887e300c0603551d13040530030101ff300d06092a864886f70d0101050500038201010076c2a11fe303359689c2ebc7b2c398eff8c3f9ad545cdbac75df63bf7b5395b6988d1842d6aa1556d595b5692e08224d667a4c9c438f05e74906c53dd8016dde7004068866f01846365efd146e9bfaa48c9ecf657f87b97c757da11f225c4a24177bf2d7188e6cce2a70a1e8a841a14471eb51457398b8a0addd8b6c8c1538ca8f1e40b4d8b960009ea22c188d28924813d2c0b4a4d334b7cf05507e1fcf0a06fe946c7ffc435e173af6fc3e3400643710acc806f830a14788291d46f2feed9fb5c70423ca747ed1572d752894ac1f19f93989766308579393fabb43649aa8806a313b1ab9a50922a44c2467b9062037f2da0d484d9ffd8fe628eeea629ba637";

//....생략..

                if (SystemProperties.getBoolean("ro.secure", false)) {
                    boolean signatureMatch = false;
                    for (Signature signature : signatures) {
                        for (int i = 0; i < SIGNATURES.length; i++) {
                            if (SIGNATURES[i].equals(signature)) {
                                signatureMatch = true;
                                break;
                            }
                        }
                    }
                    if (!signatureMatch) {
                        continue;
                    }
                }



1개의 signature만 작동 가능하네요..  헉....... ㅠㅠ

해당 플러그인 패키지가 signature가 SIGNATURE_1 과 동일해야 동작함을 알 수 있습니다... OTL
찾아보니 해당 signature는 adobe사의 signature 이네요...

ro.secure 가 1이면 되도록 설정을 해놓았기 때문에
단말기를 루팅해서 ro.secure = 1로 만들어 놓고 테스트는 가능할것으로 보입니다.
하지만 일반 안드로이드 단말기에는 절대로 돌아가지 않는다는것! ( 과거 글을 찾아보니 에뮬레이터에서 돌아간다는 분들이 있네요.. ro.secure가 에뮬레이터에서는 1인가 보네요.. )

악성코드 때문에 막아둔건가... 생각이 드네요.. 에궁 ㅠㅠ

어도비사의 signature를 가지고 있으면 가능하겠지만..
이 글을 보신분은 과감히 포기하시기 바랍니다......ㅋㅋ 불가능하네요...
삽질 하시는 다른분이 없길 바라며..


Android 2011. 5. 29. 01:26 ,